OBSBOT's Terms of Use prohibit reverse engineering of their software. To keep libobsbot legally defensible, contributions must be derived only from observed USB wire behavior and public sources.
libdev.so /
libdev.dylib / libdev.dll - do not
disassemble, decompile, dump strings, or run nm /
readelf -a / objdump for anything beyond
confirming the file is what it claims to be, or look at the symbol
table.sdk/v1.0.2/include/dev/dev.hpp and friends) that
OBSBOT ship with their sample code. The header is API shape only,
no implementation.libdev.so talking to a real OBSBOT camera, captured
with Wireshark + usbmon (or equivalent on other
OSes). The capture is observed wire behavior, not source.Every selector value, payload byte layout, or protocol assumption in
source must point at a committed .pcapng
under doc/protocol/<model>/ and a companion
.md file that describes how the bytes were derived. The
commit that introduces the constant must reference the capture in its
message:
meet2: add brightness selector
Captured 2026-05-23 with usbmon3 + Wireshark while sliding the brightness
control in OBSBOT's GUI through min/mid/max values.
Refs: doc/protocol/meet2/setBrightness.pcapng,
doc/protocol/meet2/setBrightness.md
A PR that adds a magic constant without a capture cannot be merged.
cargo fmt --check and
cargo clippy --workspace -- -D warnings are CI
gates.unsafe outside the FFI crate's
extern "C" boundary and
transport/usb.rs.tokio or other async runtimes in
libobsbot-core. One long-lived thread per opened
device is plenty.meet2:, transport:, ffi:,
docs:, ci:).Closes #N in the commit body
where applicable.cargo fmt,
cargo clippy -- -D warnings, cargo test
locally before pushing.