Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dddcli

dddcli is a C++20 command-line tool for Domesday Duplicator capture workflows. It can list connected DdD USB devices, capture RF samples, control Pioneer-compatible LaserDisc players over serial, and run automated captures that coordinate the USB capture with player transport state.

This is hardware-facing software. Capture commands can write large files, and player commands can spin discs, seek, stop, pause, and key-lock the front panel.

Build

dddcli is built with CMake. The active code is self-contained under src/. The build requires the libusb development package to be discoverable through pkg-config as libusb-1.0.

cmake -S . -B build
cmake --build build
ctest --test-dir build --output-on-failure

Software tests do not require USB or serial hardware.

Linux Host Setup

For reliable non-root capture on Linux, the Domesday Duplicator USB device should have a late udev rule such as /etc/udev/rules.d/99-domesday.rules:

SUBSYSTEM=="usb", ATTR{idVendor}=="1d50", ATTR{idProduct}=="603b", MODE="0666"

The rule must use ATTR{...} and run after the default USB rules so the final /dev/bus/usb/... node is writable by the capture user. The default capture queue also expects usbcore.usbfs_memory_mb=512; if that is set through /etc/modprobe.d/usbcore.conf, the active initramfs may need to be rebuilt before the value survives reboot. See Troubleshooting for the full checks.

Basic Usage

List connected Domesday Duplicator USB devices:

./build/dddcli list-devices

Capture manually for a fixed duration:

./build/dddcli capture \
  --duration 10 \
  --output /tmp/sample.lds \
  --json /tmp/sample.json

Check a connected Pioneer-compatible LaserDisc player:

./build/dddcli player status \
  --serial-device /dev/ttyUSB0 \
  --serial-speed auto

Run a partial CAV auto-capture:

./build/dddcli auto-capture \
  --serial-device /dev/ttyUSB0 \
  --disc-type cav \
  --mode partial \
  --start-address 1000 \
  --end-address 1300 \
  --output /tmp/cav-test.lds \
  --json /tmp/cav-test.json

Run a partial CLV auto-capture:

./build/dddcli auto-capture \
  --serial-device /dev/ttyUSB0 \
  --disc-type clv \
  --mode partial \
  --start-address 60 \
  --end-address 90 \
  --output /tmp/clv-test.lds \
  --json /tmp/clv-test.json

Auto-capture turns the player's on-screen display on by default. Use --no-on-screen-display when the player OSD should be disabled during capture.

Interactive captures show one updating progress line on stderr. When stderr is redirected or piped through tee, captures emit newline progress about every 10 seconds; auto-capture progress includes timecode=H:MM:SS for CLV or frame=<n> for CAV once the player address is known. Successful auto-captures stop the player during cleanup.

Configuration

An example config is provided at dddcli.example.toml. Copy it to ${XDG_CONFIG_HOME:-$HOME/.config}/dddcli/dddcli.toml for normal use, or pass it anywhere among the command words for a one-off run:

./build/dddcli capture --config ./dddcli.example.toml --duration 10

Command-line flags override matching config values, except that capture.test_mode and auto_capture.key_lock can only be enabled from the CLI. See Configuration for the supported keys and default path rules.

Commands

Flags may appear before, between, or after command words, so stable settings can stay in place while changing the command action.

  • dddcli list-devices: print visible Domesday Duplicator USB device paths.
  • dddcli capture: start a manual USB capture.
  • dddcli auto-capture: coordinate USB capture with serial player control.
  • dddcli player or dddcli player status: print model, active profile, player state, disc type, and disc status.
  • dddcli player play|pause|stop|still: send basic transport commands.
  • dddcli player read-user-codes: query standard and Pioneer user code fields.
  • dddcli player raw-command <command>: send a raw serial command and print an escaped response.

Output

Captures use the LDS format: 10-bit packed RF samples. If --output has no extension, .lds is added; an explicitly supplied extension is preserved. Relative --output paths are placed under --output-dir; absolute paths are used as given. If no output path is provided, the tool creates a timestamped .lds file under --output-dir, which defaults to the current directory. Generated filenames use RF-Sample_YYYY-MM-DD_HH-MM-SS or TestData_YYYY-MM-DD_HH-MM-SS when --test-mode is enabled.

Use --json <file> to write a metadata sidecar. The sidecar contains captureInfo for every capture, including the capture path, format, transfer result, duration, transfer and disk-buffer counts, file size, sample count, sample min/max, clipping counts, sequence-marker presence, and UTC creation timestamp. Auto-captures also populate serialInfo with player and disc fields; CAV metadata records minFrameNumber and maxFrameNumber, while CLV metadata records minTimeCode and maxTimeCode as player-reported timecodes normalized to seconds.

Documentation

License and Attribution

This codebase is derived from the original DomesdayDuplicator project by Simon Inns. The upstream project is licensed under the GNU General Public License v3.0; this derived command-line port preserves that license for the code carried forward from DomesdayDuplicator. It is distributed without warranty. See LICENSE for the full license text and NOTICE for attribution details.

AI Assistance

Development of this command-line port was substantially assisted by OpenAI Codex and ChatGPT 5.5, working from Ed Powell's direction, testing, hardware context, and review.

For contributor and agent guidance, see AGENTS.md.

About

Domesday Duplicator RF Capture CLI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages