写在前面
本文翻译自 USB Device Class Definition for Audio Devices 1998年版。主要是鄙人个人使用,所以只挑对我有用的翻译。有些我认为不是很重要的可能就翻译个提纲。鄙人英文能力只有幼儿园水平,建议参考原文阅读。
约定专业名词:
- Audio Device Class 简称为UAC(USB Audio Class)
- Control 控制器
- Entity 实例
- interface 接口
- endpoint 端点
- pipe 管道
5 请求
5.1 标准请求
UAC 支持《USB Specification》文档中第九章描写的标准请求。UAC除了标准请求没有特殊请求。
5.2 特定类请求
大多数特定类请求用于读取或者设置音频控制类数值。这些控制器分为两大类:一些用于控制音频设备的功能参数,例如音量,音频,选择器位置(selector position)等等;一些是影响在同步端点里传输数据,例如采样率。
- 音频控制请求(AC)
- 音频流请求
UAC支持额外的特定类请求
- 存储请求
- 获取状态请求
5.2.1 请求层
接下来的图标描述了获取和设置请求操作时的数据结构,接下来的图表详细说明了在不同请求类型下设置/获取请求操作。
5.2.1.1 设置请求操作
本请求操作用于配置控制音频功能的参数属性。另外,存储空间属性值通过此请求进行
bmRequest Type |
bRequest |
wValue |
wIndex |
wLength |
Data |
00100001B |
SET_CUR |
See following |
Entity ID |
Length of |
Parameter |
|
SET_MIN |
paragraphs |
and |
parameter |
block |
|
SET_MAX |
|
Interface |
block |
|
|
SET_RES |
|
|
|
|
|
| ||||
00100010B |
SET_MEM |
|
Endpoint |
|
bmRequestType 字段:
1)表示这是一个设置请求(D7:0)
2)它是个特定类请求(D6-D5:01),指向:
一个音频控制接口(AudioControl interface)
或者一个音频功能( the audio function)的音频流接口(AudioStreaming interface)(D4-D0:00001)
或者一个音频流接口(AudioStreaming interface)的同步端点( isochronous endpoint )(D4-D0:00010)
bRequest字段包含一个常量,确定 地址指向的控制器或者实例( addressed Control or Entity )哪个属性参数可以修改。控制器包含如下这些属性参数:
- 当前设置属性 (SET_CUR)
- 最小设置属性 (SET_MIN)
- 最大设置属性 (SET_MAX)
实例包含如下属性参数
- 存储空间属性(SET_MEN)
如果地址指向的控制器或者实例不支持修改一个确定的属性参数(certain attribute)时,在这些属性参数尝试被修改时,控制器的管道必定指定一个中断(indicate a stall)。大多数情况下,只有CUR和MEN这两种属性参数支持设置请求。而且,这个规则不会影响其他设计者设计其他的属性参数可编程性(designer from making other attributes programmable)。这些请求常量列表,详细参考 表格A9 “Audio Class-Specific Request Codes.” 摘录如下
Table A-9: Audio Class-Specific Request Codes
Class-Specific Request Code |
Value |
REQUEST_CODE_UNDEFINED |
0x00 |
SET_ CUR |
0x01 |
GET_ CUR |
0x81 |
SET_ MIN |
0x02 |
GET_ MIN |
0x82 |
SET_ MAX |
0x03 |
GET_ MAX |
0x83 |
SET_ RES |
0x04 |
GET_ RES |
0x84 |
SET_MEM |
0x05 |
GET_ MEM |
0x85 |
GET_STAT |
0xFF |
wValue字段的值依赖于wIndex字段。依赖于什么样的地址指向的实例,wValue字段随之改变。下面的图表,讲单独的描述每个实例的wValue字段。多数情况,在高位字节位包含控制器选择器( Control Selector )。它常地址指向一个控制器,这个特定的控制器包含在一个可以包含多个控制器的实例们中。如果某个实例只包含一个控制器, 就不需要一个明确的控制器选择器,wValue字段能够传送一些额外的参数。
wIndex字段,指定低字节里指定接口或者端点的寻址,在高字节里指定实例ID或者0。在一个接口被寻址的情况下,虚拟实例“接口”通过高位指定0来寻址。