首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在只有一个输入端点的Android中向USB HID设备写入数据

在只有一个输入端点的Android中向USB HID设备写入数据的方法如下:

  1. 首先,确保你的Android设备支持USB Host模式,并且已经连接了一个USB HID设备。
  2. 在Android应用中,你需要获取USB设备的权限。你可以使用USB设备管理器类(UsbManager)来获取设备权限。具体步骤如下:
    • 获取UsbManager实例:UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
    • 获取已连接的USB设备列表:HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
    • 遍历设备列表,找到你要连接的USB设备:UsbDevice device = deviceList.get(deviceName);
    • 请求USB设备的权限:usbManager.requestPermission(device, permissionIntent);
  • 在获取到USB设备权限后,你可以通过USB设备的接口和端点来进行数据传输。USB HID设备通常使用控制传输(Control Transfer)和中断传输(Interrupt Transfer)来进行数据交互。
    • 控制传输:用于发送控制命令和获取设备状态等操作。你可以使用UsbDeviceConnection类的controlTransfer()方法来发送控制命令。
    • 中断传输:用于实时数据传输,例如鼠标、键盘等输入设备。你可以使用UsbDeviceConnection类的bulkTransfer()方法来进行中断传输。
  • 在进行数据传输之前,你需要获取USB设备的接口和端点信息。具体步骤如下:
    • 获取USB设备的接口:UsbInterface usbInterface = device.getInterface(interfaceIndex);
    • 获取接口的输入端点和输出端点:UsbEndpoint inEndpoint = usbInterface.getEndpoint(inEndpointIndex); UsbEndpoint outEndpoint = usbInterface.getEndpoint(outEndpointIndex);
  • 使用UsbDeviceConnection类来进行数据传输。具体步骤如下:
    • 打开USB设备连接:UsbDeviceConnection connection = usbManager.openDevice(device);
    • 分别创建输入和输出的UsbRequest对象:UsbRequest inRequest = new UsbRequest(); UsbRequest outRequest = new UsbRequest();
    • 初始化输入和输出的UsbRequest对象:inRequest.initialize(connection, inEndpoint); outRequest.initialize(connection, outEndpoint);
    • 向USB HID设备写入数据:byte[] data = "Hello, USB HID device!".getBytes(); outRequest.queue(ByteBuffer.wrap(data));
    • 发送数据:connection.requestWait();
  • 最后,记得在适当的时候关闭USB设备连接和释放资源:
    • 关闭USB设备连接:connection.close();
    • 释放USB设备权限:usbManager.releasePermission(device);

这是在只有一个输入端点的Android中向USB HID设备写入数据的基本步骤。具体的实现可能会因设备型号、Android版本等因素而有所差异。在实际开发中,你可能需要根据具体情况进行适当的调整和错误处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

USB初学(一)---USB-HID初步认识【转】

Descriptor即描述符,是一个完整数据结构,可以通过C语言等编程实现,并存储在USB设备,用于描述一个USB设备所有属性,USB主机是通过一系列命令来要求设备发送这些信息。...USB有5种标准描述符: 设备描述符 配置描述符 字符描述符 接口描述符 端点描述符 描述符之间有一定关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符...为厂商自定义类型,0x00不是在设备描述符定义HID BYTE bDeviceSubClass; //usb分配子类代码,同上,值由USB规定和分配HID设备此值为0 BYTE...当插入USB设备后,主机会设备请求各种描述符来识别设备。 为了把一个设备识别为HID类别,设备在定义描述符时候必须遵守HID规范。 ?...表1、USB HID规范定义HID设备可用端点 管道 要求 说明 控制(端点0) 必须 传输USB描述符、类请求代码以及供查询消息数据等 中断输入 必须 传输从设备到主机输入数据 中断输出 可选

11.2K50

带你遨游USB世界

