写在前面编程
本文翻译自 USB Device Class Definition for Audio Devices 1998年版。主要是鄙人我的使用,因此只挑对我有用的翻译。有些我认为不是很重要的可能就翻译个提纲。鄙人英文能力只有幼儿园水平,建议参考原文阅读。数据结构
约定专业名词:ide
5 请求spa
5.1 标准请求翻译
UAC 支持《USB Specification》文档中第九章描写的标准请求。UAC除了标准请求没有特殊请求。设计
5.2 特定类请求rest
大多数特定类请求用于读取或者设置音频控制类数值。这些控制器分为两大类:一些用于控制音频设备的功能参数,例如音量,音频,选择器位置(selector position)等等;一些是影响在同步端点里传输数据,例如采样率。orm
UAC支持额外的特定类请求blog
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 )哪一个属性参数能够修改。控制器包含以下这些属性参数:
实例包含以下属性参数
若是地址指向的控制器或者实例不支持修改一个肯定的属性参数(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来寻址。