# Contributing to libfreemkv Thank you for your interest in helping make disc archival accessible to everyone. ## Contributing Drive Profiles The most impactful contribution is adding support for new drives. If you have an optical drive that isn't listed in [profiles/](profiles/), we'd love your help. ### How to submit drive data 1. Install the tool: ```bash cargo install libfreemkv ``` 2. Run `freemkv-info` with your drive: ```bash freemkv-info /dev/sr0 --raw > my_drive.txt ``` 3. Open a pull request or issue with the output file attached. That's it. The raw SCSI response data lets us build a profile for your drive. ### What data is collected `freemkv-info --raw` sends two standard SCSI commands to your drive: - **INQUIRY** (opcode 0x12) — returns drive vendor, model, firmware version - **GET CONFIGURATION** (opcode 0x46) — returns drive feature data These are read-only, standard SCSI commands. They don't modify your drive or access any disc data. Every operating system sends these commands automatically when a drive is connected. ### Priority: Pioneer drives We especially need data from **Pioneer** Blu-ray drives (BDR-S08, BDR-S09, BDR-S12, BDR-S13, BDR-209, BDR-212, etc). If you have one, your contribution would help unlock support for 130+ Pioneer drive firmware versions. ## Contributing Code 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/my-change`) 3. Write tests for your changes 4. Ensure `cargo test` and `cargo clippy` pass 5. Submit a pull request ### Code Style - Run `cargo fmt` before committing - No `unsafe` without a comment explaining why - Public APIs need doc comments - Error handling via `Result`, no panics in library code ### Architecture - `src/scsi.rs` — SCSI transport layer (SG_IO on Linux) - `src/profile.rs` — Profile loading and matching - `src/platform/` — Per-chipset command implementations - `src/drive.rs` — High-level DriveSession API - `profiles/` — JSON drive profile data ## License By contributing, you agree that your contributions will be licensed under AGPL-3.0.