用于数据量大、同时对实时性要求较高场合,音视频。 不保证数据完整性,没有ACK/NAK应答包,不进行数据重传。 2.1.6、USB设备结构及描述符 ?...一个USB设备通常有一个或多个配置,但在同一时刻只能有一个配置; 一个配置通常有一个或多个接口; 一个接口通常有一个或多个端点; 驱动是绑定到USB接口上,而不是整个USB设备。...3)init.qcom.usb.rc usb属性配置文件 ? 4)android.c 接收属性节点值;framework发送usb状态改变uevent ?...一个URB用来向一个特定USB设备特定USB端点发送数据或接收数据设备每个端点都处理一个URB队列。 URB处理流程: ?...USB鼠标遵循USB HID(Human Interface Device)规范。 在probe探测设备是否符合HID规范,并且创建和初始化URB: ? ?

2.6K21

Linux驱动开发: USB驱动开发

USB设备发送读取描述符请求后,USB设备将所有的描述符以连续数据流方式传输给USB主机。主机从第一个读到字符开始,根据双方规定好数据格式,顺序地解析读到数据流。...每个USB设备只有一个设备描述符,而一个设备可包含一个或多个配置描述符,即USB设备可以有多种配置。...,除配置使用端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。...这些端点用在可以处理数据丢失设备,并且更多依赖于保持持续数据流。音频和视频设备等等。 控制和批量端点用于异步数据传送,而中断和同步端点是周期性。...因此,对于某些特定 HID 设备,可以定义多个接口,只有其中一个接口为 HID 设备类即可。

69.6K20

USB 协议核心概念与实践

USB 101 首先要明确一点,USB 协议是以主机为中心 (Host Centric),也就是说只有主机端设备端请求数据后,设备端才能主机发送数据。...) 内核驱动通过 HCI 接口 USB 设备发送请求+数据 数据发送到设备 Controller -> HCI -> Host 设备给主机发送请求也是类似,只不过由于是主机中心,发送数据会保存在缓存...,接口、端点和字符串描述符,因此需要 wTotalLength 来表示返回数据总长度。...('test') 总的来说分为几步, 根据设备描述符查找到指定设备 获取该设备配置描述符,选择并激活其中一个 在指定配置查找接口和端点描述符 使用端点描述符进行数据传输 如果不清楚 USB 工作原理...ep0 文件,名字所言正是 USB 设备端点,用于收发 Controller Transfer 数据以及各类事件。

1.5K50

原创 Paper | USB设备开发:从入门到实践指南(一)

字段,得知配置描述符实际长度,接着主机会USB设备请求完整配置描述符,如图12,图13所示: 图12:主机发起获取配置描述符请求 图13:USB设备响应完整配置描述符数据包 从USBPcap捕获到流量可以发现...,在配置描述符响应包里,除了配置描述符信息,还包含了接口描述符,端点描述符,并且因为USB键盘注册一个USB HID设备,所以在配置描述符还包含着HID描述符,如图14所示: 图14:Wireshark...: bNumEndpoints定义了设备端点数量,在USB协议端点通信是单向,在这里定义了两个端点描述符,一个表示输入一个表示是输出。...端点描述符就只有一个IN端点。...为什么需要发送一个全为0数据包,经过研究发现:USB设备发给USB主机数据包是键盘在告知USB主机键盘当前状态,一个完整按键操作是按下按键,然后释放按键。

80400

13.USB驱动

一、情景分析 现象:把USB设备接到PC 右下角弹出"发现android phone" 跳出一个对话框,提示你安装驱动程序 问1....PC机上接有非常多USB设备,怎么分辨它们? USB接口只有4条线: 5V,GND,D-,D+ 答3....实时传输:不可靠,实时,比如:USB摄像头 3.USB传输对象:端点(endpoint) 我们说"读U盘"、“写U盘”,可以细化为:把数据写到U盘端点1,从U盘端点2里读出数据 除了端点0外,...每一个端点只支持一个方向数据传输 端点0用于控制传输,既能输出也能输入 4.每一个端点都有传输类型,传输方向 5 术语里、程序里说输入(IN)、输出(OUT) “都是” 基于USB主机立场说。...比如鼠标的数据是从鼠标传到PC机, 对应端点称为"输入端点" 6.USB总线驱动程序作用 a. 识别USB设备 b. 查找并安装对应设备驱动程序 c.

