Android/linux從usb聲卡獲取音頻(使用libusb庫)---環境,lsusb命令的介紹(一)
Android/linux從usb聲卡獲取音頻(使用libusb庫)---設備環境的確認(二)
Android/linux從usb聲卡獲取音頻(使用libusb庫)---libusb庫獲取“純麥”音頻數據(三)
Android/linux從usb聲卡獲取音頻(使用libusb庫)---libusb庫獲取“純麥”音頻數據,附(四)
Android/linux從usb聲卡獲取音頻(使用libusb庫)---監聽“純麥”(五)
上一篇demo源碼中有好些個參數,是和設備相關的,怎麼獲取這些參數信息,就要通過lsusb 了,lsusb列出的具體信息的含義,參照一篇:https://www.cnblogs.com/Daniel-G/p/3993904.html 感謝,找了好久。(畢竟不熟悉USB協議)
這裏對應解釋一下 JMTek設備的信息:
root@can-virtual-machine:/work/test/libusb/libusb-1.0.22# lsusb -D /dev/bus/usb/002/006
Device: ID 0c76:1915 JMTek, LLC.
Device Descriptor: 設備描述符
bLength 18 //描述符的長度,指的是usb設備返回過來的數據 18個字節
bDescriptorType 1 //描述符類型,有很多描述符類型,描述不同屬性,1 是設備描述符
bcdUSB 1.10 //usb協議版本號, 1.10
bDeviceClass 0 (Defined at Interface level) //usb設備類代碼 https://www.cnblogs.com/Daniel-G/p/3993904.html 如果該字段爲0x00,表示由接口描述符來指定(有可能該USB設備是一個複合設備,USB設備的各個接口相互獨立,分別屬於不同的設備類)。如果是0x01~0xfe,表示爲USB-IF定義的設備類,例如0x03爲HID設備,0x09爲HUB設備。如果是0xff,表示由廠商自定義設備類型。
bDeviceSubClass 0 USB子類代碼,由USB-IF分配,如果bDeviceClass爲0x00,那麼該字段也必須爲 0x00,其它情況可以參考USB關於對於USB Device Class的定義。
bDeviceProtocol 0 協議代碼,由USB-IF分配,如果bDeviceClass和bDeviceSubClass定義爲0x00,那麼該字段也必須爲0x00。
bMaxPacketSize0 64 端點0最大數據包長度,必須爲8、16、32和64。
idVendor 0x0c76 JMTek, LLC.
idProduct 0x1915
bcdDevice 1.00 設備序列號,由廠商自行設置。
iManufacturer 1 www.loostone.com 用於描述廠商的字符串描述符索引
iProduct 2 Loostone PureMic U7-K 用於描述產品的字符串描述符索引。
iSerial 3 6C7756745D75 用於描述產品序列號的字符串描述符索引,注意,所有的字符串描述符是可選的,如果沒有字符串描述符,指定這些索引爲0x00。
bNumConfigurations 1 配置描述符數量
Configuration Descriptor: 一個USB設備只有一個USB設備描述符,可以有多個配置描述符
bLength 9 配置描述符長度,配置描述符長度爲9字節大小。
bDescriptorType 2 描述符類型,配置描述符類型爲0x02。
wTotalLength 145 配置描述符信息總的大小,包括接口描述符、端點描述符等等。
bNumInterfaces 3 USB接口數量。
bConfigurationValue 1 當使用SetConfiguration和GetConfiguration請求時所指定的配置索引值。
iConfiguration 0 描述配置的字符串描述符索引。
bmAttributes 0x80 供電配置,位詳細定義如下:
D7 保留,必須置1
D6 自供電模式
D5 遠程喚醒
D4~D0 保留
(Bus Powered)
MaxPower 100mA 最大功耗
Interface Descriptor:一個配置中可以有一個或多個接口,一個接口中有0個或多個端點,接口描述符和端點描述符不能直接通過GetDescriptor請求返回,必須連同配置描述符一起返回
bLength 9 描述符長度,接口描述符長度爲9個字節。
bDescriptorType 4 描述符類型,接口描述符的類型爲0x04。
bInterfaceNumber 0 該接口編號,接口編號從0開始分配,當一個配置有多個接口時,就用該字段來區分不同的接口。
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 47
bInCollection 1
baInterfaceNr( 0) 1
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0205 Microphone Array
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 18
wTerminalType 0x0101 USB Streaming
bAssocTerminal 2
bSourceID 33
iTerminal 0
AudioControl Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 5 (SELECTOR_UNIT)
bUnitID 33
bNrInPins 1
baSource( 0) 50
iSelector 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 50
bSourceID 2
bControlSize 1
bmaControls( 0) 0x03
Mute Control
Volume Control
bmaControls( 1) 0x00
bmaControls( 2) 0x00
iFeature 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 18
bDelay 1 frames
wFormatTag 1 PCM
AudioStreaming Interface Descriptor:
bLength 14
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 2 Discrete
tSamFreq[ 0] 48000
tSamFreq[ 1] 44100
Endpoint Descriptor://audio 設備端點
bLength 9 描述符長度,這裏有兩個值如果是audio設備的端點,那麼端點描述符長度就爲9個字節,對於其它設備端點,端點描述符長度就爲7個字
bDescriptorType 5 描述符類型,端點描述符類型爲0x05
bEndpointAddress 0x82 EP 2 IN 端點地址
bmAttributes 5 端點類型
Transfer Type Isochronous 同步傳輸
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00c8 1x 200 bytes 端點所支持最大數據包的長度
bInterval 1 端點數據傳輸的訪問時間間隔。對於全速/低速的中斷端點,取值範圍爲 1~255,對於高速中斷端點,取值範圍爲1~16 1ms
bRefresh 0
bSynchAddress 0
AudioControl Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x01
Sampling Frequency
bLockDelayUnits 0 Undefined
wLockDelay 0 Undefined
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 234
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 32
Device Status: 0x0000
(Bus Powered)
所以上面幾個重要的信息:
#define VID 0x0c76
#define PID 0x1915
#define EP_ISO_IN 0x82 //端點地址
#define IFACE_NUM 1 //usb “接口”編號 Configuration Descriptor: 中的bNumInterfaces 值表示該配置中接口數量,每一個配置中的接口有自己的接口編號 bInterfaceNumber
#define PACKET_SIZE 192 //lsusb 列出來的這個傳輸最大支持 200
附上一個usb協議傳輸的博客鏈接:usb中的endpoint(端點)和傳輸模式