写在前面

本文翻译自 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. php里use关键字与class_alias的作用域区别

    use可以用在命名空间下,也可以不用再命名空间下,他在两者中的作用是一致的,都是在编译的时候执行,不真正的加载类,因为是编译的时候执行,所以只能在全局环境使用,及不能使用在方法内部,条件判断内部. 引 ...

  2. openerp7 时区问题解决--改成本地时区

    由于目前openerp的时区,读取的是UTC时间,而我国本地时间比UTC快8小时 问题就导致,写入数据库的时候时间相差8小时,以及Openerp日志输出时间格式也相差8小时和前端显示问题 1.更改op ...

  3. 使用netfilter_queue改包笔记

    系统:centos 7 准备:安装libnetfilter_queue模块,可以yum安装,也可以网上下载rpm包安装 简介:使用iptables在NAT表上创建DNAT与SNAT规则,对数据包进行转 ...

  4. switch-case最容易忽视的一点

    switch语句是常用的一种java语法,但是往往最基本的,总是最容易被人们忽略. 首先,看下switch语句的基本结构: switch(表达式){ case 常量1: 语句1; break; cas ...

  5. Linux后台运行java的jar包

    Linux 运行jar包命令如下: 方式一 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar shareniu. ...

  6. laravel 文件上传

    laravel 文件上传 先开扩展 表单中能够选择图片 数据处理C层, 接图片并保存 保存图片: 设置目录 store()的第一个参数说明: 存放图片的子目录. 如何获取文件的类型 大小: $uplo ...

  7. 自己写一个java的mvc框架吧(三)

    自己写一个mvc框架吧(三) 根据Method获取参数并转换参数类型 上一篇我们将url与Method的映射创建完毕,并成功的将映射关系创建起来了.这一篇我们将根据Method的入参参数名称.参数类型 ...

  8. Java基础——网络编程(二)

    一.套接字 Socket 网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送.它在应用程序中创建,通过一种绑定机制与驱动程序建立关系, ...

  9. 使用Druid网上监控

    0.添加依赖 <!--druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artif ...

  10. Java - Map总结

    Java提高篇(三三)-----Map总结 一.Map概述 首先先看Map的结构示意图 Map:“键值”对映射的抽象接口.该映射不包括重复的键,一个键对应一个值. SortedMap:有序的键值对接口 ...