我有点困惑如何在USB Audio Class 2.0中添加对多比特率/采样率的支持.与USB Audio Class 1.0(可以选择添加多种速率等)相比,USB Audio Class 2.0不提供该选项.我该怎么改变我的描述符呢?我在某处读到你使用更多备用设置,但我不知道这会有什么帮助......
这是我的音频格式描述符:
audioformat.bLength = sizeof(usb_audio_format_type_1_desc_t)
audioformat.bDescriptorType = 0x01
audioformat.bDescriptorSubtype = 0x02
audioformat.bFormatType = 0x01
audioformat.bSubSlotSize = 3
audioformat.bBitResolution = 24
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正试图通过蓝牙将键盘从ubuntu发送到我的iPhone4.即,开发一个非常原始的虚拟键盘.
问题让我的应用程序与iPhone通信(即使用报告协议,这是所有iPhone支持).实际上,我的write(interruptChannelFD)调用没有返回任何错误,但iPhone端没有文字出现.已使用blueZ库打开l2cap通道.
问题1:鉴于没有虚拟键盘可以做到这一点,它有多难?
我正处于iPhone和我的linux盒连接并保持连接的阶段,没问题.此外,所有perror()调用都告诉我控制和中断通道套接字连接正常.(我所做的是hciconfig我的加密狗到键盘设备类,并使用Collin Mulliner的着名代码稍作修改 - 我必须输入一次密码,因为所有智能手机都需要).
问题2: 我应该能够在write()不担心加密的情况下进入插槽,对吧?我输入了密码,手机信任键盘.(科林正在考虑可能的隐藏攻击,但我诚实地联系)
另外,据我所知,在HID设备的启动协议中,SPD中指定的确切报告描述符几乎不相关 - 报告格式无论如何都是固定的.所以...
问题3:我是否会错过报告协议的主要内容.我所做的是修改Apple键盘报告描述符并写入套接字(见下文).
const uint8_t hid_spec[] = {
0x05, 0x01, // usage page
0x09, 0x06, // keyboard
0xa1, 0x01, // collection (Application)
0x85, 0x01, // report id (0x01)
0x05, 0x07, // usage page(keyboard)
0x19, 0xe0, // usage min
0x29, 0xe7, // usage max
0x15, 0x00, // logical min
0x25, 0x01, // logical max
0x75, 0x01, …Run Code Online (Sandbox Code Playgroud) 如果我将USB设备连接到主机,然后使用新固件升级USB设备,并更改设备的描述符.主机将使用旧描述符.
我知道我可以通过删除设备等的Windows初始化驱动程序来强制设备重新枚举自己.或者我可以在描述符中碰撞ProductId并且设备将重新枚举.
Windows兑现了有关设备等的信息,因此Windows永远不会要求设备在重新连接有关接口,配置,端点,HID描述符等时再次提供信息.
idProduct - 更改此设置将重新枚举设备,因为Windows会认为它是一个不同的设备.
iSerialNumber - 更改此项将重新枚举,因为Windows需要区分两个相同的idProducts(两个相同的产品连接)
bcdDevice - 应该执行重新枚举的技巧,但它不能像USB规范中那样工作.
我的问题是如何在不删除驱动程序等或更改idProduct或iSerialNumber的情况下强制重新枚举USB设备?
任何帮助将不胜感激...
我想知道如何获得 USB 存储设备的唯一 ID。我已经知道如何从这篇文章中获取 SCSI 序列号:Linux C++ 下的 USB 驱动器序列号 这篇文章提到使用设备描述符来获取 ID。有人可以发布一些代码来确定Linux下的设备描述符信息吗?
我正在尝试制作 HID USB 键盘。默认 HID 描述符具有 6 键 HID 报告。这是描述符,我已经对其进行了测试:
static const uint8 hid_descriptor_keyboard[] = {
/****/ 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
/****/ 0x09, 0x06, /* USAGE (Keyboard) */
/****/ 0xa1, 0x01, /* COLLECTION (Application) */
/******/ 0x05, 0x07, /* USAGE_PAGE (Keyboard) */
/******/ 0x85, 0x01, /* REPORT_ID (1) */
/* Ctrl, Shift and other modifier keys, 8 in total */
/******/ 0x19, 0xe0, /* USAGE_MINIMUM (kbd LeftControl) */
/******/ 0x29, 0xe7, /* USAGE_MAXIMUM (kbd Right GUI) */ …Run Code Online (Sandbox Code Playgroud) 使用 atmega8 芯片和 V-USB 库,我做了一个小桥接器将我的 NES 游戏手柄连接到 USB。起初我使用了一个例子作为我的隐藏描述符,所以......当我将它设置为与这个 HID 报告描述符握手时,我在 Windows 中正确识别了我的设备
PROGMEM const char usbHidReportDescriptor[100] = {
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x02, // USAGE_PAGE (Simulation Controls)
0x09, 0xbb, // USAGE (Throttle)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic …Run Code Online (Sandbox Code Playgroud)