当前位置: 首页 > news >正文

T527 Android13遥控适配

T527 Android13遥控的适配和官方提供的文档有些不一样,按照官方的文档不能够正常适配到自己的遥控器。

首先确保驱动是否有打开CONFIG_AW_IR_RX和CONFIG_RC_DECODERS=y
以及CONFIG_IR_NEC_DECODER=m,这个可以在longan/out/t527对应的目录下的.config查看是否存在相关的项。一般默认是打开的,如果没有就到android13_arm64_defconfig配置里面添加。

然后查看驱动是否有加载到系统里面,可以adb下执行lsmod|grep ir查看是否有加载sunxi_ir_rx和ir_nec_decoder,如果没有加载,可以看一下android/device/softwinner下面的对应项目是否有将CONFIG_AW_SUPPORT_IR这个参数设置为false。这个值为false,驱动文件是不会编译到系统里面的。

驱动加载以后,getevent是可以查看到数据上报的,但是这个时候,按键是没有功能的,这个时候一般都会想到根据getvent上报的数值去改映射文件sunxi-ir.kl。但是这个时候改了也是没有用的,这是因为底层没有添加相应的按键值映射。如果底层添加了相应的按键值映射,sunxi-ir.kl可以不用修改,里面大部分的按键都已经映射好了android系统层按键值。

如何添加自己遥控器的按键值呢?首先打开android/longan/bsp/drivers/ir-rx/sunxi-ir-keymap.h,里面的数组static struct rc_map_table sunxi_nec_scan[]就是我们要添加按键映射的地方。先在adb下执行getevent -l /dev/input/event3,这里/dev/input/event3对应的是"sunxi-ir"的节点。然后按遥控器按键,比如我按一下音量加按键。得到如下值:

getevent -l /dev/input/event3
EV_MSC       MSC_SCAN             0000800a
EV_KEY       KEY_VOLUMEUP         DOWN
EV_SYN       SYN_REPORT           00000000
EV_MSC       MSC_SCAN             0000800a
EV_SYN       SYN_REPORT           00000000
EV_MSC       MSC_SCAN             0000800a
EV_SYN       SYN_REPORT           00000000
EV_KEY       KEY_VOLUMEUP         UP
EV_SYN       SYN_REPORT           00000000

找到上面的带MSC_SCAN的那一行,就是上报的数据,这行第三列第2个数字以后的数据(00800a)就是要填写到上面说的sunxi_nec_scan里面的。上面的按键我们需要在数组中添加如下代码:

