Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UVC Webcam functional on Control Hub USB 2.0 port but fails to initialize on 3.0 port #1428

Open
ftc19743 opened this issue Jan 30, 2025 · 18 comments

Comments

@ftc19743
Copy link

ftc19743 commented Jan 30, 2025

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
@ftc19743
Copy link
Author

ftc19743 commented Jan 30, 2025

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.**

@Windwoes
Copy link
Member

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

@ftc19743
Copy link
Author

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!

@Windwoes
Copy link
Member

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.

@ftc19743
Copy link
Author

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.

@Windwoes
Copy link
Member

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.

@ftc19743
Copy link
Author

ftc19743 commented Jan 31, 2025

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?

@Windwoes
Copy link
Member

Let's start with just trying to run a sample vision OpMode from Extracted-RC and see if it fixes the issue.

@ftc19743
Copy link
Author

ftc19743 commented Jan 31, 2025

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

@Windwoes
Copy link
Member

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'

@ftc19743
Copy link
Author

ftc19743 commented Feb 1, 2025

  • 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!

@Windwoes
Copy link
Member

Windwoes commented Feb 1, 2025

(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.

@ftc19743
Copy link
Author

ftc19743 commented Feb 2, 2025

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?

@Windwoes
Copy link
Member

Windwoes commented Feb 2, 2025

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.

@Windwoes
Copy link
Member

Windwoes commented Feb 3, 2025

Note the following on the FTC Dash readme:

Image

@ftc19743
Copy link
Author

ftc19743 commented Feb 4, 2025

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!

@ftc19743
Copy link
Author

ftc19743 commented Feb 4, 2025

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!

@Windwoes
Copy link
Member

Windwoes commented Feb 4, 2025

Happy to help

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants