Description
We have a UVC webcam (ArduCam B0454) we have been using successfully this season on our Control Hub 2.0 port. We would like to move it over to the USB 3.0 port. When we do, the webcam is recognized on the USB bus and can be configured, but the FTC libraries fail to bring it online. Given that USB 3.0 is theoretically backward compatible with USB 2.0 devices, this is surprising. Below is what we see in the log when we try this. Emphasis added on a few lines.
We are keen to make this change to avoid the documented issues with the wifi chip and USB 2.0 port sharing a power supply, leading to disconnects. We had understood that it was also possible to connect a UVC webcam to the control hub USB C port, but cams connected that way are not recognized on the bus during configuration.
We would greatly appreciate any insights on how we might make this work.
Thank you,
2025-01-30 14:48:28.145 983-1527 RobotCore com.qualcomm.ftcrobotcontroller I Attempting to switch to OpMode Examine Cam
2025-01-30 14:48:28.152 983-1527 RobotCore com.qualcomm.ftcrobotcontroller I ******************** START - OPMODE Examine Cam ********************
2025-01-30 14:48:28.341 983-1527 HardwareMap com.qualcomm.ftcrobotcontroller D Clearing which device instances have been retrieved
2025-01-30 14:48:28.344 983-1527 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0720b30d: OpModeExecutor) added id=240 TID=0 count=1
2025-01-30 14:48:28.346 983-1535 RobotCore com.qualcomm.ftcrobotcontroller V thread: 'OpModeThread' starting...
2025-01-30 14:48:28.348 983-1535 RevBlinkinLedDriver com.qualcomm.ftcrobotcontroller V Pattern: BLACK, 99, 0.747500
2025-01-30 14:48:28.354 983-1535 System.out com.qualcomm.ftcrobotcontroller I OpenCvCameraBase ctor: EasyOpenCV version 1.7.3
2025-01-30 14:48:28.364 983-1181 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_NOTIFY_INIT_OP_MODE(11732), attempt: 0
2025-01-30 14:48:28.365 983-1181 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_STREAM_CHANGE(11733), attempt: 0
2025-01-30 14:48:28.368 983-1536 CameraManager com.qualcomm.ftcrobotcontroller D doOpenCamera()...
2025-01-30 14:48:28.369 983-1536 CameraManager com.qualcomm.ftcrobotcontroller D requesting permission for camera: Webcam(YL20230518V0)
2025-01-30 14:48:28.382 983-1536 WebcamNameImpl com.qualcomm.ftcrobotcontroller D requesting permission for /dev/bus/usb/001/004
2025-01-30 14:48:28.382 983-1536 WebcamNameImpl com.qualcomm.ftcrobotcontroller V asyncRequestUsbPermission()...
2025-01-30 14:48:28.387 983-1536 WebcamNameImpl com.qualcomm.ftcrobotcontroller D permission already available for /dev/bus/usb/001/004
2025-01-30 14:48:28.389 983-1536 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0eecb4b2: default threadpool) added id=242 TID=0 count=1
2025-01-30 14:48:28.389 983-1536 WebcamNameImpl com.qualcomm.ftcrobotcontroller V ...asyncRequestUsbPermission()
2025-01-30 14:48:28.390 983-1536 Continuati...nchronizer com.qualcomm.ftcrobotcontroller D awaiting(camera open)...
2025-01-30 14:48:28.391 983-1537 WebcamNameImpl com.qualcomm.ftcrobotcontroller D permission for /dev/bus/usb/001/004=true
2025-01-30 14:48:28.391 983-1537 CameraManager com.qualcomm.ftcrobotcontroller D permission granted for camera: Webcam(YL20230518V0)
2025-01-30 14:48:28.392 983-1537 CameraManager com.qualcomm.ftcrobotcontroller D asyncOpenCamera(Webcam(YL20230518V0))...
**2025-01-30 14:48:28.393 983-1537 CameraManager com.qualcomm.ftcrobotcontroller D asyncOpenWebcam(Webcam(YL20230518V0))...**
2025-01-30 14:48:28.393 983-1537 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller V construct(0x0d0f193c)
2025-01-30 14:48:28.394 983-1537 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D openAssumingPermission()...
**2025-01-30 14:48:28.401 983-1537 UvcContext com.qualcomm.ftcrobotcontroller D found webcam: usbPath=/dev/bus/usb/001/004 vid=0x1BCF pid=0x284C serial=YL20230518V0 product=Arducam 5MP Camera Module**
2025-01-30 14:48:28.401 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [jni_context.cpp:120] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice()...
2025-01-30 14:48:28.401 983-1537 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice: enter...
2025-01-30 14:48:28.402 983-1537 libusb com.qualcomm.ftcrobotcontroller D [800.162842] [00000601] libusb: debug [op_create] op_create: szUsbPath=/dev/bus/usb/001/004 szSysfsDir=1-1
2025-01-30 14:48:28.402 983-1537 libusb com.qualcomm.ftcrobotcontroller D [800.163085] [00000601] libusb: debug [initialize_device] initialize_device(szUsbPath=/dev/bus/usb/001/004 szSysfsDir=1-1)
2025-01-30 14:48:28.403 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:613] uvc_create_uvc_device()...
2025-01-30 14:48:28.403 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:347] uvc_device::uvc_device()...
2025-01-30 14:48:28.403 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:376] acquired vid=7119 & pid=10316
2025-01-30 14:48:28.403 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:347] ...uvc_device::uvc_device()
2025-01-30 14:48:28.404 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:613] ...uvc_create_uvc_device() rc=0
2025-01-30 14:48:28.404 983-1537 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice: ...exit
2025-01-30 14:48:28.404 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [jni_context.cpp:120] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice()
2025-01-30 14:48:28.404 983-1537 UvcDevice com.qualcomm.ftcrobotcontroller V construct(pointer=0x7e69fb48c0|null)
2025-01-30 14:48:28.405 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:108] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetLibUsbDevice()...
2025-01-30 14:48:28.405 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:108] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetLibUsbDevice()
2025-01-30 14:48:28.405 983-1537 LibUsbDevice com.qualcomm.ftcrobotcontroller V construct(pointer=0x7e672a1340)
**2025-01-30 14:48:28.406 983-1537 UvcContext com.qualcomm.ftcrobotcontroller D usb device is *not* UVC compatible, /dev/bus/usb/003/003**
2025-01-30 14:48:28.410 983-1537 UvcDevice com.qualcomm.ftcrobotcontroller D open()...
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:50] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeSetUsbDeviceInfo()...
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:50] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeSetUsbDeviceInfo()
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:233] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeOpenDeviceHandle()...
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeOpenDeviceHandle: enter...
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:279] uvc_open()...
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:357] uvc_device::open()...
2025-01-30 14:48:28.495 983-1537 libusb com.qualcomm.ftcrobotcontroller D [800.255892] [00000601] libusb: debug [op_open] op_open: szUsbPath=/dev/bus/usb/001/004
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:357] ...uvc_device::open() rc=0
2025-01-30 14:48:28.495 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:295] calling libusb_reset_device()...
2025-01-30 14:48:28.504 425-519 EventHub system_server I Removing device Arducam 5MP Camera Module due to epoll hang-up event.
2025-01-30 14:48:28.504 425-519 EventHub system_server I Removed device: path=/dev/input/event2 name=Arducam 5MP Camera Module id=8 fd=178 classes=0x80000401
2025-01-30 14:48:28.547 425-510 WiredAccessoryManager system_server V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1929, ACTION=change, SWITCH_STATE=0, SWITCH_NAME=usb_audio, DEVPATH=/devices/virtual/switch/usb_audio}
2025-01-30 14:48:28.547 425-510 WiredAccessoryManager system_server V newName=usb_audio newState=0 headsetState=0 prev headsetState=4
2025-01-30 14:48:28.547 425-510 WiredAccessoryManager system_server I MSG_NEW_DEVICE_STATE
2025-01-30 14:48:28.548 425-425 WiredAccessoryManager system_server V headsetName: disconnected
2025-01-30 14:48:28.549 425-510 WiredAccessoryManager system_server V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1933, ACTION=change, SWITCH_STATE=-1, SWITCH_NAME=usb_audio_capture, DEVPATH=/devices/virtual/switch/usb_audio_capture}
2025-01-30 14:48:28.550 425-491 UsbAlsaManager system_server D ALSA device removed: AlsaDevice: [card: 3, device: 0, type: 2]
**2025-01-30 14:48:28.563 425-519 EventHub system_server I Removing device '/dev/input/event2' due to inotify event
2025-01-30 14:48:28.563 425-519 InputReader system_server I Device removed: id=8, name='Arducam 5MP Camera Module', sources=0x00002103**
2025-01-30 14:48:28.795 425-519 EventHub system_server D No input device configuration file found for device 'Arducam 5MP Camera Module'.
2025-01-30 14:48:28.801 425-519 EventHub system_server W Unable to disable kernel key repeat for /dev/input/event2: Function not implemented
2025-01-30 14:48:28.801 425-519 EventHub system_server I New device: id=9, fd=88, path='/dev/input/event2', name='Arducam 5MP Camera Module', classes=0x80000401, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyCharacterMap='/system/usr/keychars/Generic.kcm', builtinKeyboard=false, wakeMechanism=EPOLLWAKEUP, usingClockIoctl=true
2025-01-30 14:48:28.801 425-519 InputReader system_server I Device added: id=9, name='Arducam 5MP Camera Module', sources=0x00002103
2025-01-30 14:48:33.368 983-1536 Continuati...nchronizer com.qualcomm.ftcrobotcontroller E deadline expired during await()
2025-01-30 14:48:33.368 983-1536 Continuati...nchronizer com.qualcomm.ftcrobotcontroller D ...awaiting(camera open)
2025-01-30 14:48:33.368 983-1536 CameraManager com.qualcomm.ftcrobotcontroller D ...doOpenCamera()
2025-01-30 14:48:33.368 983-1536 VisionPortalImpl com.qualcomm.ftcrobotcontroller E Camera opening failed.
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:303] ...libusb_reset_device() called
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:311] libusb_open() = 0
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:733] uvc_device_handle::uvc_device_handle()...
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:733] ...uvc_device_handle::uvc_device_handle()
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:386] uvc_get_device_info()...
2025-01-30 14:48:35.000 983-1537 libusb com.qualcomm.ftcrobotcontroller D [806.761196] [00000601] libusb: debug [op_get_config_descriptor] op_get_config_descriptor: config_index=0
2025-01-30 14:48:35.000 983-1537 libusb com.qualcomm.ftcrobotcontroller D [806.761233] [00000601] libusb: debug [op_get_config_descriptor] op_get_config_descriptor: config_index=0
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:986] uvc_scan_control()...
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1041] uvc_parse_vc_header()...
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1284] uvc_scan_streaming()...
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1340] uvc_parse_vs_input_header()...
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1340] ...uvc_parse_vs_input_header() rc=0
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1449] uvc_parse_vs_format_mjpeg()...
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1449] ...uvc_parse_vs_format_mjpeg() rc=0
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 3 UVC_VS_STILL_IMAGE_FRAME
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 13 UVC_VS_COLORFORMAT
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1389] uvc_parse_vs_format_uncompressed()...
2025-01-30 14:48:35.000 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1389] ...uvc_parse_vs_format_uncompressed() rc=0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 3 UVC_VS_STILL_IMAGE_FRAME
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 13 UVC_VS_COLORFORMAT
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1284] ...uvc_scan_streaming() rc=0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1041] ...uvc_parse_vc_header() rc=0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1083] uvc_parse_vc_input_terminal()...
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1083] ...uvc_parse_vc_input_terminal() rc=0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1156] uvc_parse_vc_processing_unit()...
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1156] ...uvc_parse_vc_processing_unit() rc=0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:986] ...uvc_scan_control() rc=0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:386] ...uvc_get_device_info() rc=0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:326] claiming control interface 0
2025-01-30 14:48:35.001 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:771] uvc_device_handle::claimInterface(idx=0)...
2025-01-30 14:48:35.001 425-510 WiredAccessoryManager system_server V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1941, ACTION=change, SWITCH_STATE=30, SWITCH_NAME=usb_audio_capture, DEVPATH=/devices/virtual/switch/usb_audio_capture}
2025-01-30 14:48:35.001 425-491 UsbAlsaManager system_server D Adding ALSA device AlsaDevice: [card: 3, device: 0, type: 2]
2025-01-30 14:48:35.001 425-510 WiredAccessoryManager system_server V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1942, ACTION=change, SWITCH_STATE=1, SWITCH_NAME=usb_audio, DEVPATH=/devices/virtual/switch/usb_audio}
2025-01-30 14:48:35.001 983-1537 UvcDevice com.qualcomm.ftcrobotcontroller D claimInterface(0)
2025-01-30 14:48:35.002 425-510 WiredAccessoryManager system_server V newName=usb_audio newState=4 headsetState=4 prev headsetState=0
2025-01-30 14:48:35.002 425-510 WiredAccessoryManager system_server I MSG_NEW_DEVICE_STATE
2025-01-30 14:48:35.002 425-425 WiredAccessoryManager system_server V headsetName: connected
2025-01-30 14:48:35.003 197-197 APM_AudioPolicyManager audioserver D setDeviceConnectionState() could not find HW module for device 00000800
2025-01-30 14:48:35.003 425-539 AudioService system_server E not connecting device 0x800 due to command error 1
2025-01-30 14:48:35.004 425-519 EventHub system_server I Removing device Arducam 5MP Camera Module due to epoll hang-up event.
2025-01-30 14:48:35.004 425-519 EventHub system_server I Removed device: path=/dev/input/event2 name=Arducam 5MP Camera Module id=9 fd=88 classes=0x80000401
2025-01-30 14:48:35.056 425-519 InputReader system_server I Device removed: id=9, name='Arducam 5MP Camera Module', sources=0x00002103
2025-01-30 14:48:35.057 425-519 EventHub system_server I Removing device '/dev/input/event2' due to inotify event
2025-01-30 14:48:35.082 983-1537 UvcDevice com.qualcomm.ftcrobotcontroller D claimInterface(0) succeeded
2025-01-30 14:48:35.082 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:784] claimInterface(0) succeeded
2025-01-30 14:48:35.082 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:771] ...uvc_device_handle::claimInterface() rc=0
2025-01-30 14:48:35.082 983-1537 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:279] ...uvc_open() rc=0