Shine Ultra - FreeBSD

Hardware info on main page.

local links

c1, c2,

History

2024-12-26: c1 - rust - the LinuxVideo crate has a few nice examples: info for video0

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example info /dev/video0
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/info /dev/video0`
card: ET13R
driver: uvcvideo
bus info: usb-/dev/usb-/dev/usb
all capabilities:    VIDEO_CAPTURE | EXT_PIX_FORMAT | META_CAPTURE | STREAMING | DEVICE_CAPS
avail. capabilities: VIDEO_CAPTURE | EXT_PIX_FORMAT | STREAMING
- supported formats for VIDEO_CAPTURE buffers:
  - [MJPG] Motion-JPEG
    COMPRESSED
    - [ 0] 1920x1080 @ 1/15, 1/10, 1/7
    - [ 1] 3840x2160 @ 1/15, 1/10, 1/7
    - [ 2] 2592x1944 @ 1/15, 1/10, 1/7
    - [ 3] 2048x1536 @ 1/15, 1/10, 1/7
    - [ 4] 1280x720 @ 1/15, 1/10, 1/7
    - [ 5] 1600x1200 @ 1/15, 1/10, 1/7
    - [ 6] 1024x768 @ 1/15, 1/10, 1/7
    - [ 7] 1024x576 @ 1/15, 1/10, 1/7
    - [ 8] 800x480 @ 1/15, 1/10, 1/7
    - [ 9] 640x480 @ 1/15, 1/10, 1/7
    - [10] 4160x3120 @ 1/15, 1/10, 1/7
    - [11] 1536x1152 @ 1/15, 1/10, 1/7
    - [12] 3672x2754 @ 1/15, 1/10, 1/7
- active format for VIDEO_CAPTURE buffer:
  VideoCapture(PixFormat { width: 4160, height: 3120, pixel_format: MJPG, field: NONE, bytesperline: 0, sizeimage: 3244800, colorspace: SMPTE240M, flags: (empty), enc: 8, quantization: DEFAULT, xfer_func: SMPTE240M })
- inputs:
  - [CAMERA] Camera 1
    audioset: 0b0
    tuner: 0
    std: (empty)
    capabilities: (empty)
- outputs:
- controls:
  - [CONTRAST] "Contrast", INTEGER [1-64, default=36]
  - [SATURATION] "Saturation", INTEGER [1-64, default=32]
  - [HUE] "Hue", INTEGER [1-64, default=32]
  - [GAMMA] "Gamma", INTEGER [1-64, default=32]
  - [POWER_LINE_FREQUENCY] "Power Line Frequency", MENU [0-2]
    0: Disabled
    1: 50 Hz
    2: 60 Hz
  - [SHARPNESS] "Sharpness", INTEGER [1-64, default=28]
  - [CAMERA_CLASS] "Camera Controls", CTRL_CLASS
    READ_ONLY | WRITE_ONLY
  - [PAN_ABSOLUTE] "Pan, Absolute", INTEGER [-576000-576000, step=3600, default=0]
  - [TILT_ABSOLUTE] "Tilt, Absolute", INTEGER [-576000-576000, step=3600, default=0]
  - [FOCUS_ABSOLUTE] "Focus, Absolute", INTEGER [0-127, default=0]
    INACTIVE
  - [FOCUS_AUTO] "Focus, Automatic Continuous", BOOLEAN
  - [ZOOM_ABSOLUTE] "Zoom, Absolute", INTEGER [100-1000, default=100]

info for video1

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example info /dev/video1
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/info /dev/video1`
card: ET13R
driver: uvcvideo
bus info: usb-/dev/usb-/dev/usb
all capabilities:    VIDEO_CAPTURE | EXT_PIX_FORMAT | META_CAPTURE | STREAMING | DEVICE_CAPS
avail. capabilities: EXT_PIX_FORMAT | META_CAPTURE | STREAMING
- supported formats for META_CAPTURE buffers:
  - [UVCH] UVC Payload Header Metadata