2K20

硬件笔记(6)----USB学习笔记3

8、USB端点 根据 USB 规范,设备端点USB 设备一个独特可寻址部分,它作为主机和设备间通信流信息源或库。USB 枚举和配置一节介绍了设备默认地址做出响应步骤。...每一个 USB 设备都需要支持端点 0。因此,该端点不需要使用独立描述符。 除了端点 0 外,特定设备所支持端点数量将由各自设计要求决定。简单设计(鼠标)可能仅要一个 IN 端点。...低速设备仅能使用两个端点USB设备可对端点数量设定更严格限制。例如,低速人机界面设备HID)设计端点可能不超过两个 — 通常有一个 IN 端点一个 OUT 端点。...数据端点本身具有双向特性。只有对它们进行配置后才支持单向传输(具有单向特性)。例如,端点 1 可作为 IN 或 OUT 端点使用。设备描述符将正式使其成为一个 IN 端点。...各端点使用循环冗余校验(CRC)来检测传输中发生错误。CRC 是一个用于检测错误计算值。USB 规范对实际计算公式进行了解释,这些计算由 USB 硬件进行,这样可确保能够发出正确响应。

1.3K30

USB协议详解

批量输入事务: (1)主机首先发送一个IN令牌包(包含设备地址,端点号)。 (2)主机切换到接收数据状态等待设备返回数据。如果设备检测到错误,不做任何响应,主机等待超时。...允许有限延迟通信 人机接口设备HID鼠标、键盘、轨迹球等。 中断传输是一种保证查询频率传输。...持续性传输,用于传输与时效相关信息,并且在数据中保存时间戳信息 ,音频视频设备。 等时(同步)传输用在数据量大、对实时性要求高场合,音频设备,视频设备等,这些设备数据延迟很敏感。...输出(OUT)令牌包:用来通知设备将要输出一个数据输入(IN)令牌包:用来通知设备返回一个数据包 建立(SETUP)令牌包:只用在控制传输,和输出令牌包作用一样,也是通知设备将要输出一个数据包...设备枚举及描述符介绍 当一个USB设备插入主机后,会有以下活动: 在USB设备逻辑组织,包含设备、配置、接口和端点4个层次。

2K10

硬件笔记(8)----USB学习笔记5

10 USB 描述符 如前面所述,当某个设备被连接到 USB 主机上,该设备主机提供其功能和电源要求。通常,设备会通过一个描述符表格(其固件一部分)来提供这些信息。...如果某个设计满足指定 USB 设备类别的要求,则该 USB 设备必须具备其他描述符信息都将包含在设备描述符结构。附录 A 包含一个 PSoC USB 全功能设备描述符示例。...该接口端点数量将显示在该描述符。接口描述符也包含有关设备 USB 类别的信息。一个 USB 设备可以属于多个预定义类别,表 12 显示了多种这些类别。...对于支持 USB 2.0 PSoC 系列产品只有 PSoC 4200L 设备能够支持 LPM 特性,因此,它也支持 BOS 描述符。LPM 是从 USB 挂起模式得到优越化特性。...10.8 使用多个 USB 描述符 各个 USB 设备只有一个设备描述符。但是,一个设备可以有多种配置、接口、端点和字符串描述符。

1.6K20

DIY一个专属HID注入设备

电脑主机是通过设备描述符识别USB设备类型,并在规定端点建立与设备通信关系,因此要做第一步是要配置好设备描述符。...在电脑识别出HID设备基础上,调整端点收发缓存区分配,再配置设备Init和Reset函数。接着就可以用Joystick_Send函数发送按键数据,参数非零代表有键按下,全零则代表松开。...由于BadUSB要求很高攻击代码注入速度,故而可通过状态机用DMA加速传输。为了解决字符输入过快导致错误和遗漏问题,需要要配置描述符bInterval调到一个很低值以缩短主机响应时间。...最后一个问题是主机输入法默认大小写及中英文环境不符合程序要求导致注入失败,这个可以通过模拟U盘配置文件进行手动切换,下一章将详尽叙述。...三、模拟U盘 一个可以同时模拟出多个逻辑设备USB设备称为复合设备,复合设备具有高集成、低成本、多功能优点。

