UAC开发调试笔记
+ -

UAC 双向终端类型设备(Bi-directional Terminal Types)

2022-02-22 712 1

在UAC的终端描述符里除了常见的输入终端和输出终端,也存在一些看起来很高级的类型,如双向终端类型设备(Bi-directional Terminal Types)、电话终端类型(Telephony Terminal Types)和额外扩展的终端类型(External Terminal Types)。
关于这几个比较高级的终端类型,具体的应用,我也没有仔细的研究过,不过最近说为了过一个认证,需要将MIC的设备类型该为这些高级终端类型中的一个,所以本人也试了一下,看一下效果。

这里本人将虚拟的UAC设备的输入终端类型从Microphone 0x0201改为了 Headset 0x0402。这里在设备管理器中的效果对比如下:

原始的数据配置如下:

    USB_AC_IT_DESCRIPTOR* pACITDesc = (USB_AC_IT_DESCRIPTOR*)((char*)pACHeaderDesc + pACHeaderDesc->bLength);
    pACITDesc->bLength = 0x0C;
    pACITDesc->bDescriptorType = 0x24;
    pACITDesc->bDescriptorSubtype = 0x02;
    pACITDesc->bTerminalID = 0x01;
    pACITDesc->wTerminalType = 0x0201;
    pACITDesc->bAssocTerminal = 0x00;
    pACITDesc->bNrChannels = 0x02; // XXX: 0x01
    pACITDesc->wChannelConfig = 0x03; // XXX: 0x0000
    pACITDesc->iChannelNames = 0x00;
    pACITDesc->iTerminal = 0x00;
    // Output Terminal Descriptor
    USB_AC_OT_DESCRIPTOR* pACOTDesc = (USB_AC_OT_DESCRIPTOR*)((char*)pACITDesc + pACITDesc->bLength);
    pACOTDesc->bLength = 0x09;
    pACOTDesc->bDescriptorType = 0x24;
    pACOTDesc->bDescriptorSubtype = 0x03;
    pACOTDesc->bTerminalID = 0x03;
    pACOTDesc->wTerminalType = 0x0101;
    pACOTDesc->bAssocTerminal = 0x00;
    pACOTDesc->bSourceID = 0x01;
    pACOTDesc->iTerminal = 0x00;

Microphone 0x0201

改为0X0402后:

  USB_AC_IT_DESCRIPTOR* pACITDesc = (USB_AC_IT_DESCRIPTOR*)((char*)pACHeaderDesc + pACHeaderDesc->bLength);
    pACITDesc->bLength = 0x0C;
    pACITDesc->bDescriptorType = 0x24;
    pACITDesc->bDescriptorSubtype = 0x02;
    pACITDesc->bTerminalID = 0x01;
    pACITDesc->wTerminalType = 0x0402;
    pACITDesc->bAssocTerminal = 0x00;
    pACITDesc->bNrChannels = 0x02; // XXX: 0x01
    pACITDesc->wChannelConfig = 0x03; // XXX: 0x0000
    pACITDesc->iChannelNames = 0x00;
    pACITDesc->iTerminal = 0x00;
    // Output Terminal Descriptor
    USB_AC_OT_DESCRIPTOR* pACOTDesc = (USB_AC_OT_DESCRIPTOR*)((char*)pACITDesc + pACITDesc->bLength);
    pACOTDesc->bLength = 0x09;
    pACOTDesc->bDescriptorType = 0x24;
    pACOTDesc->bDescriptorSubtype = 0x03;
    pACOTDesc->bTerminalID = 0x03;
    pACOTDesc->wTerminalType = 0x0101;
    pACOTDesc->bAssocTerminal = 0x00;
    pACOTDesc->bSourceID = 0x01;
    pACOTDesc->iTerminal = 0x00;

Headset 0x0402

从效果上来看,就好像图标变了,别的具体还有什么变化,没在仔细的研究,不过测试了一下,也可以用。
双向终端类型设备

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

UAC 双向终端类型设备(Bi-directional Terminal Types
在UAC的终端描述符里除了常见的输入终端和输出终端,也存在一些看起来很高级的类型,如双向终端类型设备(Bi-directional Terminal Types)、电话终端类型(Telephony Terminal Types)和额外扩展的终端类型(External Terminal Types)。......
UAC 终端类型
USB Terminal TypesThese Terminal Types describe Terminals that handle signals carried over the USB, usually throughisochronous pipes. These Terminal T......
UAC双向终端类型Bidirectional Terminal Types
UAC无论是输入终端还是输出终端,都会有一个wTerminalType字段表示其类型。对于麦克风设备,一般是输入终端->其它->输出终端(0x0101 usb-stream)->USB总线对于扬声器设备,一般是USB总线->输出终端(0x0101 usb-stream)-&g......
UAC bAssocTerminal字段
在USB Audio Class(UAC)规范中,bAssocTerminal(Associated Terminal)字段用于描述音频终端(Audio Terminal)之间的关联关系。具体来说,它在描述音频设备拓扑时很有用,主要用于标识音频输入终端与输出终端之间的关系。bAssocTermin......
UAC音频设备麦克风和扬声器同一配置描述符复合
之前虚拟的USB音频设备麦克风和扬声器都是一个独立的设备。但是我们经常见到的UAC音频设备其实可以通过一个配置描述符来复合的。如本人手中的华为耳机。其在设备管理器中的示例如下:这个USB设备,包括了麦克风和扬声器。以上的两种复合有什么区别呢?本人感觉其实是没有区别的。不过从习惯上来讲,后一种好像用......
UAC音频设备拓扑单元bSourceID错误导致设备启动失败(代码10)
正常情况下,一个UAC类型的设备如麦克风或者扬声器,一般都会有三个或者两个拓扑节终端。如对于麦克风,其拓扑结是:输入终端->音频控制特征单元->输出终端 ,然后再通过音频流接口描述符中通过bTerminalLink指 定输出终端,最终连到的是USB主机端。而对于扬声器:拓扑结构是:输......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!