- active format for META_CAPTURE buffer:
  MetaCapture(MetaFormat { dataformat: UVCH, buffersize: 10240 })
- inputs:
- outputs:
- controls:

list doesn't work properly

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example list
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/list`
skipping device due to error: No such file or directory (os error 2)
skipping device due to error: No such file or directory (os error 2)

save-jpeg

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example save-jpeg
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/save-jpeg`
Error: usage: save-jpeg <device> <file> [<count>]

try it

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example save-jpeg /dev/video0 test-
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/save-jpeg /dev/video0 test-`
capabilities: VIDEO_CAPTURE | EXT_PIX_FORMAT | STREAMING
negotiated format: PixFormat { width: 4160, height: 3120, pixel_format: MJPG, field: NONE, bytesperline: 0, sizeimage: 3244800, colorspace: SMPTE240M, flags: (empty), enc: 8, quantization: DEFAULT, xfer_func: SMPTE240M }
stream started, waiting for data
wrote 1119164 bytes to test-.jpg (raw buffer size: 3244800 bytes)
tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ file test-.jpg 
test-.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 4160x3120, components 3

save-png

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example save-png
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/save-png`
Error: usage: save-png <device> <file> [<count>]

try it

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example save-png /dev/video0 test
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/save-png /dev/video0 test`
capabilities: VIDEO_CAPTURE | EXT_PIX_FORMAT | STREAMING
Error: save-png does not support any of the device's formats (device supports [MJPG])

ok, no support in scanner. Try uvc then

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example uvc
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/uvc`
Error: usage: uvc <device>
tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example uvc /dev/video0
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/uvc /dev/video0`
Error: device does not support `META_CAPTURE` capability
tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example uvc /dev/video1
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/uvc /dev/video1`
stream started, waiting for data
^C

interesting. how about uvc-xu?

