当前位置: 首页 > 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;…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...