USB AUDIO Device CLASS Requests
写在前面
本文翻译自 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 |
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的更多相关文章
- 一个最简的 USB Audio 示例
经过了两三个月的痛苦,USB 协议栈的 Audio Device Class 框架已具雏形了,用了两三天时间,使用这个框架实战了一个基于新唐 M0 的最简单的 USB Audio 程序,可以作为 US ...
- USB Audio设计与实现
1 前言 本文将基于STM32F4 Discovery板,从零开始设计并实现一个USB Audio的例子. 2 设计构思 所谓的USB AUDIO就是制作一个盒子,这个盒子可以通过USB连接到PC,P ...
- 如何在Android平台上使用USB Audio设备
http://blog.csdn.net/kevinx_xu/article/details/12951131 需求:USB Headset插上去后,声音要从本地CODEC切换到USB Headset ...
- 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盘时错误信息如 ...
- USB Compound Device,USB复合设备 ; USB Composite Device,USB组合设备【转】
本文转载自:https://blog.csdn.net/autumn20080101/article/details/52776863 科普下USB复合设备和USB组合设备的区别. 关键字 Commu ...
- (USB HID) VC++ 使用 SetupAPI 操作 USB HID Device
在VC裡頭使用 Api必須include 跟加入 lib,加入之後就可以在VC裡頭任意使用api了 暫時先貼上程式碼...等待有空時候在更新說明 extern "C" { #inc ...
- Android USB Headset: Device Specification
For USB headsets to work seamlessly across the Android ecosystem, Android devices must support them ...
- Linux usb 4. Device 详解
文章目录 1. 简介 2. Platform Layer 2.1 Platform Device 2.2 Platform Driver 3. UDC/Gadget Layer 3.1 Gadget ...
- 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 ...
随机推荐
- maven - 使用nexus 搭建maven私服
1, java环境 [wenbronk@localhost nexus]$ java -version java version "1.8.0_121" Java(TM) SE R ...
- filebeat-1-连通logstash
类似flume, 但功能更为强大 Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并 ...
- 多线程,线程同步,synchronized关键字的用法
一.什么是多线程 Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorSe ...
- Solidity中如何判断mapping中某个键是否为空呢?
Solidity中如何判断mapping中某个键是否为空呢? 一.比较标准的做法是建立一个专门和value相关的结构体,用一个布尔型变量来看是否这个key所对应的value被赋过值 代码如下: pra ...
- JSP 基础(二)
五 注释 5.1 JSP注释 <%--注释内容--%> 5.2 HTML注释 <!--注释内容--> 5.3 Java注释 六 JSP指令 在JSP中有三种类型 ...
- 【转】CSS3 Box-sizing
box-sizing是CSS3的box属性之一.一说到CSS的盒模型(Box model)我想很多人都会比较烦,特别是对于新手,然而这个Box model又是我们CSS运用中比较重要的一个属性.那么C ...
- C# an error has occurred while updating the entries.see the log file
message:An error occurred while updating the entries. See the inner exception for details. C# 在执行插入方 ...
- ubuntu 上安装ssh
1. 执行 sudo apt-get update 2. 安装 sudo apt-get install openssh-server 3.查看ssh服务状态 sudo service ssh sta ...
- 深入理解读写锁ReentrantReadWriteLock
1.读写锁的介绍 在并发场景中用于解决线程安全的问题,我们几乎会提供高频率的使用到独占式锁,通常使用java提供的关键字synchronized(关于synchronized可以看这篇文章)或者con ...
- 关于电脑重装win10系统导致编译环境失效(jdk)
年前换了固态,于是重装了系统发现之前装在非系统盘的jdk1.8配置过系统环境后仍然不能正常使用的问题,在犹豫一会后选择了重装jdk, 由于之前用的是win7在环境配置上是 变量值内加;即可自行分行,但 ...