Android/linux從usb聲卡獲取音頻(使用libusb庫)---libusb庫獲取“純麥”音頻數據,附(四)

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(端點)和傳輸模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章