Skip to content

Latest commit

 

History

History
168 lines (116 loc) · 4.25 KB

File metadata and controls

168 lines (116 loc) · 4.25 KB

DJI Virtual Joystick USB HID 读取工具

概述

这是一个用于读取 DJI Virtual Joystick (VID: 0x2CA3, PID: 0x1501) USB HID 数据的 Android 应用程序。该程序直接通过 Android USB Host API 读取设备数据,无需使用 DJI SDK。

功能特性

  • ✅ 自动查找 DJI Virtual Joystick 设备
  • ✅ 请求和管理 USB 权限
  • ✅ 实时读取 USB HID 数据
  • ✅ 显示设备信息
  • ✅ 数据日志记录(HEX 和 ASCII 格式)
  • ✅ 数据包计数统计
  • ✅ 完整的 UI 调试界面

项目结构

app/src/main/java/com/example/usb_tesy_dji__joy/
├── MainActivity.kt              # 主 Activity,处理 USB 设备附件事件
├── MainViewModel.kt            # ViewModel,管理 UI 状态
├── UsbHidManager.kt            # USB HID 管理器,处理设备连接和数据读取
├── UsbHidScreen.kt             # Compose UI 界面
└── ui/theme/                   # Material3 主题配置

使用方法

1. 连接设备

  1. 将 DJI Virtual Joystick 连接到 Android 设备
  2. 应用会自动检测到 USB 设备附件事件
  3. 点击"查找设备"按钮查找设备
  4. 点击"请求权限"按钮获取 USB 访问权限

2. 开始读取数据

  1. 设备连接成功后,点击"开始读取"按钮
  2. 应用会开始读取 USB HID 数据
  3. 数据会以 HEX 和 ASCII 格式显示在日志区域

3. 停止读取

点击"停止读取"按钮停止数据读取

4. 查看设备信息

点击任意按钮会更新设备信息显示,包括:

  • 设备名称
  • Vendor ID (VID)
  • Product ID (PID)
  • 接口数量

调试信息

应用会在 Logcat 中输出详细的调试日志:

adb logcat | grep UsbHidManager

关键日志标签:

  • UsbHidManager: USB 设备管理日志
  • MainViewModel: UI 状态管理日志

技术实现

Android USB Host API

  • 使用 UsbManager 查找和管理 USB 设备
  • 使用 UsbDeviceConnection 建立设备连接
  • 使用 bulkTransfer() 读取 USB 数据

架构模式

  • MVVM 架构(Model-View-ViewModel)
  • Jetpack Compose UI
  • Kotlin Coroutines 异步处理
  • StateFlow 状态管理

关键参数

// DJI Virtual Joystick
const val DJI_VID = 0x2CA3  // Vendor ID
const val DJI_PID = 0x1501  // Product ID

权限说明

应用需要以下权限:

<uses-feature
    android:name="android.hardware.usb.host"
    android:required="false" />

应用会在运行时请求 USB 设备访问权限。

数据格式

读取的数据会显示为:

  • HEX 格式: 字节值的十六进制表示
  • ASCII 格式: 可打印字符表示(不可打印字符显示为 .

示例输出:

HEX: 01 02 03 04 05 06 07 08
ASCII: ........

协议分析

应用提供了原始 USB 数据的读取功能。要解析 DJI Virtual Joystick 的协议格式,需要:

  1. 收集足够的 USB 数据样本
  2. 操作摇杆/按键,观察数据变化
  3. 逆向分析协议格式
  4. UsbHidManager.kt 中添加协议解析代码

文档参考:USB_HID_Direct_Read_Analysis.md

故障排除

设备未找到

  • 确认 DJI Virtual Joystick 已正确连接
  • 检查设备 VID/PID 是否为 0x2CA3:0x1501
  • 查看 Logcat 日志确认 USB 设备枚举

权限被拒绝

  • 确认应用有 USB Host 权限
  • 在设置中手动授予应用 USB 设备访问权限
  • 检查 USB 设备过滤器配置是否正确

无法读取数据

  • 确认设备已成功连接
  • 检查端点配置是否正确
  • 查看 Logcat 中的错误日志

编译要求

  • Android Studio Hedgehog | 2023.1.1 或更高版本
  • Android Gradle Plugin 9.0.0
  • Kotlin 2.0.21
  • minimum SDK: 24 (Android 7.0)
  • target SDK: 36

下一步

  1. 协议逆向分析: 收集数据并分析 DJI 协议格式
  2. 按键映射: 将 USB 数据映射到具体的按键/摇杆
  3. 事件处理: 实现按键和摇杆事件的回调
  4. 数据可视化: 添加摇杆数据可视化界面

参考资料

许可证

本项目仅供学习和研究使用。