如何解决USB 音频小工具驱动程序:如何在主机设备上重命名/定义显示的 UAC1 设备名称
我使用 USB 音频类 1 (UAC1) 创建了一个 USB 音频小工具,以通过 USB 从 Linux 设备 (Raspberry Pi) 向/从 Windows 主机发送/接收音频。该小工具已经在工作,Windows 将 Raspberry Pi 检测为音频输入和输出。
我遇到的问题是,音频输出设备称为“AC 接口”,输入音频设备称为“Windows 中的捕获输入终端(AC 接口)”。但是,我想定义一个自己的名称,该名称将显示在主机上。有人可以帮我怎么做吗?
我尝试使用 uac1_legacy
(https://www.kernel.org/doc/Documentation/ABI/testing/configfs-usb-gadget-uac1_legacy) 更改名称,但无法将其添加到脚本中。
或者我是否必须使用小工具方案配置 USB 音频小工具?
# Load libcomposite
modprobe libcomposite
# Create USB Gadget
mkdir -p /sys/kernel/config/usb_gadget/g1
# Device Descriptors
echo 0x1d6b > /sys/kernel/config/usb_gadget/g1/idVendor # Linux Foundation
echo 0x0104 > /sys/kernel/config/usb_gadget/g1/idProduct # Multifunction Composite Gadget
echo 0x0100 > /sys/kernel/config/usb_gadget/g1/bcdDevice # v1.0.0
echo 0x0200 > /sys/kernel/config/usb_gadget/g1/bcdUSB # USB 2.0
echo 0xef > /sys/kernel/config/usb_gadget/g1/bDeviceClass # USB 2.0
echo 0x02 > /sys/kernel/config/usb_gadget/g1/bDeviceSubClass # USB 2.0
echo 0x01 > /sys/kernel/config/usb_gadget/g1/bDeviceProtocol # USB 2.0
mkdir -p /sys/kernel/config/usb_gadget/g1/strings/0x409
echo "000001" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
echo "xy" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
echo "xy" > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
# Configure UAC1 (audio)
mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0
echo 0x1 > /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_chmask
echo 48000 > /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_srate
echo 0xf > /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_chmask
echo 48000 > /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_srate
mkdir -p /sys/kernel/config/usb_gadget/g1/configs/c.1
echo 250 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
ln -s /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0 /sys/kernel/config/usb_gadget/g1/configs/c.1/
udevadm settle -t 5 || :
# End
ls /sys/class/udc/ > /sys/kernel/config/usb_gadget/sonoDSP_audio/UDC
解决方法
您可以检查f_uac1.c
。对我来说,您似乎无法动态更改预定义函数 f_uac 的 gstring。
static struct usb_string strings_uac1[] = {
[STR_AC_IF].s = "AC Interface",...,[STR_IO_IN_IT].s = "Capture Input terminal",{ }
};
您可以做的是,使用您的自定义配置创建一个简单的 functionfs 用户空间程序。有关 ffs 的更多详细信息,请参阅以下内容。
如何加载ffs? 请参阅:https://github.com/linkjumper/configfs/blob/master/setup_usb_gadget.sh
关于如何编写用户空间函数的文档:
请参阅:linux/tools/usb/ffs-test.c
。 (剧透,那些测试文件对我来说并不适用于所有端点。但作为示例,它是一个很好的来源。)
这是一个小工作,但值得。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。