Hello USB friends :)

I am having a hard time trying to get two webcams working simultaneously on FreeBSD 12.2-STABLE r367109 GENERIC amd64.

Each webcam works by itself, for example when taking a snapshot with pwcview:

sudo pwcview -h -c 1 -o foo.jpg -d /dev/video0

The webcam creates two video devices, video0 and video1. When I plug in the second webcam video2 and video3 are created. But trying to use the device doesn't work, pwcview hangs forever and multimedia/motion complains about timeouts when speaking to the camera.

If I swap the cameras around then "the other one" works, so I know both cameras are fine.

It seems somehow webcamd or maybe something in the usb system doesn't like having two cameras in my setup.

I tried temporarily replacing one of the webcams with another model, but the same result: the first webcam works, but the next one does not.

The webcams look like this to FreeBSD:
===============================

$ sudo usbconfig -d ugen0.5 dump_all_desc
ugen0.5: <Jieli Technology USB PHY 2.0> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0200
  bDeviceClass = 0x00ef  <Miscellaneous device>
  bDeviceSubClass = 0x0002
  bDeviceProtocol = 0x0001
  bMaxPacketSize0 = 0x0040
  idVendor = 0x1224
  idProduct = 0x2a25
  bcdDevice = 0x0100
  iManufacturer = 0x0001  <Jieli Technology>
  iProduct = 0x0002  <USB PHY 2.0>
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001

 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0273
    bNumInterfaces = 0x0004
    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, 0x06


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

      Additional Descriptor

      bLength = 0x0d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x0d, 0x24, 0x01, 0x00, 0x01, 0x67, 0x00, 0x80,
       0x08 | 0xc3, 0xc9, 0x01, 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, 0xff,
       0x10 | 0xff, 0x1f


      Additional Descriptor

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


      Additional Descriptor

      bLength = 0x1a
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump:
       0x00 | 0x1a, 0x24, 0x06, 0x03, 0x70, 0x33, 0xf0, 0x28,
       0x08 | 0x11, 0x63, 0x2e, 0x4a, 0xba, 0x2c, 0x68, 0x90,
       0x10 | 0xeb, 0x33, 0x40, 0x16, 0x08, 0x01, 0x02, 0x01,
       0x18 | 0x00, 0x00


      Additional Descriptor

      bLength = 0x1a
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump:
       0x00 | 0x1a, 0x24, 0x06, 0x04, 0x94, 0x73, 0xdf, 0xdd,
       0x08 | 0x3e, 0x97, 0x27, 0x47, 0xbe, 0xd9, 0x04, 0xed,
       0x10 | 0x64, 0x26, 0xdc, 0x67, 0x08, 0x01, 0x03, 0x01,
       0x18 | 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 = 0x0085  <IN>
        bmAttributes = 0x0003  <INTERRUPT>
        wMaxPacketSize = 0x0040
        bInterval = 0x0004
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

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



    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, 0xe1, 0x00, 0x84, 0x00,
       0x08 | 0x05, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00


      Additional Descriptor

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


      Additional Descriptor

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


      Additional Descriptor

      bLength = 0x1e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump:
       0x00 | 0x1e, 0x24, 0x07, 0x02, 0x00, 0x80, 0x02, 0xe0,
       0x08 | 0x01, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0xca,
       0x10 | 0x08, 0x00, 0x60, 0x09, 0x00, 0x80, 0x1a, 0x06,
       0x18 | 0x00, 0x01, 0x80, 0x1a, 0x06, 0x00


      Additional Descriptor

      bLength = 0x16
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x16, 0x24, 0x03, 0x00, 0x03, 0x00, 0x05, 0xd0,
       0x08 | 0x02, 0x80, 0x02, 0xe0, 0x01, 0x40, 0x01, 0xf0,
       0x10 | 0x00, 0x04, 0x01, 0x05, 0x0a, 0x14


      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, 0x02, 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, 0x00, 0x00, 0x05, 0xd0,
       0x08 | 0x02, 0x00, 0x00, 0x2f, 0x0d, 0x00, 0x00, 0x5e,
       0x10 | 0x1a, 0x00, 0x20, 0x1c, 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, 0x00, 0x80, 0x02, 0xe0,
       0x08 | 0x01, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0xca,
       0x10 | 0x08, 0x00, 0x60, 0x09, 0x00, 0x80, 0x1a, 0x06,
       0x18 | 0x00, 0x01, 0x80, 0x1a, 0x06, 0x00


      Additional Descriptor

      bLength = 0x12
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x12, 0x24, 0x03, 0x00, 0x03, 0x00, 0x05, 0xd0,
       0x08 | 0x02, 0x80, 0x02, 0xe0, 0x01, 0x40, 0x01, 0xf0,
       0x10 | 0x00, 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 = 0x0084  <IN>
        bmAttributes = 0x0005  <ASYNC-ISOCHRONOUS>
        wMaxPacketSize = 0x1400
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

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



    Interface 2
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0002
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0000
      bInterfaceClass = 0x0001  <Audio device>
      bInterfaceSubClass = 0x0001
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <USB Microphone>

      Additional Descriptor

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

      Additional Descriptor

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


      Additional Descriptor

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


      Additional Descriptor

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


    Interface 3
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0003
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0000
      bInterfaceClass = 0x0001  <Audio device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <USB Microphone>


    Interface 3 Alt 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0003
      bAlternateSetting = 0x0001
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0001  <Audio device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <USB Microphone>

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x24, 0x01, 0x02, 0x01, 0x01, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
       0x08 | 0x40, 0x1f, 0x00


     Endpoint 0
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0001  <ISOCHRONOUS>
        wMaxPacketSize = 0x0100
        bInterval = 0x0004
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00



    Interface 3 Alt 2
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0003
      bAlternateSetting = 0x0002
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0001  <Audio device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <USB Microphone>

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x24, 0x01, 0x02, 0x01, 0x01, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
       0x08 | 0x80, 0x3e, 0x00


     Endpoint 0
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0001  <ISOCHRONOUS>
        wMaxPacketSize = 0x0100
        bInterval = 0x0004
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00



    Interface 3 Alt 3
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0003
      bAlternateSetting = 0x0003
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0001  <Audio device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <USB Microphone>

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x24, 0x01, 0x02, 0x01, 0x01, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
       0x08 | 0x44, 0xac, 0x00


     Endpoint 0
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0001  <ISOCHRONOUS>
        wMaxPacketSize = 0x0100
        bInterval = 0x0004
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00



    Interface 3 Alt 4
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0003
      bAlternateSetting = 0x0004
      bNumEndpoints = 0x0001
      bInterfaceClass = 0x0001  <Audio device>
      bInterfaceSubClass = 0x0002
      bInterfaceProtocol = 0x0000
      iInterface = 0x0005  <USB Microphone>

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x24, 0x01, 0x02, 0x01, 0x01, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
       0x08 | 0x80, 0xbb, 0x00


     Endpoint 0
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0001  <ISOCHRONOUS>
        wMaxPacketSize = 0x0100
        bInterval = 0x0004
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00


===============================

Both are connected to a USB hub, but I have tried connecting one directly to the computer, which is a pcengines APU3C4 btw. It did not make a difference.

What can I try to troubleshoot/debug this? Any more info needed?

Thanks! :)

Best regards,

Thomas Steen Rasmussen
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "[email protected]"

Reply via email to