UVC Webcam functional on Control Hub USB 2.0 port but fails to initialize on 3.0 port
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
Of possible interest: If we put a powered USB Hub (like the Rev UltraUSB Hub) in between the Control Hub 3.0 port and the webcam, the failure mode shifts to this:
2025-01-30 15:11:28.657 449-520 EventHub system_server I New device: id=4, fd=89, 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 15:11:28.657 449-520 InputReader system_server I Device added: id=4, name='Arducam 5MP Camera Module', sources=0x00002103
**2025-01-30 15:11:33.145 983-1310 Continuati...nchronizer com.qualcomm.ftcrobotcontroller E deadline expired during await()**
2025-01-30 15:11:33.145 983-1310 Continuati...nchronizer com.qualcomm.ftcrobotcontroller D ...awaiting(camera open)
2025-01-30 15:11:33.145 983-1310 CameraManager com.qualcomm.ftcrobotcontroller D ...doOpenCamera()
**2025-01-30 15:11:33.145 983-1310 VisionPortalImpl com.qualcomm.ftcrobotcontroller E Camera opening failed.**
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.
I believe the smoking gun is here. Some webcams are not tolerant of USB device resets, and it looks like this is one of them. Skipping the USB device reset was one of the workarounds needed to support the Arducam OV9281 in SDK v8.2.
If you're feeling adventurous, you could try adding your camera's VID and PID to the CamCompatFeature::AvoidLibUsbResetDevice case in libuvc_internal.h
Thank you! We are definitely adventurous! However, modifying the SDK at the C++ level and rebuilding the libraries and getting those rebuilt libraries incorporated in our Android Studio build would be a new journey for us. Are there some documents around describing how to do this in general with the SDK? We think we understand the change to the code you are proposing, but not so clear on how to edit/rebuild that library? Thanks!
The link I sent points to Extracted-RC, which is already set up to allow you build the SDK entirely from library sources. You should just be able to clone the repo and build in AS like any other project.
Do you happen to know what versions of Gradle and the Gradle JVM should be used to build this project in AS LadyBug? We have tried various combinations of gradle 8.5/8.9 and Gradle JVM 21/17 and no luck so far. Haven't gotten past gradle sync.
Here is the gradle sync error with 8.5 and 17: Could not create task ':Hardware:generateDebugRFile'. Cannot use @TaskAction annotation on method IncrementalTask.taskAction$gradle_core() because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.
I haven't tried to build it from Ladybug, you might need to do a side by side install of an earlier version of AS.
Backed up to last release of AS Koala and it built no problem with our tweak to libuvc_internal.h. That was with jbr-17 and gradle 7.2 Thanks!
To incorporate this into our build, is it as simple as copying the generated "~/FTCRobotController/build/outputs/aar/FtcRobotController-debug.aar" over to the corresponding directory in our team AS project?
Or perhaps the entire contents of the ~/FTCRobotController/build" directory? Or even the entire ~/FTCRobotController/" directory?
Let's start with just trying to run a sample vision OpMode from Extracted-RC and see if it fixes the issue.
Good point. Tried a controlled experiment:
- Reverted any changes to libuvc_internal.h in Extracted-RC
- Enabled ConceptAprilTag op mode
- Plugged a known-functional logitech into the 2.0 port
- Build and install
Sadly it died during initialization. Seems like something is amiss in the Extracted-RC build we did (fork/clone/build in AS). Here is the log:
2025-01-31 13:47:12.001 1610-1720 Robocol com.qualcomm.ftcrobotcontroller V received command: CMD_SET_MATCH_NUMBER(15653) 0
2025-01-31 13:47:12.003 1610-1720 Robocol com.qualcomm.ftcrobotcontroller V received command: CMD_INIT_OP_MODE(15654) Concept: AprilTag
2025-01-31 13:47:12.023 1610-1860 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0946bf06: OpModeStuckCodeMonitor) added id=144 TID=0 count=1
2025-01-31 13:47:12.027 1610-1861 RobotCore com.qualcomm.ftcrobotcontroller V thread: ...terminating 'OpModeThread'
2025-01-31 13:47:12.030 1610-1860 RobotCore com.qualcomm.ftcrobotcontroller I Attempting to switch to OpMode Concept: AprilTag
2025-01-31 13:47:12.030 1610-1861 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0ccee225: OpModeExecutor) removed id=143 TID=1861 count=1
2025-01-31 13:47:12.037 1610-1860 RobotCore com.qualcomm.ftcrobotcontroller I ******************** START - OPMODE Concept: AprilTag ********************
2025-01-31 13:47:12.105 1610-1860 HardwareMap com.qualcomm.ftcrobotcontroller D Clearing which device instances have been retrieved
2025-01-31 13:47:12.107 1610-1860 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0ad5e1c6: OpModeExecutor) added id=145 TID=0 count=1
2025-01-31 13:47:12.108 1610-1876 RobotCore com.qualcomm.ftcrobotcontroller V thread: 'OpModeThread' starting...
2025-01-31 13:47:12.111 1610-1724 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_NOTIFY_INIT_OP_MODE(5795), attempt: 0
2025-01-31 13:47:12.112 1610-1876 AprilTagDetectorJNI com.qualcomm.ftcrobotcontroller D Creating 36h11 tag family
2025-01-31 13:47:12.112 1610-1876 AprilTagDetectorJNI com.qualcomm.ftcrobotcontroller D Initializing april tag detector
2025-01-31 13:47:12.341 1610-1876 System.out com.qualcomm.ftcrobotcontroller I OpenCvCameraBase ctor: EasyOpenCV version 1.7.1
2025-01-31 13:47:12.343 1610-1877 CameraManager com.qualcomm.ftcrobotcontroller D doOpenCamera()...
2025-01-31 13:47:12.344 1610-1877 CameraManager com.qualcomm.ftcrobotcontroller D requesting permission for camera: Webcam(989ECEC0)
2025-01-31 13:47:12.351 1610-1724 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_STREAM_CHANGE(5800), attempt: 0
2025-01-31 13:47:12.353 1610-1877 WebcamNameImpl com.qualcomm.ftcrobotcontroller D requesting permission for /dev/bus/usb/003/005
2025-01-31 13:47:12.353 1610-1877 WebcamNameImpl com.qualcomm.ftcrobotcontroller V asyncRequestUsbPermission()...
2025-01-31 13:47:12.356 1610-1877 WebcamNameImpl com.qualcomm.ftcrobotcontroller D permission already available for /dev/bus/usb/003/005
2025-01-31 13:47:12.356 1610-1877 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0ab94c9e: default threadpool) added id=147 TID=0 count=1
2025-01-31 13:47:12.356 1610-1877 WebcamNameImpl com.qualcomm.ftcrobotcontroller V ...asyncRequestUsbPermission()
2025-01-31 13:47:12.357 1610-1878 WebcamNameImpl com.qualcomm.ftcrobotcontroller D permission for /dev/bus/usb/003/005=true
2025-01-31 13:47:12.357 1610-1877 Continuati...nchronizer com.qualcomm.ftcrobotcontroller D awaiting(camera open)...
2025-01-31 13:47:12.358 1610-1878 CameraManager com.qualcomm.ftcrobotcontroller D permission granted for camera: Webcam(989ECEC0)
2025-01-31 13:47:12.358 1610-1878 CameraManager com.qualcomm.ftcrobotcontroller D asyncOpenCamera(Webcam(989ECEC0))...
2025-01-31 13:47:12.359 1610-1878 CameraManager com.qualcomm.ftcrobotcontroller D asyncOpenWebcam(Webcam(989ECEC0))...
2025-01-31 13:47:12.359 1610-1878 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller V construct(0x0d0bfdd9)
2025-01-31 13:47:12.359 1610-1878 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D openAssumingPermission()...
2025-01-31 13:47:12.364 1610-1878 UvcContext com.qualcomm.ftcrobotcontroller D found webcam: usbPath=/dev/bus/usb/003/005 vid=0x46D pid=0x825 serial=989ECEC0 product=null
2025-01-31 13:47:12.364 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_context.cpp:120] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice()...
2025-01-31 13:47:12.364 1610-1878 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice: enter...
2025-01-31 13:47:12.365 1610-1878 libusb com.qualcomm.ftcrobotcontroller D [409.526088] [00000756] libusb: debug [op_create] op_create: szUsbPath=/dev/bus/usb/003/005 szSysfsDir=3-1.4
2025-01-31 13:47:12.366 1610-1878 libusb com.qualcomm.ftcrobotcontroller D [409.526352] [00000756] libusb: debug [initialize_device] initialize_device(szUsbPath=/dev/bus/usb/003/005 szSysfsDir=3-1.4)
2025-01-31 13:47:12.366 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:613] uvc_create_uvc_device()...
2025-01-31 13:47:12.366 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:347] uvc_device::uvc_device()...
2025-01-31 13:47:12.366 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:376] acquired vid=1133 & pid=2085
2025-01-31 13:47:12.366 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:347] ...uvc_device::uvc_device()
2025-01-31 13:47:12.366 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:613] ...uvc_create_uvc_device() rc=0
2025-01-31 13:47:12.366 1610-1878 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice: ...exit
2025-01-31 13:47:12.366 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_context.cpp:120] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice()
2025-01-31 13:47:12.367 1610-1878 UvcDevice com.qualcomm.ftcrobotcontroller V construct(pointer=0xca34fa28|null)
2025-01-31 13:47:12.367 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:108] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetLibUsbDevice()...
2025-01-31 13:47:12.367 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:108] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetLibUsbDevice()
**2025-01-31 13:47:12.367 1610-1878 LibUsbDevice com.qualcomm.ftcrobotcontroller V construct(pointer=0xcdab21c0)
2025-01-31 13:47:12.367 1610-1878 UvcContext com.qualcomm.ftcrobotcontroller D usb device is *not* UVC compatible, /dev/bus/usb/003/003
2025-01-31 13:47:12.373 1610-1878 UvcDevice com.qualcomm.ftcrobotcontroller D open()...
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:50] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeSetUsbDeviceInfo()...
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:50] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeSetUsbDeviceInfo()
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:233] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeOpenDeviceHandle()...
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeOpenDeviceHandle: enter...
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:279] uvc_open()...
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:357] uvc_device::open()...
2025-01-31 13:47:12.375 1610-1878 libusb com.qualcomm.ftcrobotcontroller D [409.535985] [00000756] libusb: debug [op_open] op_open: szUsbPath=/dev/bus/usb/003/005
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:357] ...uvc_device::open() rc=0
2025-01-31 13:47:12.375 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:295] calling libusb_reset_device()...
2025-01-31 13:47:12.398 391-519 EventHub system_process I Removing device UVC Camera (046d:0825) due to epoll hang-up event.
2025-01-31 13:47:12.398 391-519 EventHub system_process I Removed device: path=/dev/input/event2 name=UVC Camera (046d:0825) id=5 fd=180 classes=0x80000401
2025-01-31 13:47:12.472 391-519 EventHub system_process I Removing device '/dev/input/event2' due to inotify event
2025-01-31 13:47:12.472 391-519 InputReader system_process I Device removed: id=5, name='UVC** Camera (046d:0825)', sources=0x00002103
2025-01-31 13:47:12.475 391-510 WiredAccessoryManager system_process V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1885, ACTION=change, SWITCH_STATE=0, SWITCH_NAME=usb_audio, DEVPATH=/devices/virtual/switch/usb_audio}
2025-01-31 13:47:12.476 391-510 WiredAccessoryManager system_process V newName=usb_audio newState=0 headsetState=0 prev headsetState=4
2025-01-31 13:47:12.478 391-492 UsbAlsaManager system_process D ALSA device removed: AlsaDevice: [card: 3, device: 0, type: 2]
2025-01-31 13:47:12.479 391-510 WiredAccessoryManager system_process I MSG_NEW_DEVICE_STATE
2025-01-31 13:47:12.480 391-391 WiredAccessoryManager system_process V headsetName: disconnected
2025-01-31 13:47:12.482 391-510 WiredAccessoryManager system_process V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1889, ACTION=change, SWITCH_STATE=-1, SWITCH_NAME=usb_audio_capture, DEVPATH=/devices/virtual/switch/usb_audio_capture}
2025-01-31 13:47:12.868 391-519 EventHub system_process D No input device configuration file found for device 'UVC Camera (046d:0825)'.
2025-01-31 13:47:12.883 391-519 EventHub system_process W Unable to disable kernel key repeat for /dev/input/event2: Function not implemented
2025-01-31 13:47:12.883 391-519 EventHub system_process I New device: id=6, fd=178, path='/dev/input/event2', name='UVC Camera (046d:0825)', classes=0x80000401, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyCharacterMap='/system/usr/keychars/Generic.kcm', builtinKeyboard=false, wakeMechanism=EPOLLWAKEUP, usingClockIoctl=true
2025-01-31 13:47:12.883 391-519 InputReader system_process I Device added: id=6, name='UVC Camera (046d:0825)', sources=0x00002103
2025-01-31 13:47:12.899 391-510 WiredAccessoryManager system_process V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1897, ACTION=change, SWITCH_STATE=30, SWITCH_NAME=usb_audio_capture, DEVPATH=/devices/virtual/switch/usb_audio_capture}
2025-01-31 13:47:12.899 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:303] ...libusb_reset_device() called
2025-01-31 13:47:12.899 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:311] libusb_open() = 0
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:733] uvc_device_handle::uvc_device_handle()...
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:733] ...uvc_device_handle::uvc_device_handle()
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:386] uvc_get_device_info()...
2025-01-31 13:47:12.900 1610-1878 libusb com.qualcomm.ftcrobotcontroller D [410.060396] [00000756] libusb: debug [op_get_config_descriptor] op_get_config_descriptor: config_index=0
2025-01-31 13:47:12.900 1610-1878 libusb com.qualcomm.ftcrobotcontroller D [410.060502] [00000756] libusb: debug [op_get_config_descriptor] op_get_config_descriptor: config_index=0
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:986] uvc_scan_control()...
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1041] uvc_parse_vc_header()...
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1284] uvc_scan_streaming()...
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1340] uvc_parse_vs_input_header()...
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1340] ...uvc_parse_vs_input_header() rc=0
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1389] uvc_parse_vs_format_uncompressed()...
2025-01-31 13:47:12.900 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1389] ...uvc_parse_vs_format_uncompressed() rc=0
2025-01-31 13:47:12.901 391-492 UsbAlsaManager system_process D Adding ALSA device AlsaDevice: [card: 3, device: 0, type: 2]
2025-01-31 13:47:12.901 391-510 WiredAccessoryManager system_process V Headset UEVENT: {SUBSYSTEM=switch, SEQNUM=1898, ACTION=change, SWITCH_STATE=1, SWITCH_NAME=usb_audio, DEVPATH=/devices/virtual/switch/usb_audio}
2025-01-31 13:47:12.901 1610-1878 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 13 UVC_VS_COLORFORMAT
2025-01-31 13:47:12.902 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1449] uvc_parse_vs_format_mjpeg()...
2025-01-31 13:47:12.902 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1449] ...uvc_parse_vs_format_mjpeg() rc=0
2025-01-31 13:47:12.902 391-510 WiredAccessoryManager system_process V newName=usb_audio newState=4 headsetState=4 prev headsetState=0
2025-01-31 13:47:12.902 391-510 WiredAccessoryManager system_process I MSG_NEW_DEVICE_STATE
2025-01-31 13:47:12.902 391-391 WiredAccessoryManager system_process V headsetName: connected
2025-01-31 13:47:12.902 1610-1878 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 13 UVC_VS_COLORFORMAT
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1284] ...uvc_scan_streaming() rc=0
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1041] ...uvc_parse_vc_header() rc=0
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1083] uvc_parse_vc_input_terminal()...
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1083] ...uvc_parse_vc_input_terminal() rc=0
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1156] uvc_parse_vc_processing_unit()...
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1156] ...uvc_parse_vc_processing_unit() rc=0
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:986] ...uvc_scan_control() rc=0
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:386] ...uvc_get_device_info() rc=0
2025-01-31 13:47:12.903 198-541 APM_AudioPolicyManager pid-198 D setDeviceConnectionState() could not find HW module for device 00000800
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:326] claiming control interface 0
2025-01-31 13:47:12.903 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:771] uvc_device_handle::claimInterface(idx=0)...
2025-01-31 13:47:12.904 1610-1878 UvcDevice com.qualcomm.ftcrobotcontroller D claimInterface(0)
2025-01-31 13:47:12.904 391-539 AudioService system_process E not connecting device 0x800 due to command error 1
2025-01-31 13:47:12.907 391-495 Looper system_process E Error adding epoll events for fd 180 while rebuilding epoll set: Bad file descriptor
2025-01-31 13:47:12.908 391-519 EventHub system_process I Removing device UVC Camera (046d:0825) due to epoll hang-up event.
2025-01-31 13:47:12.908 391-519 EventHub system_process I Removed device: path=/dev/input/event2 name=UVC Camera (046d:0825) id=6 fd=178 classes=0x80000401
2025-01-31 13:47:12.979 391-519 InputReader system_process I Device removed: id=6, name='UVC Camera (046d:0825)', sources=0x00002103
2025-01-31 13:47:12.979 1610-1878 UvcDevice com.qualcomm.ftcrobotcontroller D claimInterface(0) succeeded
2025-01-31 13:47:12.979 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:784] claimInterface(0) succeeded
2025-01-31 13:47:12.979 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:771] ...uvc_device_handle::claimInterface() rc=0
2025-01-31 13:47:12.979 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:279] ...uvc_open() rc=0
2025-01-31 13:47:12.979 1610-1878 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeOpenDeviceHandle: ...exit
2025-01-31 13:47:12.979 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:233] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeOpenDeviceHandle()
2025-01-31 13:47:12.979 391-519 EventHub system_process I Removing device '/dev/input/event2' due to inotify event
2025-01-31 13:47:12.980 1610-1878 UvcDeviceHandle com.qualcomm.ftcrobotcontroller V construct(pointer=0xc97462c0)
2025-01-31 13:47:12.982 1610-1878 CameraImpl com.qualcomm.ftcrobotcontroller V construct(0x09cdbe7f)
2025-01-31 13:47:12.983 1610-1878 UsbResilia...teCallback com.qualcomm.ftcrobotcontroller D onOpened() camera=CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005)))...
2025-01-31 13:47:12.985 1610-1878 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D changeDelegatedCamera(null->CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005))))...
2025-01-31 13:47:12.986 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D isModeSupported(Auto)...
2025-01-31 13:47:12.986 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(Auto): false
2025-01-31 13:47:12.986 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D isModeSupported(ContinuousAuto)...
2025-01-31 13:47:12.987 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(ContinuousAuto): false
2025-01-31 13:47:12.988 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D isModeSupported(Macro)...
2025-01-31 13:47:12.988 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(Macro): false
2025-01-31 13:47:12.989 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D isModeSupported(Infinity)...
2025-01-31 13:47:12.989 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(Infinity): false
2025-01-31 13:47:12.990 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D isModeSupported(Fixed)...
2025-01-31 13:47:12.990 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(Fixed): true
2025-01-31 13:47:12.991 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D isFocusLengthSupported...
2025-01-31 13:47:12.991 1610-1878 UvcApiFocusControl com.qualcomm.ftcrobotcontroller D ...isFocusLengthSupported: false
2025-01-31 13:47:12.996 1610-1878 CachingExposureControl com.qualcomm.ftcrobotcontroller D onCameraChanged(null->CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005))))...
2025-01-31 13:47:12.996 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D isModeSupported(Auto)...
2025-01-31 13:47:12.998 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(Auto): false
2025-01-31 13:47:12.999 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D isModeSupported(ContinuousAuto)...
2025-01-31 13:47:13.001 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(ContinuousAuto): false
2025-01-31 13:47:13.002 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D isModeSupported(Manual)...
2025-01-31 13:47:13.005 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(Manual): true
2025-01-31 13:47:13.005 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D isModeSupported(ShutterPriority)...
2025-01-31 13:47:13.008 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(ShutterPriority): false
2025-01-31 13:47:13.009 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D isModeSupported(AperturePriority)...
2025-01-31 13:47:13.011 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...isModeSupported(AperturePriority): true
2025-01-31 13:47:13.012 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D isExposureSupported()...
2025-01-31 13:47:13.012 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...isExposureSupported(): true
2025-01-31 13:47:13.012 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D getMinExposure(NANOSECONDS)...
2025-01-31 13:47:13.013 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:654] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMinExposure()...
2025-01-31 13:47:13.015 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:654] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMinExposure()
2025-01-31 13:47:13.015 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...getMinExposure(NANOSECONDS): 100000
2025-01-31 13:47:13.016 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D getMaxExposure(NANOSECONDS)...
2025-01-31 13:47:13.018 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...getMaxExposure(NANOSECONDS): 1000000000
2025-01-31 13:47:13.019 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D getMode()...
2025-01-31 13:47:13.019 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:502] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetExposureModeId()...
2025-01-31 13:47:13.021 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:502] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetExposureModeId()
2025-01-31 13:47:13.022 1610-1878 UvcApiExposureControl com.qualcomm.ftcrobotcontroller D ...getMode(): AperturePriority
2025-01-31 13:47:13.025 1610-1878 CachingExposureControl com.qualcomm.ftcrobotcontroller D ...onCameraChanged(null->CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005))))
2025-01-31 13:47:13.025 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D getMinZoom()...
2025-01-31 13:47:13.027 1610-1878 UvcDeviceHandle com.qualcomm.ftcrobotcontroller E [jni_devicehandle.cpp:218] Failed to get min zoom : error -9
2025-01-31 13:47:13.027 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D ...getMinZoom(): 0
2025-01-31 13:47:13.028 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D getMaxZoom()...
2025-01-31 13:47:13.030 1610-1878 UvcDeviceHandle com.qualcomm.ftcrobotcontroller E [jni_devicehandle.cpp:241] Failed to get max zoom : error -9
2025-01-31 13:47:13.030 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D ...getMaxZoom(): 0
2025-01-31 13:47:13.030 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D getMinPanTilt()...
2025-01-31 13:47:13.032 1610-1878 UvcDeviceHandle com.qualcomm.ftcrobotcontroller E [jni_devicehandle.cpp:364] Failed to get min pan/tilt : error -9
2025-01-31 13:47:13.032 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D ...getMinPanTilt(): org.firstinspires.ftc.robotcore.external.hardware.camera.controls.PtzControl$PanTiltHolder@1defe4c
2025-01-31 13:47:13.033 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D getMaxPanTilt()...
2025-01-31 13:47:13.034 1610-1878 UvcDeviceHandle com.qualcomm.ftcrobotcontroller E [jni_devicehandle.cpp:332] Failed to get max pan/tilt : error -9
2025-01-31 13:47:13.035 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D ...getMaxPanTilt(): org.firstinspires.ftc.robotcore.external.hardware.camera.controls.PtzControl$PanTiltHolder@8359e95
2025-01-31 13:47:13.035 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D getZoom()...
2025-01-31 13:47:13.036 1610-1878 UvcDeviceHandle com.qualcomm.ftcrobotcontroller E [jni_devicehandle.cpp:195] Failed to get zoom : error -9
2025-01-31 13:47:13.037 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D ...getZoom(): 0
2025-01-31 13:47:13.037 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D getPanTilt()...
2025-01-31 13:47:13.038 1610-1878 UvcDeviceHandle com.qualcomm.ftcrobotcontroller E [jni_devicehandle.cpp:300] Failed to get pan/tilt : error -9
2025-01-31 13:47:13.039 1610-1878 UvcApiPtzControl com.qualcomm.ftcrobotcontroller D ...getPanTilt(): org.firstinspires.ftc.robotcore.external.hardware.camera.controls.PtzControl$PanTiltHolder@1641baa
2025-01-31 13:47:13.040 1610-1878 UvcApiGainControl com.qualcomm.ftcrobotcontroller D getMinGain()...
2025-01-31 13:47:13.040 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:903] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMinGain()...
2025-01-31 13:47:13.042 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:903] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMinGain()
2025-01-31 13:47:13.042 1610-1878 UvcApiGainControl com.qualcomm.ftcrobotcontroller D ...getMinGain(): 0
2025-01-31 13:47:13.043 1610-1878 UvcApiGainControl com.qualcomm.ftcrobotcontroller D getMaxGain()...
2025-01-31 13:47:13.043 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:926] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMaxGain()...
2025-01-31 13:47:13.045 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:926] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMaxGain()
2025-01-31 13:47:13.046 1610-1878 UvcApiGainControl com.qualcomm.ftcrobotcontroller D ...getMaxGain(): 255
2025-01-31 13:47:13.046 1610-1878 UvcApiGainControl com.qualcomm.ftcrobotcontroller D getGain()...
2025-01-31 13:47:13.046 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:949] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetGain()...
2025-01-31 13:47:13.048 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:949] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetGain()
2025-01-31 13:47:13.048 1610-1878 UvcApiGainControl com.qualcomm.ftcrobotcontroller D ...getGain(): 64
2025-01-31 13:47:13.049 1610-1878 UvcApiWhit...nceControl com.qualcomm.ftcrobotcontroller D getMinWhiteBalanceTemperature()...
2025-01-31 13:47:13.049 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:735] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMinWhiteBalanceTemperature()...
2025-01-31 13:47:13.051 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:735] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMinWhiteBalanceTemperature()
2025-01-31 13:47:13.051 1610-1878 UvcApiWhit...nceControl com.qualcomm.ftcrobotcontroller D ...getMinWhiteBalanceTemperature(): 0
2025-01-31 13:47:13.052 1610-1878 UvcApiWhit...nceControl com.qualcomm.ftcrobotcontroller D getMaxWhiteBalanceTemperature()...
2025-01-31 13:47:13.052 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:757] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMaxWhiteBalanceTemperature()...
2025-01-31 13:47:13.054 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:757] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetMaxWhiteBalanceTemperature()
2025-01-31 13:47:13.055 1610-1878 UvcApiWhit...nceControl com.qualcomm.ftcrobotcontroller D ...getMaxWhiteBalanceTemperature(): 10000
2025-01-31 13:47:13.055 1610-1878 UvcApiWhit...nceControl com.qualcomm.ftcrobotcontroller D getWhiteBalanceTemperature()...
2025-01-31 13:47:13.055 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:802] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetWhiteBalanceTemperature()...
2025-01-31 13:47:13.057 1610-1878 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:802] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeGetWhiteBalanceTemperature()
2025-01-31 13:47:13.057 1610-1878 UvcApiWhit...nceControl com.qualcomm.ftcrobotcontroller D ...getWhiteBalanceTemperature(): 4000
2025-01-31 13:47:13.057 1610-1878 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D ...changeDelegatedCamera(null->CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005))))
2025-01-31 13:47:13.058 1610-1878 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D openSelfAndReport()...
2025-01-31 13:47:13.059 1610-1878 CameraImpl com.qualcomm.ftcrobotcontroller V construct(0x0789c39b)
2025-01-31 13:47:13.060 1610-1878 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0ab94c9e: default threadpool) added id=148 TID=0 count=2
2025-01-31 13:47:13.060 1610-1878 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D ...openSelfAndReport()
2025-01-31 13:47:13.061 1610-1878 UsbResilia...teCallback com.qualcomm.ftcrobotcontroller D ...onOpened() camera=CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005)))
2025-01-31 13:47:13.061 1610-1878 UvcDevice com.qualcomm.ftcrobotcontroller D ...open()
2025-01-31 13:47:13.061 1610-1878 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D ...openAssumingPermission()
2025-01-31 13:47:13.061 1610-1878 CameraManager com.qualcomm.ftcrobotcontroller D ...asyncOpenWebcam(Webcam(989ECEC0))
2025-01-31 13:47:13.061 1610-1879 CameraManager com.qualcomm.ftcrobotcontroller D camera reports opened: CameraImpl(UsbResiliantWebcam(Webcam(989ECEC0)))
2025-01-31 13:47:13.061 1610-1878 CameraManager com.qualcomm.ftcrobotcontroller D ...asyncOpenCamera(Webcam(989ECEC0))
2025-01-31 13:47:13.062 1610-1879 Continuati...nchronizer com.qualcomm.ftcrobotcontroller D finish("camera reports opened: Webcam(989ECEC0)": CameraImpl(UsbResiliantWebcam(Webcam(989ECEC0))))...
2025-01-31 13:47:13.062 1610-1877 Continuati...nchronizer com.qualcomm.ftcrobotcontroller D ...awaiting(camera open)
2025-01-31 13:47:13.062 1610-1879 Continuati...nchronizer com.qualcomm.ftcrobotcontroller D ...finish("camera reports opened: Webcam(989ECEC0)": CameraImpl(UsbResiliantWebcam(Webcam(989ECEC0))))
2025-01-31 13:47:13.063 1610-1877 CameraManager com.qualcomm.ftcrobotcontroller D ...doOpenCamera()
2025-01-31 13:47:13.068 1610-1877 UvcContext com.qualcomm.ftcrobotcontroller D found webcam: usbPath=/dev/bus/usb/003/005 vid=0x46D pid=0x825 serial=989ECEC0 product=null
2025-01-31 13:47:13.068 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_context.cpp:120] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice()...
2025-01-31 13:47:13.068 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice: enter...
2025-01-31 13:47:13.070 1610-1877 libusb com.qualcomm.ftcrobotcontroller D [410.230808] [00000755] libusb: debug [op_create] op_create: szUsbPath=/dev/bus/usb/003/005 szSysfsDir=3-1.4
2025-01-31 13:47:13.070 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:613] uvc_create_uvc_device()...
2025-01-31 13:47:13.071 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:347] uvc_device::uvc_device()...
2025-01-31 13:47:13.071 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:376] acquired vid=1133 & pid=2085
2025-01-31 13:47:13.071 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:347] ...uvc_device::uvc_device()
2025-01-31 13:47:13.071 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:613] ...uvc_create_uvc_device() rc=0
2025-01-31 13:47:13.071 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice: ...exit
2025-01-31 13:47:13.071 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_context.cpp:120] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcContext_nativeCreateUvcDevice()
2025-01-31 13:47:13.071 1610-1877 UvcDevice com.qualcomm.ftcrobotcontroller V construct(pointer=0xca34fd70|null)
2025-01-31 13:47:13.071 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:108] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetLibUsbDevice()...
2025-01-31 13:47:13.072 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:108] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetLibUsbDevice()
2025-01-31 13:47:13.072 1610-1877 LibUsbDevice com.qualcomm.ftcrobotcontroller V construct(pointer=0xcdab21c0)
2025-01-31 13:47:13.072 1610-1877 UvcContext com.qualcomm.ftcrobotcontroller D usb device is *not* UVC compatible, /dev/bus/usb/003/003
2025-01-31 13:47:13.073 1610-1877 UvcApiCame...icsBuilder com.qualcomm.ftcrobotcontroller V construct(0x091e8f11)
2025-01-31 13:47:13.073 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:289] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetDeviceInfo()...
2025-01-31 13:47:13.073 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetDeviceInfo: enter...
2025-01-31 13:47:13.073 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:386] uvc_get_device_info()...
2025-01-31 13:47:13.073 1610-1877 libusb com.qualcomm.ftcrobotcontroller D [410.233895] [00000755] libusb: debug [op_get_config_descriptor] op_get_config_descriptor: config_index=0
2025-01-31 13:47:13.073 1610-1877 libusb com.qualcomm.ftcrobotcontroller D [410.233995] [00000755] libusb: debug [op_get_config_descriptor] op_get_config_descriptor: config_index=0
2025-01-31 13:47:13.074 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:986] uvc_scan_control()...
2025-01-31 13:47:13.074 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1041] uvc_parse_vc_header()...
2025-01-31 13:47:13.074 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1284] uvc_scan_streaming()...
2025-01-31 13:47:13.074 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1340] uvc_parse_vs_input_header()...
2025-01-31 13:47:13.074 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1340] ...uvc_parse_vs_input_header() rc=0
2025-01-31 13:47:13.074 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1389] uvc_parse_vs_format_uncompressed()...
2025-01-31 13:47:13.074 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1389] ...uvc_parse_vs_format_uncompressed() rc=0
2025-01-31 13:47:13.075 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 13 UVC_VS_COLORFORMAT
2025-01-31 13:47:13.075 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1449] uvc_parse_vs_format_mjpeg()...
2025-01-31 13:47:13.075 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1449] ...uvc_parse_vs_format_mjpeg() rc=0
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V [device.cpp:1630] unsupported descriptor subtype: 13 UVC_VS_COLORFORMAT
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1284] ...uvc_scan_streaming() rc=0
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1041] ...uvc_parse_vc_header() rc=0
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1083] uvc_parse_vc_input_terminal()...
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1083] ...uvc_parse_vc_input_terminal() rc=0
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1156] uvc_parse_vc_processing_unit()...
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:1156] ...uvc_parse_vc_processing_unit() rc=0
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:986] ...uvc_scan_control() rc=0
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:386] ...uvc_get_device_info() rc=0
2025-01-31 13:47:13.076 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetDeviceInfo: ...exit
2025-01-31 13:47:13.077 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:289] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeGetDeviceInfo()
2025-01-31 13:47:13.077 1610-1877 UvcDeviceInfo com.qualcomm.ftcrobotcontroller V construct(pointer=0xe78c7960)
2025-01-31 13:47:13.078 1610-1877 UvcStreamingInterface com.qualcomm.ftcrobotcontroller V construct(pointer=0xcba6ff20)
2025-01-31 13:47:13.152 1610-1877 UvcStreamingInterface com.qualcomm.ftcrobotcontroller V destroy(pointer=0xcba6ff20)
2025-01-31 13:47:13.152 1610-1877 UvcDeviceInfo com.qualcomm.ftcrobotcontroller V destroy(pointer=0xe78c7960)
2025-01-31 13:47:13.152 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_deviceinfo.cpp:63] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceInfo_nativeFreeDeviceInfo()...
2025-01-31 13:47:13.152 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceInfo_nativeFreeDeviceInfo: enter...
2025-01-31 13:47:13.152 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:433] uvc_free_device_info()...
2025-01-31 13:47:13.152 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:433] ...uvc_free_device_info()
2025-01-31 13:47:13.152 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceInfo_nativeFreeDeviceInfo: ...exit
2025-01-31 13:47:13.152 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_deviceinfo.cpp:63] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceInfo_nativeFreeDeviceInfo()
2025-01-31 13:47:13.153 1610-1877 UvcApiCame...icsBuilder com.qualcomm.ftcrobotcontroller V destroy(hash=0x091e8f11)
2025-01-31 13:47:13.153 1610-1877 UvcDevice com.qualcomm.ftcrobotcontroller V destroy(pointer=0xca34fd70|/dev/bus/usb/003/005)
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:126] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice()...
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice: enter...
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:882] uvc_unref_device()...
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:882] ...uvc_unref_device()
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice: ...exit
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:126] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice()
2025-01-31 13:47:13.153 1610-1877 LibUsbDevice com.qualcomm.ftcrobotcontroller V destroy(pointer=0xcdab21c0)
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_libusb_device.cpp:64] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_LibUsbDevice_nativeReleaseRefDevice()...
2025-01-31 13:47:13.153 1610-1877 Uvc com.qualcomm.ftcrobotcontroller D [jni_libusb_device.cpp:64] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_LibUsbDevice_nativeReleaseRefDevice()
2025-01-31 13:47:13.155 1610-1877 CameraCali...ionManager com.qualcomm.ftcrobotcontroller D CameraCalibration(VendorProductCalibrationIdentity(vid=0x046d,pid=0x0825) 640x480 f=822.317,822.317)
2025-01-31 13:47:13.156 1610-1877 CameraCali...ionManager com.qualcomm.ftcrobotcontroller D getCameraCalibration(): CameraCalibration(VendorProductCalibrationIdentity(vid=0x046d,pid=0x0825) 640x480 f=822.317,822.317)
**2025-01-31 13:47:13.156 1610-1877 OpenCvCamera com.qualcomm.ftcrobotcontroller E User code threw an uncaught exception
2025-01-31 13:47:13.158 1610-1877 OpenCvCamera com.qualcomm.ftcrobotcontroller E java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Enum.ordinal()' on a null object reference
2025-01-31 13:47:13.159 1610-1877 OpenCvCamera com.qualcomm.ftcrobotcontroller E at org.openftc.easyopencv.OpenCvWebcamImpl.streamFormat2ImageFormat(OpenCvWebcamImpl.java:266)
2025-01-31 13:47:13.159 1610-1877 OpenCvCamera com.qualcomm.ftcrobotcontroller E at org.openftc.easyopencv.OpenCvWebcamImpl.startStreaming(OpenCvWebcamImpl.java:277)
2025-01-31 13:47:13.160 1610-1877 OpenCvCamera com.qualcomm.ftcrobotcontroller E at org.firstinspires.ftc.vision.VisionPortalImpl$1.onOpened(VisionPortalImpl.java:212)
2025-01-31 13:47:13.160 1610-1877 OpenCvCamera com.qualcomm.ftcrobotcontroller E at org.openftc.easyopencv.OpenCvWebcamImpl$1.run(OpenCvWebcamImpl.java:185)
2025-01-31 13:47:13.160 1610-1877 OpenCvCamera com.qualcomm.ftcrobotcontroller E at java.lang.Thread.run(Thread.java:761)**
2025-01-31 13:47:13.164 1610-1876 RobotCore com.qualcomm.ftcrobotcontroller D User runOpModeMethod exited
2025-01-31 13:47:13.164 1610-1876 RobotCore com.qualcomm.ftcrobotcontroller V thread: ...terminating 'OpModeThread'
2025-01-31 13:47:13.165 1610-1880 CameraImpl com.qualcomm.ftcrobotcontroller V destroy(hash=0x0789c39b)
2025-01-31 13:47:13.165 1610-1876 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0ad5e1c6: OpModeExecutor) removed id=145 TID=1876 count=1
2025-01-31 13:47:13.165 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D CameraImpl.destructor()...
2025-01-31 13:47:13.165 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D externalDestructor()...
2025-01-31 13:47:13.166 1610-1880 CameraImpl com.qualcomm.ftcrobotcontroller V destroy(hash=0x09cdbe7f)
2025-01-31 13:47:13.166 1610-1879 CameraManager com.qualcomm.ftcrobotcontroller D camera reports closed: CameraImpl(UsbResiliantWebcam(Webcam(989ECEC0)))
2025-01-31 13:47:13.166 1610-1880 UvcDeviceHandle com.qualcomm.ftcrobotcontroller D CameraImpl.destructor()...
2025-01-31 13:47:13.167 1610-1880 UvcDeviceHandle com.qualcomm.ftcrobotcontroller D externalDestructor()...
2025-01-31 13:47:13.167 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D changeDelegatedCamera(CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005)))->null)...
2025-01-31 13:47:13.168 1610-1880 CachingExposureControl com.qualcomm.ftcrobotcontroller D onCameraChanged(CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005)))->null)...
2025-01-31 13:47:13.168 1610-1880 CachingExposureControl com.qualcomm.ftcrobotcontroller D ...onCameraChanged(CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005)))->null)
2025-01-31 13:47:13.170 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D ...changeDelegatedCamera(CameraImpl(UvcDeviceHandle(pointer=0xc97462c0|UvcDevice(/dev/bus/usb/003/005)))->null)
2025-01-31 13:47:13.170 1610-1880 UvcDeviceHandle com.qualcomm.ftcrobotcontroller D ...externalDestructor()
2025-01-31 13:47:13.170 1610-1880 UvcDeviceHandle com.qualcomm.ftcrobotcontroller V destroy(pointer=0xc97462c0)
2025-01-31 13:47:13.171 1610-1880 UvcDeviceHandle com.qualcomm.ftcrobotcontroller D destructor...
2025-01-31 13:47:13.171 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:86] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeReleaseRefDeviceHandle()...
2025-01-31 13:47:13.171 1610-1880 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeReleaseRefDeviceHandle: enter...
2025-01-31 13:47:13.171 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:873] uvc_device_handle::~uvc_device_handle()...
2025-01-31 13:47:13.171 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:841] uvc_device_handle::deconstruct()...
2025-01-31 13:47:13.171 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:752] uvc_device_handle::stop()...
2025-01-31 13:47:13.171 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:752] ...uvc_device_handle::stop()
2025-01-31 13:47:13.171 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:794] uvc_device_handle::releaseInterface()...
2025-01-31 13:47:13.171 1610-1880 UvcDevice com.qualcomm.ftcrobotcontroller D releaseInterface(1)
2025-01-31 13:47:13.171 1610-1880 UvcDevice com.qualcomm.ftcrobotcontroller E releaseInterface(1) failed
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:794] ...uvc_device_handle::releaseInterface() rc=-1
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:866] uvc_device_handle::close()...
2025-01-31 13:47:13.172 1610-1880 libusb com.qualcomm.ftcrobotcontroller E [410.332433] [00000758] libusb: error [do_close] Device handle closed while transfer was still being processed, but the device is still connected as far as we know
2025-01-31 13:47:13.172 1610-1880 libusb com.qualcomm.ftcrobotcontroller E [410.332506] [00000758] libusb: error [do_close] A cancellation hasn't even been scheduled on the transfer for which the device is closing
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:866] ...uvc_device_handle::close()
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:841] ...uvc_device_handle::deconstruct()
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:433] uvc_free_device_info()...
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:433] ...uvc_free_device_info()
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [libuvc/libuvc_internal.h:873] ...uvc_device_handle::~uvc_device_handle()
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeReleaseRefDeviceHandle: ...exit
2025-01-31 13:47:13.172 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [jni_devicehandle.cpp:86] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDeviceHandle_nativeReleaseRefDeviceHandle()
2025-01-31 13:47:13.173 1610-1880 UvcDevice com.qualcomm.ftcrobotcontroller V destroy(pointer=0xca34fa28|/dev/bus/usb/003/005)
2025-01-31 13:47:13.173 1610-1880 UsbDeviceConnectionJNI com.qualcomm.ftcrobotcontroller D close
2025-01-31 13:47:13.173 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:126] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice()...
2025-01-31 13:47:13.173 1610-1880 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice: enter...
2025-01-31 13:47:13.173 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:882] uvc_unref_device()...
2025-01-31 13:47:13.175 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [device.cpp:882] ...uvc_unref_device()
2025-01-31 13:47:13.175 1610-1880 Uvc com.qualcomm.ftcrobotcontroller V API: Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice: ...exit
2025-01-31 13:47:13.175 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [jni_device.cpp:126] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_UvcDevice_nativeReleaseRefDevice()
2025-01-31 13:47:13.176 1610-1880 LibUsbDevice com.qualcomm.ftcrobotcontroller V destroy(pointer=0xcdab21c0)
2025-01-31 13:47:13.176 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [jni_libusb_device.cpp:64] Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_LibUsbDevice_nativeReleaseRefDevice()...
2025-01-31 13:47:13.176 1610-1880 Uvc com.qualcomm.ftcrobotcontroller D [jni_libusb_device.cpp:64] ...Java_org_firstinspires_ftc_robotcore_internal_camera_libuvc_nativeobject_LibUsbDevice_nativeReleaseRefDevice()
2025-01-31 13:47:13.176 1610-1880 UvcDeviceHandle com.qualcomm.ftcrobotcontroller D ...destructor
2025-01-31 13:47:13.176 1610-1880 UvcDeviceHandle com.qualcomm.ftcrobotcontroller D ...CameraImpl.destructor()
2025-01-31 13:47:13.176 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D ...externalDestructor()
2025-01-31 13:47:13.177 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller V destroy(hash=0x0d0bfdd9)
2025-01-31 13:47:13.177 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D destructor()...
2025-01-31 13:47:13.177 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D ...destructor()
2025-01-31 13:47:13.177 1610-1880 UsbResiliantWebcam com.qualcomm.ftcrobotcontroller D ...CameraImpl.destructor()
2025-01-31 13:47:13.178 1610-1860 RobotCore com.qualcomm.ftcrobotcontroller I Attempting to switch to OpMode $Stop$Robot$
2025-01-31 13:47:13.180 1610-1860 RobotCore com.qualcomm.ftcrobotcontroller I ******************** STOP - OPMODE /storage/emulated/0/FIRST/matchlogs/Match-0-Concept:_AprilTag.txt ********************
2025-01-31 13:47:13.185 1610-1860 HardwareMap com.qualcomm.ftcrobotcontroller D Clearing which device instances have been retrieved
2025-01-31 13:47:13.185 1610-1881 RobotCore com.qualcomm.ftcrobotcontroller I saving match logcat to /storage/emulated/0/FIRST/matchlogs/Match-0-Concept:_AprilTag.txt
2025-01-31 13:47:13.185 1610-1881 RobotCore com.qualcomm.ftcrobotcontroller I logging command line: exec logcat -d -T '1-31 13:47:12.000' -f '/storage/emulated/0/FIRST/matchlogs/Match-0-Concept:_AprilTag.txt' -n4 -v threadtime UsbRequestJNI:S UsbRequest:S art:W ThreadPool:W System:W ExtendedExtractor:W OMXClient:W MediaPlayer:W dalvikvm:W *:V
2025-01-31 13:47:13.187 1610-1860 ThreadPool com.qualcomm.ftcrobotcontroller V container(0x0e36fe77: OpModeExecutor) added id=151 TID=0 count=1
2025-01-31 13:47:13.190 1610-1883 RobotCore com.qualcomm.ftcrobotcontroller V thread: 'OpModeThread' starting...
2025-01-31 13:47:13.191 1610-1724 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_SHOW_STACKTRACE(5811), attempt: 0
2025-01-31 13:47:13.191 1610-1724 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_STREAM_CHANGE(5813), attempt: 0
2025-01-31 13:47:13.192 1610-1724 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_NOTIFY_INIT_OP_MODE(5818), attempt: 0
2025-01-31 13:47:13.194 1610-1724 Robocol com.qualcomm.ftcrobotcontroller V sending CMD_NOTIFY_RUN_OP_MODE(5819), attempt: 0
2025-01-31 13:47:13.219 1882-1882 sh pid-1882 I type=1400 audit(0.0:283): avc: denied { read } for name="/" dev="rootfs" ino=1 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:rootfs:s0 tclass=dir permissive=1
2025-01-31 13:47:13.219 1882-1882 sh pid-1882 I type=1400 audit(0.0:284): avc: denied { open } for path="/" dev="rootfs" ino=1 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:rootfs:s0 tclass=dir permissive=1
2025-01-31 13:47:13.268 1610-1881 RobotCore com.qualcomm.ftcrobotcontroller I Done running exec logcat -d -T '1-31 13:47:12.000' -f '/storage/emulated/0/FIRST/matchlogs/Match-0-Concept:_AprilTag.txt' -n4 -v threadtime UsbRequestJNI:S UsbRequest:S art:W ThreadPool:W System:W ExtendedExtractor:W OMXClient:W MediaPlayer:W dalvikvm:W *:V
2025-01-31 13:47:13.268 1610-1881 RobotCore com.qualcomm.ftcrobotcontroller I exiting match logcat for /storage/emulated/0/FIRST/matchlogs/Match-0-Concept:_AprilTag.txt
2025-01-31 13:47:15.625 801-801 lvjinhua android.process.media D Failed while trying resolve alarm filter file, not exists
2025-01-31 13:47:17.734 1610-1621 art com.qualcomm.ftcrobotcontroller I Background partial concurrent mark sweep GC freed 152894(5MB) AllocSpace objects, 77(5MB) LOS objects, 40% free, 16MB/27MB, paused 2.678ms total 116.288ms
Ooops, looks like I forgot to bump some dependency versions in the gradle script for Extracted-RC when it was updated to 10.0.
Can you edit this dependency block to have the following versions?
api 'org.openftc:easyopencv:1.7.3'
api 'org.openftc:apriltag:2.1.0'
- After updating those depenencies, Extracted-RC built and ran ConceptAprilTag successfully with a known-to-function Logitech webcam.
- Then switched to the Arducam on the 2.0 port and ConceptAprilTag also ran successfully.
- Then modified the AvoidLibUsbResetDevice case in hasFeature() to always return true (for now) and the opmode ran successfully again.
- Notably: "[device.cpp:291] libusb_reset_device() not called" was printed in the log.
- Moved the Arducam over to the 3.0 port and the opMode.......... .............................................................................................Worked!
You're truly a team saver Windwoes! Much appreciation for your help.
We could use a couple more hints:
(1) We were not quite able to decipher the way the VID and PID are being used in libuvc. We see the 16 bit shifts, but we are a bit confused because the existing Arducam you had support for only had a 3 byte VID (0xC45) while most of the others have 4 bytes. We can report that the log reports this for our Arducam:
"found webcam: usbPath=/dev/bus/usb/001/002 vid=0x1BCF pid=0x284C serial=YL20230518V0 product=Arducam 5MP Camera Module".
Can you give us a hint on how to structure the AvoidLibUsbResetDevice case properly?
(2) We think the way to integrate this change into our robot build is to add a "libs" folder to our project and move the generated "~\Extracted-RC\RobotCore\build\outputs\aar\RobotCore-debug.aar" file from Extracted-RC to that new libs folder. Then we need to add this to the repositories block in build.dependencies.gradle:
flatDir {
dirs 'libs'
}
And then replace this line in the implementation block
implementation 'org.firstinspires.ftc:RobotCore:10.1.0'
With
implementation(name: 'RobotCore-debug', ext: 'aar')
Is that even remotely correct?
Thank you SO much!
(1) We were not quite able to decipher the way the VID and PID are being used in libuvc. We see the 16 bit shifts, but we are a bit confused because the existing Arducam you had support for only had a 3 byte VID (0xC45) while most of the others have 4 bytes. We can report that the log reports this for our Arducam: "found webcam: usbPath=/dev/bus/usb/001/002 vid=0x1BCF pid=0x284C serial=YL20230518V0 product=Arducam 5MP Camera Module". Can you give us a hint on how to structure the AvoidLibUsbResetDevice case properly?
The VID is still 4 bytes, but the leading 0 is just implied. 0x0C45 is the same thing as 0xC45, just like 0.5 is equivalent to .5. That being said it should probably be changed in the code to be 0x0C45 so that it's consistent with the others.
For structuring the case you'd just want to add your VID and PID to usbconstants.h and then add case like:
case makeVidPid(VENDOR_ID_ARDUCAM2, PRODUCT_ID_ARDUCAM_B0454):
(2) We think the way to integrate this change into our robot build is to ... Is that even remotely correct?
Yeah that's roughly the right idea, but you might have issues with the other libraries that have a transitive dependency on RobotCore. You might have to add a gradle exclude block to those to block them from still trying to pull RobotCore from maven.
However it may just be easier to copy-paste your TeamCode source files into Extracted-RC and use that as your primary repo.
The other question though is one of legality. In the past, the game manual expressly prohibited modifying the portions of the SDK which are packaged as binary .aar files, which is exactly what we are doing here. This year's game manual appears to be silent on this topic, so I'm not sure if it would be an issue or not.
Thanks for the heads up.
We are so close. We modified the uvc code as you suggested and tested and its all good. Now just a matter of incorporating that tweak into our build.
We tried adding the updated robotcore aar to our build but couldn't even get gradle to find it on a sync. We'll keep working on that.
We also tried incorporating our code (and a couple of additional library dependencies like Acme Dashboard) into our fork of Extracted-RC but that build failed with a cascade of duplicate java symbols like this:
Duplicate class com.google.gson.DefaultDateTypeAdapter found in modules jetified-RobotCore-8.2.0-runtime (org.firstinspires.ftc:RobotCore:8.2.0) and jetified-gson-2.8.0 (com.google.code.gson:gson:2.8.0)
Thoughts on that?
We also tried incorporating our code (and a couple of additional library dependencies like Acme Dashboard) into our fork of Extracted-RC but that build failed with a cascade of duplicate java symbols like this:
This smells very strongly of one or more library authors incorrectly using implementation or api for the RobotCore dependency, rather than compileOnly.
Note the following on the FTC Dash readme:
Ahh! That was probably the issue with our attempt to build inside of Extracted-RC. Thank you!
In the meantime, we thought we would try something really clever. So we set up a local maven repository on our build computer, used maven to "install" the updated version of the RobotCore aar file there with the same maven coordinates as the original version, then added a line to the repositories section above all the others that pointed to our local repository.
To our delight it built, with one small issue where, for some reason, the transitive dependency from RobotCore to threetenabp didn't register. Adding that dependency to our build.dependencies.gradle resulted in what we thought was a successful build. However, when we installed it on the ControlHub, things went south quickly. The RobotController app couldn't successfully initialize and we had to do a factory reset to get it back...as you said up front, quite the adventure!
We'll try it the way you suggested (from inside Extracted-RC) again with the exclusion you pointed out above. THX!
Some more good news! Those exclusions did the trick. Here is our modified build.gradle (TeamCode module) that pulls in the two external libraries we use (both built on the FTC SDK):
repositories {
mavenCentral()
google() // Needed for androidx
maven { url = 'https://maven.brott.dev/' }
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/'}
}
dependencies {
/*
* Other Modules
*/
implementation project(':FtcRobotController')
implementation project(':Hardware')
implementation project(':RobotCore')
implementation project(':FtcCommon')
implementation project(':Vision')
implementation('com.acmerobotics.dashboard:dashboard:0.4.15') {
exclude group: 'org.firstinspires.ftc'
}
implementation('com.w8wjb.ftc:ftc-neodriver:1.0-SNAPSHOT') {
exclude group: 'org.firstinspires.ftc'
}
implementation 'org.firstinspires.ftc:gameAssets-FreightFrenzy:1.0.0'
}
The only other tweak needed was a bump in the minSdkVersion from 23 to 24 since our NeoDriver library declared a minSDKVersion of 24. We made that change in build.common.gradle.
We've built the RobotController with our code and robot config files on several machines, successfully installed it on the Control Hub, ran our test code for calibrating our computer vision (with the arduCam plugged into the USB 3.0 port), and all seems well. If there are other issues with the build, perhaps they will manifest as we run through the rest of our testing.
We think this completes our adventure for now. Thank you again for helping us out with this, it was very educational and will put our minds at ease regarding wifi disconnects.
If support for the ArduCam B0454 were to make it into the next minor release of the SDK, or even a team configuration of some sort to disable the USB reset on the webcam (since that seems to be a common issue), that would be really great. We think the B0454 could be an interesting solution for many teams. It's relatively inexpensive ($32 on Amazon), has a much wider field of view than anything comparable, and has a very small form factor that can be incorporated into many builds. It led us to learn quite a bit about lens and perspective distortion and how those can be fixed in OpenCV as well.
THANK YOU!
Happy to help