写在前面

本文翻译自 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来寻址。

USB AUDIO Device CLASS Requests的更多相关文章

  1. 一个最简的 USB Audio 示例

    经过了两三个月的痛苦,USB 协议栈的 Audio Device Class 框架已具雏形了,用了两三天时间,使用这个框架实战了一个基于新唐 M0 的最简单的 USB Audio 程序,可以作为 US ...

  2. USB Audio设计与实现

    1 前言 本文将基于STM32F4 Discovery板,从零开始设计并实现一个USB Audio的例子. 2 设计构思 所谓的USB AUDIO就是制作一个盒子,这个盒子可以通过USB连接到PC,P ...

  3. 如何在Android平台上使用USB Audio设备

    http://blog.csdn.net/kevinx_xu/article/details/12951131 需求:USB Headset插上去后,声音要从本地CODEC切换到USB Headset ...

  4. qq2440启动linux后插入u盘出现usb 1-1: device descriptor read/64, error -110,usb 1-1: device not accepting address 8, error -110

    上位机:ubuntu14.04 64bit 下位机:qq2440 交叉编译器:arm-linux-gcc 3.4.1 下位机使用的linux内核版本:kernel2.6.13 1.插入u盘时错误信息如 ...

  5. USB Compound Device,USB复合设备 ; USB Composite Device,USB组合设备【转】

    本文转载自:https://blog.csdn.net/autumn20080101/article/details/52776863 科普下USB复合设备和USB组合设备的区别. 关键字 Commu ...

  6. (USB HID) VC++ 使用 SetupAPI 操作 USB HID Device

    在VC裡頭使用 Api必須include 跟加入 lib,加入之後就可以在VC裡頭任意使用api了 暫時先貼上程式碼...等待有空時候在更新說明 extern "C" { #inc ...

  7. Android USB Headset: Device Specification

    For USB headsets to work seamlessly across the Android ecosystem, Android devices must support them ...

  8. Linux usb 4. Device 详解

    文章目录 1. 简介 2. Platform Layer 2.1 Platform Device 2.2 Platform Driver 3. UDC/Gadget Layer 3.1 Gadget ...

  9. tenda u1 usb wireless device install driver for kali linux kernal Debian 4.3.3-7kali2 (2016-01-27) x86_64 GNU/Linux

    因为内核比较新的关系,tenda官方网站上面提供给u1无线网卡的驱动并不能正常编译使用,编译的时候报一个类似错误 /usr/src/linux-headers--kali1-common/Makefi ...

随机推荐

  1. 软件架构设计学习总结(3):QQ空间技术架构之详解

    QQ空间作为腾讯海量互联网服务产品,经过近七年的发展,实现了从十万级到亿级同时在线的飞跃.在这个过程中,QQ空间团队遇到了哪些技术挑战?其站点前后台架构随着业务规模的变化又进行了怎样的演进与变迁?成长 ...

  2. 装饰器(Decorator)模式

    1  装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能.通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式.显然,直接修改对应 ...

  3. HTTPS加密传输数据,加强P2P平台网络安全和信任

    12月28日,银监会会同工信部.公安部.网信办等部门研究起草了<网络借贷信息中介机构业务活动管理暂行办法(征求意见稿)>(以下简称<办 法>),并向社会公开征求意见.该< ...

  4. python学习之内存机制

    不可变对象(字符串.元组) 1. a = 1 首先在内存中创建对象1,并记录对象的引用计数为1次. id(a) 查看变量a引用的对象的内存地址 2. b = 1 内存中已存在对象1,变量b引用对象1, ...

  5. 为MVC应用程序创建导航条

    今晚写点什么呢?对于以前的练习,看来看去,好象还差一个菜单导航条.在练习的站点中,有创建了三个控制器,我们就用它们来创建一个导航条吧.想实现这导航条,刚开始还是有点难,还是想起以前ASP.NET的Me ...

  6. winform窗体 控件【菜单和工具栏控件】【容器控件】

    winform的菜单栏和工具栏    1.ContextMenuStrip   -- 右键菜单     可以绑定在任何一个控件上,添加操作快捷键,并可以设置多层    每行相当于一个按钮,输入-可添加 ...

  7. Java多线程--基础概念

    Java多线程--基础概念 必须知道的几个概念 同步和异步 同步方法一旦开始,调用者必须等到方法调用返回后,才能执行后续行为:而异步方法调用,一旦开始,方法调用就立即返回,调用者不用等待就可以继续执行 ...

  8. JAVA设计模式详解(三)----------装饰者模式

    今天LZ带给大家的是装饰者模式,提起这个设计模式,LZ心里一阵激动,这是LZ学习JAVA以来接触的第一个设计模式,也许也是各位接触的第一个设计模式.记得当初老师在讲IO的时候就提到过它:“是你还有你, ...

  9. POJ2186(强连通分量分解)

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35035   Accepted: 14278 De ...

  10. POJ3616(KB12-R dp)

    Milking Time Time Limit: 1000MS    Memory Limit: 65536K Total Submissions: 9459  Accepted: 3935   De ...