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

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~~~

http://www.lryc.cn/news/404645.html

相关文章:

  • HAL库源码移植与使用之RTC时钟
  • GIT命令学习 一
  • VS+QT 打包可执行文件.exe
  • Android笔试面试题AI答之Activity(2)
  • 来自Transformers的双向编码器表示(BERT) 通俗解释
  • 代码随想录第十六天|贪心算法(2)
  • 花几千上万学习Java,真没必要!(二十二)
  • 在RK3568上如何烧录MAC?
  • 1.30、基于卷积神经网络的手写数字旋转角度预测(matlab)
  • Windows如何使用Python的sphinx
  • C++ STL nth_element 用法
  • 【PostgreSQL教程】PostgreSQL 选择数据库
  • C# —— HashTable
  • LeetCode 第407场周赛个人题解
  • 使用Django框架实现音频上传功能
  • [路由器]IP-MAC的绑定与取消
  • Idea配置远程开发
  • lua 实现 函数 判断两个时间戳是否在同一天
  • 工作纪实53-log4j日志打印文件隔离
  • 7月21日,贪心练习
  • FPGA DNA 获取 DNA_PORT
  • 使用 hutool工具实现导入导出功能。
  • 大语言模型-Transformer-Attention Is All You Need
  • spring(二)
  • MAC 数据恢复软件: STELLAR Data Recovery For MAC V. 12.1 更多增强功能
  • 初识godot游戏引擎并安装
  • Windows配置Qt+VLC
  • 本地部署 mistralai/Mistral-Nemo-Instruct-2407
  • 2月科研——arcgis计算植被差异
  • 深入理解Android中的缓存与文件存储目录