1.4K00

20.Linux-USB鼠标驱动

(dev,endpoint); 创建一个接收(rcv)中断(int)类型端点管道(pipe),用来端点数据缓冲区之间连接,鼠标为接收中断型 dev: usb_device设备结构体 endpoint...,分配成功返回一个char型缓冲区虚拟地址 *dev: usb_device设备结构体 size:分配缓冲区大小,这里填端点描述符成员endpoint->wMaxPacketSize         ...struct usb_device *dev; //指向usb设备 struct usb_host_endpoint *ep; //指向端点数据结构 unsigned...urb:指向要初始化urb dev:指向要传输usb设备 pipe:要传输端点管道, 本节pipe通过usb_rcvintpipe()宏获取 transfer_buffer:指向要传输数据虚拟地址缓冲区...设置input_dev支持L、S、回车、3个按键事件 3)注册input_dev结构体 4)设置USB数据传输:  ->4.1)通过usb_rcvintpipe()创建一个接收中断类型端点管道,用来端点数据缓冲区之间连接

8.2K81

Linux USB 开发指南

Gadget 配置流程 2.7 端点配置 2.7.1 端点 fifo 大小 2.7.2 端点属性 2.7.3 定义端点方向 2.8 调试方法 2.8.1 调试节点 2.8.1.1 USB0...Interface,增强型主机控制器接口 OHCI Open Host Controller Interface,开放式主机控制器接口 2.3 模块配置介绍 2.3.1 Device Tree 配置说明 设备存在是该类芯片所有平台模块配置...,设备树文件路径为:kernel/linux-4.9/arch/arm64(32 位平台为 arm)/boot/dts/sunxi/xxx.dtsi(xxx 为具体芯片型号, sun50iw10p1...图 2-5: USB Gadget Support 选项配置 打开下图选项,并在对应配置打开所需功能性配置, : 需要存储功能时, 需打开下图中 “mass storage” 配置, 如下图所示...2.7 端点配置 在 Gadget 配置使用过程,可能出现端点默认配置方式无法满足需求情况,故需对端点进行修改满足需求。可参考现有的端点进行修改。

30.8K31

USB协议基本知识

USB 基本知识 USB重要关键概念: 1、 端点:位于USB设备或主机上一个数据缓冲区,用来存放和发送USB各种数据,每一个端点都有惟一的确定地址,有不同传输特性(输入端点、输出端点...答案三:USB采用不归零取反来传输数据,当传输线上差分数据输入0时就取反,输入1时就保持原值,为了确保信号发送准确性,当在USB总线上发送一个包时,传输设备就要进行位插入***作(即在数据每连续...,用来存放和发送USB各种数据,每一个端点都有惟一的确定地址,有不同传输特性(输入端点、输出端点、配置端点、批量传输端点)。...USB采用不归零取反来传输数据,当传输线上差分数据输入0时就取反,输入1时就保持原值,为了确保信号发送准确性,当在USB总线上发送一个包时,传输设备就要进行位插入操作(即在数据每连续6个1后就插入一个...,HID BYTE bDeviceSubClass; //usb分配子类代码,同上,值由USB规定和分配 BYTE bDeviceProtocl; //USB分配设备协议代码

2.4K20

基于STM32CUBEUSB鼠标键盘二合一

这篇文章,我们试着同时在一个USB设备上,实现USB鼠标与键盘二合一。花一份钱,实现两样东西,它不香吗? 这里要说一下,实现鼠标键盘二合一功能,方法有多种,这里只说其中一种。...第二,修改usbd_hid.c配置集合(USBD_HID_CfgFSDesc)。如下图所示,框住地方是个宏定义。配置集合长度,由之前34,变为41. ? 端点个数,由1变成2....一个数组里面,上面放键盘报告描述符,下面放鼠标的报告描述符。 这样的话,对USB主机(也就是电脑)来说,它收到数据,有可能是鼠标的数据,也有可能是键盘数据。那,怎么区分?...USB主机发送数据时候,数组一个元素是报告ID,后面才是键盘数据或鼠标数据。实现前面两节例程时候,USB键盘我们定义了一个8元素数组,USB鼠标我们定义了一个4元素数组。...现在我们只需要一个数组,它同一时间,只发送一种数据,所以大小为8,然后,还要包含报告ID,所以变成9. 在USB协议,报告ID默认是数组一个元素。

2.1K41

针对 USB 外设新型注入攻击

该恶意设备通信路径注入数据,从而伪造数据输入来源,欺骗主机系统。...数据在一次事务只在一个方向上传输,方向在令牌包标识符中指定(相对于主机)。 例如,主机将发送一个OUT令牌以指示它将在数据阶段设备传输数据,请参见下图(a)。...它功能包括处理传入令牌地址检查和后续处理,即当令牌与设备地址匹配时,SIE将数据写入OUT端点缓冲区或从IN端点缓冲区读取数据。...因此,进一步改变了端点1行为逻辑,只有对于地址不匹配传入令牌,设备才会发送数据,并允许设备对自己数据流量进行忽略,并向自己所有传入令牌发送NAK响应。...键盘命令注入 •键盘 USB 堆栈:HID键盘通常在LS模式下运行,并使用端点1作为其主要且唯一输入端点。它们是报告字符键按下和释放事件简单设备

38420

WebUSB:一个网页是如何从你手机盗窃数据(含PoC)

而WebUSB是一个Javascript API,可以允许网页访问已连接USB设备。这里USB设备是指系统和工业USB设备,所以不支持常见USB设备(比如网络摄像头,HID或大容量储存设备)。...在这种情况下,基于WebUSBADB主机实现被用于访问连接Android手机。一旦用户接受请求,该页面使用WebUSB可以从相机文件夹检索所有图片。...然而,代码库相对较小,并且新修复也在持续写入。 另一个有趣调查对象是用恶意USB设备攻击Chrome。前者可能会发送错误USB描述符,并可能在浏览器触发未预期行为。...另外,在研究WebUSB或任何其他新网络标准时,Web蓝牙或Web NFC,请记住,这些功能日新月异,甚至一个月前信息可能已经过时了。...然而进一步研究后,我们发现这是一个有趣技术,特别是在引入重大变化或附加功能时。 建议用户永远不要让不受信任网站访问包含任何敏感数据USB设备。这可能导致设备被入侵。

3.6K50

USB协议简介「建议收藏」

USB设备 低功耗总线供电设备:最大功耗不超过100mA 高功耗总线供电设备: 枚举时最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA 设备在枚举过程,通过设备配置描述符主机报告它供电配置...” 输入数据1, 编码成“电平不变” 编码出来序列,高电平:J状态;低电平:K状态 位填充是为了保证发送数据序列中有足够多电平变化 填充对象是(输入数据),即先填充再编码 数据每...输出(OUT)令牌包:用来通知设备将要输出一个数据输入(IN)令牌包:用来通知设备返回一个数据包 建立(SETUP)令牌包:只用在控制传输,和输出令牌包作用一样,也是通知设备将要输出一个数据包...USB打印机、扫描仪、大容量储存设备等 中断传输(Interrupt Transfers): 周期性,低频率 允许有限延迟通信 人机接口设备HID鼠标、键盘、轨迹球等 等时(同步)...批量输入事务,(1)主机首先发送一个IN令牌包(包含设备地址,端点号),(2)主机切换到接收数据状态等待设备返回数据。如果设备检测到错误,不做任何响应,主机等待超时。

1.8K20
领券