--- a/longan/bsp/drivers/ir-rx/sunxi-ir-keymap.h
+++ b/longan/bsp/drivers/ir-rx/sunxi-ir-keymap.h
@@ -164,6 +164,40 @@ static struct rc_map_table sunxi_nec_scan[] = {{ 0xbf63, BTN_MISC },           // unknow{ 0xbf58, BTN_MISC },           // unknow{ 0xbf61, KEY_HOME },+       { 0x00800a, KEY_VOLUMEUP },

KEY_VOLUMEUP对应的是音量加按键,这个已经在sunxi-ir.kl里面映射好了。其他按键按照上面的方法依次填入即可。添加完所有按键以后,重新编译longan生成固件烧录,遥控器就会有作用了。

遥控器有个按键是鼠标模式,系统默认切换的时候是没有提示的,这个很不友好,如果要添加提示,添加下面修改即可:

diff --git a/frameworks/base/core/res/res/values-zh-rCN/strings.xml b/frameworks/base/core/res/res/values-zh-rCN/strings.xml
index 834e980487..e1bc769d84 100644
--- a/frameworks/base/core/res/res/values-zh-rCN/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rCN/strings.xml
@@ -2297,4 +2297,6 @@<string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"无法从<xliff:g id="DEVICE">%1$s</xliff:g>上访问平板电脑的摄像头"</string><string name="vdm_secure_window" msgid="161700398158812314">"流式传输时无法访问此内容。您可以尝试在手机上访问。"</string><string name="system_locale_title" msgid="711882686834677268">"系统默认设置"</string>
+	<string name="enter_mouse_mode">进入鼠标模式,再按一次退出鼠标模式!</string>
+	<string name="exit_mouse_mode">进入遥控模式!</string></resources>
diff --git a/frameworks/base/core/res/res/values-zh-rHK/strings.xml b/frameworks/base/core/res/res/values-zh-rHK/strings.xml
index cc4d15e339..86575ba0c3 100644
--- a/frameworks/base/core/res/res/values-zh-rHK/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rHK/strings.xml
@@ -2295,4 +2295,6 @@<string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"無法從 <xliff:g id="DEVICE">%1$s</xliff:g> 存取平板電腦的相機"</string><string name="vdm_secure_window" msgid="161700398158812314">"串流播放時無法使用,請改用手機。"</string><string name="system_locale_title" msgid="711882686834677268">"系統預設"</string>
+	<string name="enter_mouse_mode">進入滑鼠模式,再按一次退出滑鼠模式!</string>
+	 <string name="exit_mouse_mode">進入遙控模式!</string></resources>
diff --git a/frameworks/base/core/res/res/values-zh-rTW/strings.xml b/frameworks/base/core/res/res/values-zh-rTW/strings.xml
index 810ddc684b..443949e25b 100644
--- a/frameworks/base/core/res/res/values-zh-rTW/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rTW/strings.xml
@@ -2295,4 +2295,6 @@<string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"無法從 <xliff:g id="DEVICE">%1$s</xliff:g> 存取平板電腦的相機"</string><string name="vdm_secure_window" msgid="161700398158812314">"串流播放時無法存取這項內容,請改用手機。"</string><string name="system_locale_title" msgid="711882686834677268">"系統預設"</string>
+	<string name="enter_mouse_mode">進入滑鼠模式,再按一次退出滑鼠模式!</string>
+	 <string name="exit_mouse_mode">進入遙控模式!</string></resources>
diff --git a/frameworks/base/core/res/res/values/strings.xml b/frameworks/base/core/res/res/values/strings.xml
index fefa2c1454..c0d5893d06 100644
--- a/frameworks/base/core/res/res/values/strings.xml
+++ b/frameworks/base/core/res/res/values/strings.xml
@@ -6348,4 +6348,6 @@ ul.</string><!-- Title for preference of the system default locale. [CHAR LIMIT=50]--><string name="system_locale_title">System default</string>
+	<string name="enter_mouse_mode">Enter into mouse mode, click again to quit</string>
+	<string name="exit_mouse_mode">Restore to default button mode</string></resources>
diff --git a/frameworks/base/core/res/res/values/symbols.xml b/frameworks/base/core/res/res/values/symbols.xml
index b58229ee19..dce38094a3 100644
--- a/frameworks/base/core/res/res/values/symbols.xml
+++ b/frameworks/base/core/res/res/values/symbols.xml
@@ -4915,4 +4915,6 @@<!-- /// AW: add end. --><java-symbol type="bool" name="config_global_action_screenshot_enabled" />
+  <java-symbol type="string" name="enter_mouse_mode" />
+  <java-symbol type="string" name="exit_mouse_mode" /></resources>
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/MouseModeReceiver.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/MouseModeReceiver.java
new file mode 100755
index 0000000000..71d59a61cc
--- /dev/null
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/MouseModeReceiver.java
@@ -0,0 +1,25 @@
+package com.android.systemui;
+
+import java.util.*;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+import android.text.TextUtils;
+ import android.widget.Toast;
+ 
+public class MouseModeReceiver extends BroadcastReceiver
+{
+	static String TAG = "MouseModeReceiver";
+
+	@Override
+	public void onReceive(Context context, Intent intent) {
+		if (intent.getAction().equals("com.android.set_ir_mousemode")) {
+			Toast.makeText(context, com.android.internal.R.string.enter_mouse_mode, Toast.LENGTH_LONG).show();
+		}else if(intent.getAction().equals("com.android.set_ir_normalmode")){
+			Toast.makeText(context, com.android.internal.R.string.exit_mouse_mode, Toast.LENGTH_LONG).show();
+		}
+	}
+}
+
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index 6fe176a3cf..f824cc607b 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -161,7 +161,11 @@ public class SystemUIApplication extends Application implements// application theme in the manifest does only work for activities. Keep this in sync with// the theme set there.setTheme(R.style.Theme_SystemUI);
-
+		
+		IntentFilter irfilter = new IntentFilter("com.android.set_ir_mousemode");
+		irfilter.addAction("com.android.set_ir_normalmode");
+		registerReceiver(new MouseModeReceiver(),irfilter);
+		if (Process.myUserHandle().equals(UserHandle.SYSTEM)) {IntentFilter bootCompletedFilter = newIntentFilter(Intent.ACTION_LOCKED_BOOT_COMPLETED);
diff --git a/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java
index 25e714c5c0..b87d28fe27 100644
--- a/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java
@@ -239,9 +239,11 @@ public class TvWindowManager extends PhoneWindowManager {if (mKeyEnterMouseMode) {MouseMode.exitMouseMode();mKeyEnterMouseMode = false;
+					mContext.sendBroadcast(new Intent("com.android.set_ir_normalmode"));} else {MouseMode.enterMouseMode();mKeyEnterMouseMode = true;
+					mContext.sendBroadcast(new Intent("com.android.set_ir_mousemode"));}}return -1;

相关文章:

T527 Android13遥控适配

T527 Android13遥控的适配和官方提供的文档有些不一样&#xff0c;按照官方的文档不能够正常适配到自己的遥控器。 首先确保驱动是否有打开CONFIG_AW_IR_RX和CONFIG_RC_DECODERSy 以及CONFIG_IR_NEC_DECODERm&#xff0c;这个可以在longan/out/t527对应的目录下的.config查看是…...

第三部分使用脚手架:vue学习(61-65)

文章目录 61 创建vue脚手架![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f71d4324be0542209e690ab9e886d199.png)62 分析脚手架结构63 render函数64 修改默认配置65 ref 属性 61 创建vue脚手架 写完vue文件&#xff0c;没有脚手架做翻译&#xff0c;浏览器不认识…...

【Linux学习笔记】解析Linux系统内核:架构、功能、工作原理和发展趋势

操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体&#xff0c;它们互相依赖&#xff0c;不可分割。计算机的硬件&#xff0c;含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是…...

springboot连接oracle报错ORA-12505解决方案

springboot连接oracle报错ORA-12505解决方案 springboot项目&#xff0c;在测试环境连接正常&#xff0c;生产环境连接数据库报错ORA-12505。 测试环境连接数据库语句为jdbc:oracle:thin:xxxx.xxxx.xxxx.xxxx:1521:orcl 生产环境修改对应ip后报错ORA-12505, TNS:listener does…...

服务器为什么大多用 Linux?

服务器为什么大多用 Linux&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#…...

C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法

前言 上一篇文章中介绍了Snap7访问西门子S7-1200/S7-1500 DB块的方法&#xff0c;对于S7-200PLC是没有数据块访问的。S7-200PLC中Snap7只能通过访问MB块&#xff0c;VB块的方法进行和PLC之间的Snap7通信和数据交换。手头没有S7-200PLC故通过合信CTMC M226ES运动控制器进行测试&…...

通信及信号处理领域期刊影响因子、分区及期刊推荐-2024版

期刊名IF(202401)中科院分区(20231227)备注IEEE Journal on Selected Areas in Communications16.4计算机科学1区Top通信顶刊IEEE Transactions on Signal Processing5.4工程技术2区Top信号处理顶刊IEEE Transactions on Information Theory2.5计算机科学3区信息论顶刊IEEE Tra…...

cfa一级考生复习经验分享系列(十五)

备考背景&#xff1a; 本科211石油理科背景&#xff1b;无金融方面专业知识及工作经验&#xff1b;在职期间备考&#xff1b;有效备考时间2个月&#xff1b;12月一级考试10A。 复习进度及教材选择 首先说明&#xff0c;关于教材的经验分享针对非金融背景考生。 第一阶段&#x…...

如潮好评!优秀选手视角下的第二届粤港澳大湾区(黄埔)国际算法算例大赛

为发挥国家实验室作用、推动地区大数据与人工智能算法的生态体系建设&#xff0c;琶洲实验室&#xff08;黄埔&#xff09;受广州市黄埔区政府委托&#xff0c;于 2022 年创办粤港澳大湾区&#xff08;黄埔&#xff09;国际算法算例大赛&#xff0c;推动原始创新、赋能社会经济…...

软件测试之冒烟测试

一、什么是冒烟测试 这一术语源自硬件行业。对一个硬件或硬件组件进行更改或修复后&#xff0c;直接给设备加电。如果没有冒烟&#xff0c;则该组件就通过了测试。在软件中&#xff0c;“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过…...

NE555学习笔记-2024

实物图片 NE555引脚图 内部时序图 示列1&#xff0c;红外接收电路 红外接收电路的工作原理&#xff1a;在上述电路中&#xff0c;TSOP1738构成了该电路的主要组成部分&#xff0c;旨在检测来自任何来源的红外信号。这用于检测38 KHz范围的信号&#xff0c;因此命名为“TSOP173…...

记一次docker中安装redis的过程

1. Docker搜索redis镜像 docker search redis2. Docker搜索redis镜像 docker pull redis3.Docker挂载配置文件 挂载 redis 的配置文件挂载 redis 的持久化文件&#xff08;为了数据的持久化&#xff09;。 conf文件位置&#xff1a; /home/redis/myredis/redis.conf data文件…...

Matlab进阶绘图第37期—多色悬浮柱状图

多色悬浮柱状图是一种特殊的柱状图。 与常规柱状图相比&#xff0c;多色悬浮柱状图可以通过悬浮的矩形展示最小值到最大值的范围&#xff08;或其他范围表达&#xff09;&#xff0c;并通过颜色进行美化/区分/附加信息。 本文使用自己制作的Floatingbar小工具进行多色悬浮柱状…...

【嵌入式】About USB Powering

https://www.embedded.com/usb-type-c-and-power-delivery-101-power-delivery-protocol/https://www.embedded.com/usb-type-c-and-power-delivery-101-power-delivery-protocol/ Type-C接口有多强&#xff1f;PD协议又是什么&#xff1f;-电子发烧友网由于Type-C接口自身的强…...

MySQL——事物

目录 一.发现问题 二.什么时事物 三.事务提交方式 四.事物的常规操作方式 五. 事务隔离级别 1.如何理解隔离性 2.隔离级别 3.查看与设置隔离性 4.读未提交【Read Uncommitted】 5.读提交【Read Committed】 6.可重复读【Repeatable Read】 7.串行化【serializabl…...

Windows搭建RTSP视频流服务(EasyDarWin服务器版)

文章目录 引言1、安装FFmpeg2、安装EasyDarWin3、实现本地\虚拟摄像头推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP / RTMP系列文章 引言 RTSP和RTMP视频流的区别 RTSP &#xff08;Real-Time Streaming Protocol&#xff09;实时流媒体协议。 RTSP定义流格式&am…...

私域营销,让你的生意从线下到线上都火爆!

一、提高流量 获取流量的五个关键要素&#xff1a;目标受众、传播渠道、内容策略、短期利益和长期价值 在当今竞争激烈的市场环境中&#xff0c;获取流量是每个企业和个人都必须面对的挑战。为了有效地吸引潜在客户&#xff0c;我们需要关注五个关键要素&#xff1a;目标受众…...

MATLAB基本绘图操作(二维和三维绘图)

MATLAB基本绘图操作 文章目录 MATLAB基本绘图操作1、二维平面绘图1.1、线条&#xff08;折线图&#xff09;1.2、条形图1.3、极坐标图1.4、散点图 2、三维立体绘图2.1、三维曲面图2.2、三维曲线图&#xff08;点图&#xff09; 3、图片分区&#xff08;子图&#xff09; 1、二维…...

中国社科院与新加坡新跃社科联合培养博士—攻读在职博士的理由是什么?

当今社会&#xff0c;很多人已经深刻的意识到知识是改变自己命运的重要途径&#xff0c;在职教育的完善让很多在职人员选择此方式进修&#xff0c;那么为什么要选择攻读在职博士&#xff1f;中国社科院与新加坡新跃社科联合培养博士与您一起走进&#xff0c;在职博士。 那么其…...

T40N 君正智能处理器T40 BGA 芯片

T40N是一款智能视频应用处理器&#xff0c;适用于移动摄像机、安防等视频设备调查、视频聊天、视频分析等。该SoC引入了一种创新的体系结构满足高性能计算和高质量图像和视频编码的要求通过视频设备解决。T40N提供高速CPU计算能力&#xff0c;出色的图像信号过程中&#xff0c;…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...