【发布时间】:2019-12-29 03:59:39
【问题描述】:
我正在尝试在 Arduino 上制作一些代码原型,以模拟 USB 复合设备 - 其中包括音频和 HID 功能。我想要实现的是能够通过按下 Arduino 上的物理按钮来控制音量 - 这将生成 HID 音量增大/减小事件来托管。我希望即使未将 Arduino 选为默认设备,更改音量也会设置音频。
在 Windows 上,即使 Arduino 不是默认音频设备,我也可以控制音量 - 这意味着我可以连接两个或多个 Arduino 设备并独立设置有效音量。在 Linux(使用 ALSA/PulseAudio)上,HID Volume Up/Down 似乎仅适用于默认设备 - 这意味着我不能使用两个 Arduino 设备并独立控制它们的音量。
我还可以观察到,如果默认音频设备与 Arduino 不同,则主机没有带有 SET_CUR 的 USB 消息。
我可以在 ALSA/PulseAudio 中配置什么来达到预期的效果吗?或者也许应该重新设计 HID 方法?
以下是我正在使用的 HID 消息的定义:
static const uint8_t JoystickHIDDescriptor[] =
{
0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
0x09, 0x01, // USAGE (Consumer Control)
0xa1, 0x01, // COLLECTION (Application)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x09, 0xe9, // USAGE (Volume Up)
0x09, 0xea, // USAGE (Volume Down)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x06, // INPUT (Data,Var,Rel)
0x09, 0xe2, // USAGE (Mute)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x06, // INPUT (Data,Var,Rel)
0x95, 0x05, // REPORT_COUNT (5)
0x81, 0x07, // INPUT (Data,Var,Rel)
0xc0 // END_COLLECTION
};
【问题讨论】: