android11 屏蔽usb通过otg转接口外接鼠标设备
硬件平台:QCS6125
软件平台:Android11
需求:Android设备通过接usb转接线连接鼠标功能屏蔽。
考虑到屏蔽的层面可以从两个层面去做,一个是驱动层面不识别,一个就是Android系统层面不识别加载,本篇只讲后者。
1、分析接入鼠标时候的日志:
07-17 11:49:31.326124 0 0 I msm-dwc3 4e00000.ssusb: DWC3 exited from low power mode
--------- switch to main
07-17 11:49:31.519494 3131 3310 E AntiCheck: [SECSDK] pid 3309, TracePID is 0
--------- switch to kernel
07-17 11:49:31.557661 0 0 I usb 1-1 : new low-speed USB device number 2 using xhci-hcd
07-17 11:49:31.715120 0 0 I usb 1-1 : New USB device found, idVendor=046d, idProduct=c077
07-17 11:49:31.715145 0 0 I usb 1-1 : New USB device strings: Mfr=1, Product=2, SerialNumber=0
07-17 11:49:31.715162 0 0 I usb 1-1 : Product: USB Optical Mouse
07-17 11:49:31.715179 0 0 I usb 1-1 : Manufacturer: Logitech
07-17 11:49:31.740283 0 0 I input : Logitech USB Optical Mouse as /devices/platform/soc/4e00000.ssusb/4e00000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1:1.0/0111:0003:046D:C077.0001/input/input6
07-17 11:49:31.740748 0 0 I hid-generic 0111: 0003:046D:C077.0001: input: USB HID v1.11 Mouse [Logitech USB Optical Mouse] on usb-xhci-hcd.0.auto-1/input0
--------- switch to main
07-17 11:49:31.868222 1445 1557 D EventHub: No input device configuration file found for device 'Logitech USB Optical Mouse'.
07-17 11:49:31.869328 1445 1557 I EventHub: usingClockIoctl=true
07-17 11:49:31.869380 1445 1557 I EventHub: New device: id=7, fd=306, path='/dev/input/event6', name='Logitech USB Optical Mouse', classes=0x80000008, configuration='', keyLayout='', keyCharacterMap='', builtinKeyboard=false,
07-17 11:49:31.871511 1445 1557 I InputReader: Device added: id=8, eventHubId=7, name='Logitech USB Optical Mouse', descriptor='45dd693031521900f038547baa8709cf60c2611f',sources=0x00002002
07-17 11:49:31.874726 3131 3151 I ez.app.launche: Background young concurrent copying GC freed 777596(44MB) AllocSpace objects, 0(0B) LOS objects, 20% free, 91MB/115MB, paused 202us total 119.147ms
可以看到,底层驱动识别后,EventHub也识别了设备一些类型属性,
New device: id=7, fd=306, path='/dev/input/event6', name='Logitech USB Optical Mouse', classes=0x80000008, configuration='', keyLayout='', keyCharacterMap='', builtinKeyboard=false,
遂计划从这里入手:
在EventHub::openDeviceLocked方法中,有对input设备类型的判断和加载,日志显示的是上文标红的类型,查看EventHub.h中设备类型的定义,发现该类型就是鼠标的类型:
/* The input device is a cursor device such as a trackball or mouse. */
INPUT_DEVICE_CLASS_CURSOR = 0x00000008,
2、跟代码逻辑,屏蔽识别该类型的代码段,具体修改如下:
diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp
index a1514af66..f726979be 100644
--- a/services/inputflinger/reader/EventHub.cpp
+++ b/services/inputflinger/reader/EventHub.cpp
@@ -67,6 +67,9 @@ using android::base::StringPrintf;namespace android {+// class type we do not want to support
+static uint32_t NOT_SUPPORT_CLASS_TYPE = 0;
+static constexpr bool DEBUG = false;static const char* DEVICE_PATH = "/dev/input";
@@ -1331,7 +1334,8 @@ status_t EventHub::openDeviceLocked(const char* devicePath) {// See if this is a cursor device such as a trackball or mouse.if (test_bit(BTN_MOUSE, device->keyBitmask) && test_bit(REL_X, device->relBitmask) &&test_bit(REL_Y, device->relBitmask)) {
- device->classes |= INPUT_DEVICE_CLASS_CURSOR;
+ //device->classes |= INPUT_DEVICE_CLASS_CURSOR;
+ device->classes &= NOT_SUPPORT_CLASS_TYPE;}// See if this is a rotary encoder type device.
将设备类型或的标志位标为不识别的一个类型即可,后文代码识别到class为0,会不走加载流程:
// If the device isn't recognized as something we handle, don't monitor it.if (device->classes == 0) { ALOGV("Dropping device: id=%d, path='%s', name='%s'", deviceId, devicePath,device->identifier.name.c_str());delete device;return -1;}
从而不挂载,完成。
Mark~~~
相关文章:
android11 屏蔽usb通过otg转接口外接鼠标设备
硬件平台:QCS6125 软件平台:Android11 需求:Android设备通过接usb转接线连接鼠标功能屏蔽。 考虑到屏蔽的层面可以从两个层面去做,一个是驱动层面不识别,一个就是Android系统层面不识别加载,本篇只讲后者。…...
HAL库源码移植与使用之RTC时钟
实时时钟(Real Time Clock,RTC),本质是一个计数器,计数频率常为秒,专门用来记录时间。 普通定时器无法掉电运行!但RTC可由VBAT备用电源供电,断电不断时 这里讲F1系列的RTC 可以产生三个中断信号ÿ…...
GIT命令学习 一
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…...
VS+QT 打包可执行文件.exe
切换成release版本,同时更改项目属性中release配置下的各个属性,确保匹配 重新生成解决方案,将生成的.exe复制到一个空白文件夹中 执行: cd D:\QT\5.12.10\msvc2015_64\binwindeployqt C:\Users\DELL\Desktop\serials\MainWind…...
Android笔试面试题AI答之Activity(2)
答案仅供参考,大部分为文心一言AI作答 目录 1. 请介绍一下Activity 生命周期?1. 完全生命周期2. 可见生命周期3. 前台生命周期4. 配置更改5. 特殊场景 2. 请介绍一下横竖屏切换时Activity的生命周期变化?1.默认行为(未设置androi…...
来自Transformers的双向编码器表示(BERT) 通俗解释
来自Transformers的双向编码器表示(BERT) 目录 1. 从上下文无关到上下文敏感2. 从特定于任务到不可知任务3. BERT:把两个最好的结合起来4. BERT的输入表示5. 掩蔽语言模型(Masked Language Modeling)6. 下一句预测&am…...
代码随想录第十六天|贪心算法(2)
目录 LeetCode 134. 加油站 LeetCode 135. 分发糖果 LeetCode 860. 柠檬水找零 LeetCode 406. 根据身高重建队列 LeetCode 452. 用最少数量的箭引爆气球 LeetCode 435. 无重叠区间 LeetCode 763. 划分字母区间 LeetCode 56. 合并区间 LeetCode 738. 单调递增的数字 总…...
花几千上万学习Java,真没必要!(二十二)
1、final关键字: 测试代码1: package finaltest.com;public class FinalBasicDemo {public static void main(String[] args) {// final修饰基本数据类型变量final int number 5;// 尝试修改number的值,这将导致编译错误// number 10; // …...
在RK3568上如何烧录MAC?
这里我们用RKDevInfoWriteTool 1.1.4版本 下载地址:https://pan.baidu.com/s/1Y5uNhkyn7D_CjdT98GrlWA?pwdhm30 提 取 码:hm30 烧录过程: 1. 解压RKDevInfoWriteTool_Setup_V1.4_210527.7z 进入解压目录,双击运行RKDevInfo…...
1.30、基于卷积神经网络的手写数字旋转角度预测(matlab)
1、卷积神经网络的手写数字旋转角度预测原理及流程 基于卷积神经网络的手写数字旋转角度预测是一个常见的计算机视觉问题。在这种情况下,我们可以通过构建一个卷积神经网络(Convolutional Neural Network,CNN)来实现该任务。以下…...
Windows如何使用Python的sphinx
在Windows上使用Python的Sphinx进行文档渲染和呈现,可以遵循以下步骤进行操作: 安装Python:首先,确保你的Windows系统上已经安装了Python。你可以从Python的官方网站下载并安装适合你系统(32位或64位&…...
C++ STL nth_element 用法
一:功能 将一个序列分为两组,前一组元素都小于*nth,后一组元素都大于*nth, 并且确保第 nth 个位置就是排序之后所处的位置。即该位置的元素是该序列中第nth小的数。 二:用法 #include <vector> #include <a…...
【PostgreSQL教程】PostgreSQL 选择数据库
博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...
C# —— HashTable
集合collections命名空间,专门进行一系列的数据存储和检索的类,主要包含了:堆栈、和队列、list、ArrayList、数组 HashTable 字典 storeList 排序列表等类 Array 数组 长度固定, 类型固定 通过索引值来进行访问 ArrayList动态数组,…...
LeetCode 第407场周赛个人题解
目录 100372. 使两个整数相等的位更改次数 原题链接 思路分析 AC代码 100335. 字符串元音游戏 原题链接 思路分析 AC代码 100360. 将 1 移动到末尾的最大操作次数 原题链接 思路分析 AC代码 100329. 使数组等于目标数组所需的最少操作次数 原题链接 思路分析 A…...
使用Django框架实现音频上传功能
数据库设计(models.py) class Music(models.Model):""" 音乐 """name models.CharField(verbose_name"音乐名字", max_length32)singer models.CharField(verbose_name"歌手", max_length32)# 本质…...
[路由器]IP-MAC的绑定与取消
背景:当公司的网络不想与外部人员进行共享,可以在路由器页面配置IP-MAC的绑定,让公司内部人员的手机和电脑的mac,才能接入到公司。第一步:在ARP防护中,启动IP-MAC绑定选项,必须启动仅允许IP-MAC…...
Idea配置远程开发
Idea配置远程开发 本篇博客介绍使用idea通过ssh连接ubuntu服务器进行开发 目录 Idea配置远程开发1.idae上点击file->Remote Development2.点击New Connection3.填写相关信息4.输入密码5.选择IDE版本和项目路径5.1 点击open an SSH terminal打开控制台5.2 依次执行命令 6.成…...
lua 实现 函数 判断两个时间戳是否在同一天
函数用于判断两个时间戳是否在同一天。下面是对代码的详细解释: ### 函数参数 - stampA 和 stampB:两个时间戳,用于比较。- resetInfo:一个可选参数,包含小时、分钟和秒数,用于调整时间戳。 ### 函数实现…...
工作纪实53-log4j日志打印文件隔离
在项目中,我有一堆业务日志需要打印,另一部分的日志,是没有格式的,需要被云平台离线解析并收集到kafka或者hdfs、hive等,需要将日志隔离打印到不同的文件 正常的log4j配置是下面这样的,配合Sl4j直接使用默认…...
GD32F407时钟树详解:168MHz系统时钟如何驱动你的ADC、SPI和CAN?
GD32F407时钟树深度解析:从PLL到外设的168MHz信号之旅 在嵌入式系统设计中,时钟如同芯片的"心跳",精确控制着每个外设的运作节奏。GD32F407这颗基于Cortex-M4内核的MCU,其168MHz的系统时钟如何精准分配到ADC、SPI、CAN等…...
基于ASR与NLP的法庭音频智能分析系统:架构、微调与法律场景实践
1. 项目概述:当法庭记录“开口说话” 在司法与法律科技领域,数据正以前所未有的方式重塑工作流程。传统的法庭记录,无论是书记员手写的笔录,还是后来普及的录音录像,其核心价值在于“记录”本身——它们是静态的、被动…...
长期使用后观察Taotoken聚合路由在高并发下的稳定性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用后观察Taotoken聚合路由在高并发下的稳定性 在构建和运营依赖大模型API的中大型项目时,服务的长期稳定性是技术…...
手把手教你用CCS v10为F280049C配置工程:从零搭建、RAM/FLASH切换、到数学库调用的完整流程
F280049C开发实战:CCS v10工程配置与RAM/FLASH切换全指南 第一次接触TI C2000系列DSP时,面对CCS开发环境和复杂的工程配置,很多开发者都会感到无从下手。本文将以F280049C这款高性价比DSP为例,带你从零开始搭建开发环境ÿ…...
从DICOM到NIfTI:3D Slicer中医学图像坐标转换的完整避坑指南(附Python代码片段)
从DICOM到NIfTI:3D Slicer中医学图像坐标转换的完整避坑指南(附Python代码片段) 医学影像处理中,数据格式和坐标系的差异常常成为工程师和研究员们的"隐形杀手"。想象一下,你花了三天三夜训练的深度学习模型…...
如何用AEUX在30分钟内完成Figma到After Effects的无缝动画转换
如何用AEUX在30分钟内完成Figma到After Effects的无缝动画转换 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 你有没有经历过这样的场景?在Figma中精心设计了完美的UI界面&…...
一次讲清本地大模型语音识别三件套:Vulkan 为什么是加速主线,而说话人识别为何成为唯一短板
把 whisper.cpp、sherpa-onnx、llama.cpp 三套引擎整合到一起,再用 Electron 包成桌面应用,这个技术思路本身并不复杂。真正考验工程功力的,是面向完全不懂技术的最终端用户,怎样让这些引擎尽可能“一键加速”,同时还不…...
告别AT指令!用nRF52832的BLE NUS服务,5分钟搞定手机与开发板的双向通信
用nRF52832的BLE NUS服务实现高效蓝牙串口通信 在嵌入式开发中,设备与移动端的双向通信一直是个痛点。传统AT指令虽然简单,但效率低下、扩展性差,每次通信都需要复杂的握手流程。而基于nRF52832的BLE NUS(Nordic UART Service&…...
基础模型全生命周期管理的混合架构实践与优化
1. 基础模型全生命周期管理的架构挑战基础模型(Foundation Models)正在重塑AI技术栈的每个环节,从预训练到推理部署的全生命周期管理面临前所未有的系统架构挑战。传统HPC(高性能计算)集群和云原生平台各自为政的局面&…...
Cadence IC617虚拟机导入后,Calibre DRC报License错误的保姆级修复指南
Cadence IC617虚拟机导入后Calibre DRC报License错误的终极解决方案 当你兴冲冲地打开从同事那里拷贝的Cadence IC617虚拟机镜像,准备开始芯片设计工作时,突然跳出的Calibre DRC license错误提示就像一盆冷水浇下来。这种"拿来即用"的环境本应…...
