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

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...