tingo@kg-core1:~/personal/projects/2024/rust/webcam/LinuxVideo $ cargo run --example uvc-xu /dev/video0 0
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/examples/uvc-xu /dev/video0 0`
0x00: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x01: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x02: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x03: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x04: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x05: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x06: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x07: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x08: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x09: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x0a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x0b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x0c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x0d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x0e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x0f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x10: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x11: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x12: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x13: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x14: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x15: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x16: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x17: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x18: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x19: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x1a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x1b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x1c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x1d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x1e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x1f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x20: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x21: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x22: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x23: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x24: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x25: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x26: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x27: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x28: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x29: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x2a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x2b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x2c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x2d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x2e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x2f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x30: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x31: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x32: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x33: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x34: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x35: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x36: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x37: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x38: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x39: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x3a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x3b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x3c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x3d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x3e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x3f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x40: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x41: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x42: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x43: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x44: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x45: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x46: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x47: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x48: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x49: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x4a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x4b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x4c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x4d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x4e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x4f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x50: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x51: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x52: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x53: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x54: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x55: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x56: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x57: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x58: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x59: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x5a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x5b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x5c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x5d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x5e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x5f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x60: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x61: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x62: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x63: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x64: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x65: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x66: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x67: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x68: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x69: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x6a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x6b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x6c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x6d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x6e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x6f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x70: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x71: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x72: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x73: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x74: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x75: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x76: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x77: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x78: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x79: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x7a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x7b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x7c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x7d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x7e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x7f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x80: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x81: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x82: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x83: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x84: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x85: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x86: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x87: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x88: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x89: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x8a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x8b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x8c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x8d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x8e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x8f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x90: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x91: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x92: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x93: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x94: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x95: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x96: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x97: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x98: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x99: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x9a: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x9b: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x9c: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x9d: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x9e: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0x9f: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa0: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa1: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa2: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa3: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa4: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa5: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa6: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa7: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa8: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xa9: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xaa: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xab: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xac: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xad: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xae: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xaf: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb0: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb1: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb2: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb3: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb4: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb5: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb6: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb7: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb8: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xb9: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xba: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xbb: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xbc: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xbd: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xbe: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xbf: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc0: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc1: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc2: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc3: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc4: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc5: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc6: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc7: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc8: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xc9: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xca: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xcb: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xcc: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xcd: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xce: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xcf: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd0: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd1: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd2: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd3: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd4: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd5: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd6: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd7: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd8: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xd9: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xda: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xdb: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xdc: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xdd: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xde: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xdf: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe0: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe1: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe2: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe3: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe4: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe5: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe6: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe7: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe8: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xe9: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xea: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xeb: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xec: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xed: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xee: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xef: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf0: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf1: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf2: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf3: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf4: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf5: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf6: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf7: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf8: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xf9: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xfa: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xfb: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xfc: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xfd: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xfe: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })
0xff: Err(Os { code: 22, kind: InvalidInput, message: "Invalid argument" })

nope, doesn't work.

2024-12-26: c1 - rust - the kamera crate needs a few fixes oon FreeBSD: git status

tingo@kg-core1:~/personal/projects/2024/rust/webcam/kamera $ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   Cargo.toml
    modified:   src/camera.rs
    modified:   src/lib.rs

no changes added to commit (use "git add" and/or "git commit -a")

git diff

tingo@kg-core1:~/personal/projects/2024/rust/webcam/kamera $ git diff
diff --git a/Cargo.toml b/Cargo.toml
index 221ef68..30d4d7d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -32,7 +32,12 @@ windows = { version = "0.43", features = [
 ] }

 [target.'cfg(target_os="linux")'.dependencies]
-v4l = "0.14.0"
+#v4l = "0.14.0"
+v4l = { version = "0.14.0", path = "../libv4l-rs" }
+
+[target.'cfg(target_os="freebsd")'.dependencies]
+#v4l = "0.14.0"
+v4l = { version = "0.14.0", path = "../libv4l-rs" }

 [dev-dependencies]
 softbuffer = "0.3.0"
@@ -41,3 +46,4 @@ winit = "0.27.5"
 [dependencies]
 ffimage = "0.9.0"
 ffimage_yuv = "0.9.0"
+
diff --git a/src/camera.rs b/src/camera.rs
index 09e56e5..6efd8ba 100644
--- a/src/camera.rs
+++ b/src/camera.rs
@@ -7,6 +7,9 @@ use super::win_mf as backend;
 #[cfg(target_os = "linux")]
 use super::linux_v4l2 as backend;

+#[cfg(target_os = "freebsd")]
+use super::linux_v4l2 as backend;
+
 #[derive(Debug)]
 pub struct Camera {
     inner: backend::Camera,
diff --git a/src/lib.rs b/src/lib.rs
index a448519..e085408 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -9,3 +9,6 @@ pub(crate) mod win_mf;

 #[cfg(target_os = "linux")]
 pub(crate) mod linux_v4l2;
+
+#[cfg(target_os = "freebsd")]
+pub(crate) mod linux_v4l2;

2024-12-26: c1 - rust - this is useful

tingo@kg-core1:~/personal/projects/2024/rust/webcam/kamera $ rustc --print=cfg
debug_assertions
panic="unwind"
target_abi=""
target_arch="x86_64"
target_endian="little"
target_env=""
target_family="unix"
target_feature="fxsr"
target_feature="sse"
target_feature="sse2"
target_has_atomic="16"
target_has_atomic="32"
target_has_atomic="64"
target_has_atomic="8"
target_has_atomic="ptr"
target_os="freebsd"
target_pointer_width="64"
target_vendor="unknown"
unix

2024-12-26: c1 - using vlc works. Also from command line, like this:

$ cvlc v4l2:///dev/video0

for some reason, vlc complains when I try to open /dev/video1, it says "not a video capture device".

2024-12-26: c1 - rust - build wincam:

tingo@kg-core1:~/personal/projects/2024/rust/webcam/wincam $ cargo build
    Updating crates.io index
[..]
   Compiling serial_test v3.1.1
   Compiling image v0.25.2
   Compiling wincam v0.1.3 (/zs/tingo/personal/projects/2024/rust/webcam/wincam)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 3m 34s

try to run it

tingo@kg-core1:~/personal/projects/2024/rust/webcam/wincam $ cargo run
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.27s
     Running `target/debug/wincam`
[ WARN:0@0.047] global cap_gstreamer.cpp:1173 isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
^C

it works, and writes 'image.bmp' until the program is stopped.

2024-12-26: c1 - connecting the scanner. From /var/log/messages

Dec 26 14:36:08 kg-core1 kernel: ugen3.2: <vendor 0x1e4f ET13R> at usbus3
Dec 26 14:36:08 kg-core1 kernel: uaudio0 on uhub0
Dec 26 14:36:08 kg-core1 kernel: uaudio0: <CZUR USB HD MIC> on usbus3
Dec 26 14:36:08 kg-core1 kernel: uaudio0: No playback.
Dec 26 14:36:08 kg-core1 kernel: uaudio0: Record[0]: 48000 Hz, 2 ch, 16-bit S-LE PCM format, 2x8ms buffer.
Dec 26 14:36:08 kg-core1 kernel: uaudio0: No MIDI sequencer.
Dec 26 14:36:08 kg-core1 kernel: pcm4: <USB audio> on uaudio0
Dec 26 14:36:08 kg-core1 kernel: uaudio0: No HID volume keys found.
Dec 26 14:36:08 kg-core1 webcamd[17010]: Webcamd is already running for ugen3.2.0

since webcamd is running, lets check for video devices

root@kg-core1:~ # ll /dev/vid*
crw-rw----  1 webcamd  webcamd  0x1c2 Dec 26 14:36 /dev/video0
crw-rw----  1 webcamd  webcamd  0x1c3 Dec 26 14:36 /dev/video1

yes, two of them.

2024-12-26: c1 - now runs FreeBSD 13.3-release-p8

root@kg-core1:~ # freebsd-version -ku
13.3-RELEASE-p7
13.3-RELEASE-p8

kernel

root@kg-core1:~ # uname -a
FreeBSD kg-core1.kg4.no 13.3-RELEASE-p7 FreeBSD 13.3-RELEASE-p7 GENERIC amd64

and webcamd.

2024-12-26: c2 - connected up the scanner. From /var/log/messages

Dec 26 14:24:26 kg-core2 kernel: ugen1.5: <vendor 0x1e4f ET13R> at usbus1
Dec 26 14:24:26 kg-core2 kernel: uaudio0
Dec 26 14:24:26 kg-core2 kernel:  on uhub3
Dec 26 14:24:26 kg-core2 kernel: uaudio0: <CZUR USB HD MIC> on usbus1
Dec 26 14:24:26 kg-core2 kernel: uaudio0: No playback.
Dec 26 14:24:26 kg-core2 kernel: uaudio0: Record[0]: 48000 Hz, 2 ch, 16-bit S-LE PCM format, 2x8ms buffer.
Dec 26 14:24:26 kg-core2 kernel: uaudio0: No MIDI sequencer.
Dec 26 14:24:26 kg-core2 kernel: pcm3: <USB audio> on uaudio0
Dec 26 14:24:26 kg-core2 kernel: uaudio0: No HID volume keys found.

usbconfig info

root@kg-core2:~ # usbconfig -d ugen1.5
ugen1.5: <vendor 0x1e4f ET13R> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (200mA)

usbconfig - device descriptor

root@kg-core2:~ # usbconfig -d ugen1.5 dump_device_desc
ugen1.5: <vendor 0x1e4f ET13R> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (200mA)

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0200 
  bDeviceClass = 0x00ef  <Miscellaneous device>
  bDeviceSubClass = 0x0002 
  bDeviceProtocol = 0x0001 
  bMaxPacketSize0 = 0x0040 
  idVendor = 0x1e4f 
  idProduct = 0x1301 
  bcdDevice = 0x0328 
  iManufacturer = 0x0000  <no string>
  iProduct = 0x0002  <ET13R>
  iSerialNumber = 0x0003  <HU012345>
  bNumConfigurations = 0x0001 

usbconfig - config descriptor

root@kg-core2:~ # usbconfig -d ugen1.5 dump_curr_config_desc
ugen1.5: <vendor 0x1e4f ET13R> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (200mA)


 Configuration index 0

    bLength = 0x0009 
    bDescriptorType = 0x0002 
    wTotalLength = 0x0331 
    bNumInterfaces = 0x0004 
    bConfigurationValue = 0x0001 
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080 
    bMaxPower = 0x0064 

    Additional Descriptor

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


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

      Additional Descriptor

      bLength = 0x0d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump: 
       0x00 | 0x0d, 0x24, 0x01, 0x00, 0x01, 0x6e, 0x00, 0x00, 
       0x08 | 0x2d, 0x31, 0x01, 0x01, 0x01


      Additional Descriptor

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


      Additional Descriptor

      bLength = 0x1d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump: 
       0x00 | 0x1d, 0x24, 0x06, 0x02, 0x92, 0x42, 0x39, 0x46, 
       0x08 | 0xd0, 0x0c, 0xe3, 0x4a, 0x87, 0x83, 0x31, 0x33, 
       0x10 | 0xf9, 0xea, 0xaa, 0x3b, 0x0a, 0x01, 0x01, 0x04, 
       0x18 | 0xff, 0x03, 0x00, 0x00, 0x00


      Additional Descriptor

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


      Additional Descriptor

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


      Additional Descriptor

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

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

      Additional Descriptor

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



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

      Additional Descriptor

      bLength = 0x0e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump: 
       0x00 | 0x0e, 0x24, 0x01, 0x01, 0x18, 0x02, 0x82, 0x00, 
       0x08 | 0x04, 0x02, 0x00, 0x00, 0x01, 0x00


      Additional Descriptor

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


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x01, 0x01, 0x80, 0x07, 0x38, 
       0x08 | 0x04, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0xd2, 0x0f, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x02, 0x01, 0x00, 0x0f, 0x70, 
       0x08 | 0x08, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x48, 0x3f, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x03, 0x01, 0x20, 0x0a, 0x98, 
       0x08 | 0x07, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x80, 0x71, 0x26, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x04, 0x01, 0x00, 0x08, 0x00, 
       0x08 | 0x06, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x00, 0x18, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x05, 0x01, 0x00, 0x05, 0xd0, 
       0x08 | 0x02, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x08, 0x07, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x06, 0x01, 0x40, 0x06, 0xb0, 
       0x08 | 0x04, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0xa6, 0x0e, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x07, 0x01, 0x00, 0x04, 0x00, 
       0x08 | 0x03, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x00, 0x06, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x08, 0x01, 0x00, 0x04, 0x40, 
       0x08 | 0x02, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x80, 0x04, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x09, 0x01, 0x20, 0x03, 0xe0, 
       0x08 | 0x01, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0xee, 0x02, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0a, 0x01, 0x80, 0x02, 0xe0, 
       0x08 | 0x01, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x58, 0x02, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0b, 0x01, 0x40, 0x10, 0x30, 
       0x08 | 0x0c, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x83, 0x31, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0c, 0x01, 0x00, 0x06, 0x80, 
       0x08 | 0x04, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x80, 0x0d, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0d, 0x01, 0x58, 0x0e, 0xc2, 
       0x08 | 0x0a, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0xac, 0x93, 0x26, 0x00, 0x2a, 0x2c, 0x0a, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump: 
       0x00 | 0x0b, 0x24, 0x03, 0x82, 0x01, 0x40, 0x10, 0x30, 
       0x08 | 0x0c, 0x01, 0x01


      Additional Descriptor

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



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

     Endpoint 0
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0001  <ISOCHRONOUS>
        wMaxPacketSize = 0x1400 
        bInterval = 0x0001 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 

      Additional Descriptor

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



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

      Additional Descriptor

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

      Additional Descriptor

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


      Additional Descriptor

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

      Additional Descriptor

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


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


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

      Additional Descriptor

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


      Additional Descriptor

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


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

      Additional Descriptor

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

2021-12-12: c1 - disconnecting the scanner results in these lines in /var/log/messages

Dec 12 19:24:35 kg-core1 kernel: ugen3.4: <vendor 0x1e4f ET13R> at usbus3 (disconnected)
Dec 12 19:24:35 kg-core1 kernel: uaudio0: at uhub8, port 2, addr 4 (disconnected)
Dec 12 19:24:35 kg-core1 kernel: pcm4: detached
Dec 12 19:24:35 kg-core1 kernel: uaudio0: detached

2021-12-12: c1 - connecting the scanner to a FreeBSD workstation running FreeBSD 13.0-release-p5 to get some info.

root@kg-core1:~ # freebsd-version -ku
13.0-RELEASE-p4
13.0-RELEASE-p5

from /var/log/messages

Dec 12 18:41:17 kg-core1 kernel: usb_alloc_device: set address 4 failed (USB_ERR_IOERROR, ignored)
Dec 12 18:41:17 kg-core1 kernel: ugen3.4: <vendor 0x1e4f ET13R> at usbus3
Dec 12 18:41:17 kg-core1 kernel: uaudio0 on uhub8
Dec 12 18:41:17 kg-core1 kernel: uaudio0: <CZUR USB HD MIC> on usbus3
Dec 12 18:41:17 kg-core1 kernel: uaudio0: No playback.
Dec 12 18:41:17 kg-core1 kernel: uaudio0: Record[0]: 48000 Hz, 2 ch, 16-bit S-LE PCM format, 2x8ms buffer.
Dec 12 18:41:17 kg-core1 kernel: uaudio0: No MIDI sequencer.
Dec 12 18:41:17 kg-core1 kernel: pcm4: <USB audio> on uaudio0
Dec 12 18:41:17 kg-core1 kernel: uaudio0: No HID volume keys found.

usbconfig info

root@kg-core1:~ # usbconfig -d ugen3.4
ugen3.4: <vendor 0x1e4f ET13R> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (200mA)

device descriptor

root@kg-core1:~ # usbconfig -d ugen3.4 dump_device_desc
ugen3.4: <vendor 0x1e4f ET13R> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (200mA)

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0200 
  bDeviceClass = 0x00ef  <Miscellaneous device>
  bDeviceSubClass = 0x0002 
  bDeviceProtocol = 0x0001 
  bMaxPacketSize0 = 0x0040 
  idVendor = 0x1e4f 
  idProduct = 0x1301 
  bcdDevice = 0x0328 
  iManufacturer = 0x0000  <no string>
  iProduct = 0x0002  <ET13R>
  iSerialNumber = 0x0003  <HU012345>
  bNumConfigurations = 0x0001 

current config descriptor

root@kg-core1:~ # usbconfig -d ugen3.4 dump_curr_config_desc
ugen3.4: <vendor 0x1e4f ET13R> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (200mA)


 Configuration index 0

    bLength = 0x0009 
    bDescriptorType = 0x0002 
    wTotalLength = 0x0331 
    bNumInterfaces = 0x0004 
    bConfigurationValue = 0x0001 
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080 
    bMaxPower = 0x0064 

    Additional Descriptor

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


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

      Additional Descriptor

      bLength = 0x0d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump: 
       0x00 | 0x0d, 0x24, 0x01, 0x00, 0x01, 0x6e, 0x00, 0x00, 
       0x08 | 0x2d, 0x31, 0x01, 0x01, 0x01


      Additional Descriptor

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


      Additional Descriptor

      bLength = 0x1d
      bDescriptorType = 0x24
      bDescriptorSubType = 0x06
       RAW dump: 
       0x00 | 0x1d, 0x24, 0x06, 0x02, 0x92, 0x42, 0x39, 0x46, 
       0x08 | 0xd0, 0x0c, 0xe3, 0x4a, 0x87, 0x83, 0x31, 0x33, 
       0x10 | 0xf9, 0xea, 0xaa, 0x3b, 0x0a, 0x01, 0x01, 0x04, 
       0x18 | 0xff, 0x03, 0x00, 0x00, 0x00


      Additional Descriptor

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


      Additional Descriptor

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


      Additional Descriptor

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

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

      Additional Descriptor

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



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

      Additional Descriptor

      bLength = 0x0e
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump: 
       0x00 | 0x0e, 0x24, 0x01, 0x01, 0x18, 0x02, 0x82, 0x00, 
       0x08 | 0x04, 0x02, 0x00, 0x00, 0x01, 0x00


      Additional Descriptor

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


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x01, 0x01, 0x80, 0x07, 0x38, 
       0x08 | 0x04, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0xd2, 0x0f, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x02, 0x01, 0x00, 0x0f, 0x70, 
       0x08 | 0x08, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x48, 0x3f, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x03, 0x01, 0x20, 0x0a, 0x98, 
       0x08 | 0x07, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x80, 0x71, 0x26, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x04, 0x01, 0x00, 0x08, 0x00, 
       0x08 | 0x06, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x00, 0x18, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x05, 0x01, 0x00, 0x05, 0xd0, 
       0x08 | 0x02, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x08, 0x07, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x06, 0x01, 0x40, 0x06, 0xb0, 
       0x08 | 0x04, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0xa6, 0x0e, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x07, 0x01, 0x00, 0x04, 0x00, 
       0x08 | 0x03, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x00, 0x06, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x08, 0x01, 0x00, 0x04, 0x40, 
       0x08 | 0x02, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x80, 0x04, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x09, 0x01, 0x20, 0x03, 0xe0, 
       0x08 | 0x01, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0xee, 0x02, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0a, 0x01, 0x80, 0x02, 0xe0, 
       0x08 | 0x01, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x58, 0x02, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0b, 0x01, 0x40, 0x10, 0x30, 
       0x08 | 0x0c, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x83, 0x31, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0c, 0x01, 0x00, 0x06, 0x80, 
       0x08 | 0x04, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0x00, 0x80, 0x0d, 0x00, 0x5b, 0xcc, 0x15, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x26
      bDescriptorType = 0x24
      bDescriptorSubType = 0x07
       RAW dump: 
       0x00 | 0x26, 0x24, 0x07, 0x0d, 0x01, 0x58, 0x0e, 0xc2, 
       0x08 | 0x0a, 0x00, 0xec, 0x1d, 0x20, 0x00, 0xec, 0x1d, 
       0x10 | 0x20, 0xac, 0x93, 0x26, 0x00, 0x2a, 0x2c, 0x0a, 
       0x18 | 0x00, 0x03, 0x2a, 0x2c, 0x0a, 0x00, 0x40, 0x42, 
       0x20 | 0x0f, 0x00, 0x5b, 0xcc, 0x15, 0x00


      Additional Descriptor

      bLength = 0x0b
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump: 
       0x00 | 0x0b, 0x24, 0x03, 0x82, 0x01, 0x40, 0x10, 0x30, 
       0x08 | 0x0c, 0x01, 0x01


      Additional Descriptor

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



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

     Endpoint 0
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0001  <ISOCHRONOUS>
        wMaxPacketSize = 0x1400 
        bInterval = 0x0001 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 

      Additional Descriptor

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



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

      Additional Descriptor

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

      Additional Descriptor

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


      Additional Descriptor

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

      Additional Descriptor

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


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


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

      Additional Descriptor

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


      Additional Descriptor

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


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

      Additional Descriptor

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

2021-12-12: I created this page.