UAC2.0 描述符(二)

简单的UAC2.0设备的Audio Function Topology如下:

110134_8vCW_2007478.png

  • Input Terminal Descriptor

          下面描述了一个立体声的USB输入数据流的输入终端

  AUDIO_20_IT_DESC_SIZE,                /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
  AUDIO_CONTROL_INPUT_TERMINAL,         /* bDescriptorSubtype */
  AUDIO_IT_ID,                          /* bTerminalID */
  0x01,                                 /* wTerminalType AUDIO_TERMINAL_USB_STREAMING   0x0101 */
  0x01,
  0x00,                                 /* bAssocTerminal */
  AUDIO_CLK_ID,                         /* bCSourceID*/
  0x02,                                 /* bNrChannels */
  0x03,                                 /* wChannelConfig 0x00000003  Stereo */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iChannelNames */
  0x00,                                 /* bmControls */
  0x00,
  0x00,                                 /* iTerminal */
  • Feature Unit Descriptor

主通道支持音量和mute控制

  0x12,                                 /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
  AUDIO_CONTROL_FEATURE_UNIT,           /* bDescriptorSubtype */
  AUDIO_FU_ID,                          /* bUnitID */
  AUDIO_IT_ID,                          /* bSourceID */
  AUDIO_20_CTL_MUTE(CONTROL_BITMAP_PROG)/* bmaControls(0) */
  | AUDIO_20_CTL_VOLUME(CONTROL_BITMAP_PROG),
  0x00,
  0x00,
  0x00,
  0x00,                                 /* bmaControls(1) */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* bmaControls(2) */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iFeature */
  • Output Terminal Descriptor

    这里有个细节,如果OT的wTerminalType为0x0101(即USB Streaming),在Mac OSX 10.12.5上是无法进行音量控制的

  AUDIO_20_OT_DESC_SIZE,      			/* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
  AUDIO_CONTROL_OUTPUT_TERMINAL,        /* bDescriptorSubtype */
  AUDIO_OT_ID,                          /* bTerminalID */
  0x02,                                 /* wTerminalType  0x0301: Speaker, 0x0302: Headphone*/
  0x03,
  0x00,                                 /* bAssocTerminal */
  AUDIO_FU_ID,                          /* bSourceID */
  AUDIO_CLK_ID,                         /* bCSourceID */
  0x00,                                 /* bmControls */
  0x00,
  0x00,                                 /* iTerminal */
  • Clock Source Descriptor

    时钟域的概念是UAC2.0里新提出的,通过时钟域的改变进行采样率的更新。

  AUDIO_20_CLK_SOURCE_DESC_SIZE,        /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
  AUDIO_CONTROL_CLOCK_SOURCE,           /* bDescriptorSubtype */
  AUDIO_CLK_ID,                         /* bClockID */
  0x01,                                 /* bmAttributes */
  0x07,                                 /* bmControls TODO */
  0x00,                                 /* bAssocTerminal */
  0x00,                                 /* iClockSource */

细节可参考我基于STM32F4Discovery实现了一个简单的UAC2.0设备(https://git.oschina.net/crouchggj/STM32F4_USB_SoundCard.git)。

转载于:https://my.oschina.net/u/2007478/blog/1204300

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值