Getting into USB drivers

blubee blubeeme gurenchan at gmail.com
Fri Oct 27 02:18:55 UTC 2017


I have a USB webcam that I would like to get into writing drivers for as a
practical introduction to writing drivers for FreeBSD. I am not sure if
this one already has a driver but here's the usb dump of the device.

Anyone here willing to give me some pointers on writing drivers?


me at blubee:~ % sudo usbconfig -d 0.5 dump_all_config_desc
Password:
ugen0.5: <SunplusIT Inc Chicony USB 2.0 Camera> at usbus0, cfg=0 md=HOST
spd=HIGH (480Mbps) pwr=ON (500mA)


 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x03a9
    bNumInterfaces = 0x0002
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080
    bMaxPower = 0x00fa

    Additional Descriptor

    bLength = 0x08
    bDescriptorType = 0x0b
    bDescriptorSubType = 0x00
     RAW dump:
     0x00 | 0x08, 0x0b, 0x00, 0x02, 0x0e, 0x03, 0x00, 0x04


    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0001
      bInterfaceProtocol = 0x0000
      iInterface = 0x0004  <Chicony USB 2.0 Camera>

      Additional Descriptor

      bLength = 0x0d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x0d, 0x24, 0x01, 0x00, 0x01, 0x6d, 0x00, 0x00,
       0x08 | 0x6c, 0xdc, 0x02, 0x01, 0x01


      Additional Descriptor

      bLength = 0x12
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x12, 0x24, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00,
       0x08 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e,
       0x10 | 0x00, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x0b, 0x24, 0x05, 0x02, 0x01, 0x00, 0x40, 0x02,
       0x08 | 0x7f, 0x15, 0x00


      Additional Descriptor

      bLength = 0x1d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump:
       0x00 | 0x1d, 0x24, 0x06, 0x03, 0xc3, 0x85, 0xb8, 0x0f,
       0x08 | 0xc2, 0x68, 0x47, 0x45, 0x90, 0xf7, 0x8f, 0x47,
       0x10 | 0x57, 0x9d, 0x95, 0xfc, 0x00, 0x01, 0x02, 0x04,
       0x18 | 0x1f, 0x00, 0x00, 0x00, 0x00


      Additional Descriptor

      bLength = 0x1d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump:
       0x00 | 0x1d, 0x24, 0x06, 0x04, 0x82, 0x06, 0x61, 0x63,
       0x08 | 0x70, 0x50, 0xab, 0x49, 0xb8, 0xcc, 0xb3, 0x85,
       0x10 | 0x5e, 0x8d, 0x22, 0x1d, 0x00, 0x01, 0x03, 0x04,
       0x18 | 0xff, 0xff, 0x71, 0x00, 0x00


      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x05, 0x01, 0x01, 0x00, 0x04,
       0x08 | 0x00

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0087  <IN>
        bmAttributes = 0x0003  <INTERRUPT>
        wMaxPacketSize = 0x0010
        bInterval = 0x0008
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x05
      bDescriptorType = 0x25
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x05, 0x25, 0x03, 0x05, 0x04



    Interface 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0000
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

      Additional Descriptor

      bLength = 0x0f
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x0f, 0x24, 0x01, 0x02, 0x5d, 0x02, 0x81, 0x00,
       0x08 | 0x05, 0x01, 0x01, 0x00, 0x01, 0x04, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump:
       0x00 | 0x0b, 0x24, 0x06, 0x01, 0x09, 0x01, 0x01, 0x00,
       0x08 | 0x00, 0x00, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x01, 0x01, 0x80, 0x07, 0x38,
       0x08 | 0x04, 0x00, 0x80, 0x53, 0x3b, 0x00, 0x80, 0x53,
       0x10 | 0x3b, 0x00, 0x48, 0x3f, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x02, 0x01, 0xa0, 0x00, 0x78,
       0x08 | 0x00, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xa0, 0x8c,
       0x10 | 0x00, 0x00, 0x96, 0x00, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x03, 0x01, 0xb0, 0x00, 0x90,
       0x08 | 0x00, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0xa0, 0xb9,
       0x10 | 0x00, 0x00, 0xc6, 0x00, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x04, 0x01, 0x40, 0x01, 0xf0,
       0x08 | 0x00, 0x00, 0x80, 0x32, 0x02, 0x00, 0x80, 0x32,
       0x10 | 0x02, 0x00, 0x58, 0x02, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x05, 0x01, 0x60, 0x01, 0x20,
       0x08 | 0x01, 0x00, 0x80, 0xe6, 0x02, 0x00, 0x80, 0xe6,
       0x10 | 0x02, 0x00, 0x18, 0x03, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x06, 0x01, 0x80, 0x02, 0x68,
       0x08 | 0x01, 0x00, 0x80, 0x97, 0x06, 0x00, 0x80, 0x97,
       0x10 | 0x06, 0x00, 0x08, 0x07, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x07, 0x01, 0x80, 0x02, 0xe0,
       0x08 | 0x01, 0x00, 0x00, 0xca, 0x08, 0x00, 0x00, 0xca,
       0x10 | 0x08, 0x00, 0x60, 0x09, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x08, 0x01, 0x00, 0x05, 0xd0,
       0x08 | 0x02, 0x00, 0x00, 0x5e, 0x1a, 0x00, 0x00, 0x5e,
       0x10 | 0x1a, 0x00, 0x20, 0x1c, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x09, 0x01, 0x00, 0x05, 0x00,
       0x08 | 0x04, 0x00, 0x00, 0x80, 0x25, 0x00, 0x00, 0x80,
       0x10 | 0x25, 0x00, 0x00, 0x28, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x0d
       RAW dump:
       0x00 | 0x06, 0x24, 0x0d, 0x01, 0x01, 0x04


      Additional Descriptor

      bLength = 0x1b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x04
       RAW dump:
       0x00 | 0x1b, 0x24, 0x04, 0x02, 0x09, 0x59, 0x55, 0x59,
       0x08 | 0x32, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00,
       0x10 | 0xaa, 0x00, 0x38, 0x9b, 0x71, 0x10, 0x01, 0x00,
       0x18 | 0x00, 0x00, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x01, 0x01, 0x80, 0x07, 0x38,
       0x08 | 0x04, 0x00, 0x40, 0xe3, 0x09, 0x00, 0x40, 0xe3,
       0x10 | 0x09, 0x00, 0x48, 0x3f, 0x00, 0x80, 0x84, 0x1e,
       0x18 | 0x00, 0x01, 0x80, 0x84, 0x1e, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x02, 0x01, 0xa0, 0x00, 0x78,
       0x08 | 0x00, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xa0, 0x8c,
       0x10 | 0x00, 0x00, 0x96, 0x00, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x03, 0x01, 0xb0, 0x00, 0x90,
       0x08 | 0x00, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0xa0, 0xb9,
       0x10 | 0x00, 0x00, 0xc6, 0x00, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x04, 0x01, 0x40, 0x01, 0xf0,
       0x08 | 0x00, 0x00, 0x80, 0x32, 0x02, 0x00, 0x80, 0x32,
       0x10 | 0x02, 0x00, 0x58, 0x02, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x05, 0x01, 0x60, 0x01, 0x20,
       0x08 | 0x01, 0x00, 0x80, 0xe6, 0x02, 0x00, 0x80, 0xe6,
       0x10 | 0x02, 0x00, 0x18, 0x03, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x06, 0x01, 0x80, 0x02, 0x68,
       0x08 | 0x01, 0x00, 0x80, 0x97, 0x06, 0x00, 0x80, 0x97,
       0x10 | 0x06, 0x00, 0x08, 0x07, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x07, 0x01, 0x80, 0x02, 0xe0,
       0x08 | 0x01, 0x00, 0x00, 0xca, 0x08, 0x00, 0x00, 0xca,
       0x10 | 0x08, 0x00, 0x60, 0x09, 0x00, 0x15, 0x16, 0x05,
       0x18 | 0x00, 0x01, 0x15, 0x16, 0x05, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x08, 0x01, 0x00, 0x05, 0xd0,
       0x08 | 0x02, 0x00, 0x00, 0xca, 0x08, 0x00, 0x00, 0xca,
       0x10 | 0x08, 0x00, 0x20, 0x1c, 0x00, 0x40, 0x42, 0x0f,
       0x18 | 0x00, 0x01, 0x40, 0x42, 0x0f, 0x00


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x05
       RAW dump:
       0x00 | 0x1e, 0x24, 0x05, 0x09, 0x01, 0x00, 0x05, 0x00,
       0x08 | 0x04, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x40,
       0x10 | 0x06, 0x00, 0x00, 0x28, 0x00, 0x80, 0x84, 0x1e,
       0x18 | 0x00, 0x01, 0x80, 0x84, 0x1e, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x0d
       RAW dump:
       0x00 | 0x06, 0x24, 0x0d, 0x01, 0x01, 0x04



    Interface 1 Alt 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0001
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x00c0
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 2
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0002
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x0180
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 3
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0003
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x0200
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 4
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0004
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x0280
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 5
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0005
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x0320
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 6
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0006
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x03b0
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 7
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0007
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x0a80
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 8
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0008
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x0b20
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 9
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0009
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x0be0
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 10
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x000a
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x13c0
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1 Alt 11
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x000b
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x000e  <Video device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x13fc
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000


More information about the freebsd-drivers mailing list