MattJackson
7db4606038
Add disc format parsers: UDF, MPLS, CLPI
...
- udf.rs: read files from Blu-ray disc filesystem
- mpls.rs: parse playlists → titles with clips and timestamps
- clpi.rs: parse clip info → EP map with coarse/fine SPN entries
- disc.rs: high-level title scanning, sector extent mapping
- drive.rs: add read_disc() for unencrypted reads, scsi_execute()
- error.rs: add E6000 DiscError
Stage 1 of freemkv rip: identify titles and their sector ranges.
2026-04-06 14:27:48 -07:00
MattJackson
3f083f57de
Fix SG_IO type for musl compatibility
2026-04-06 12:55:30 -07:00
MattJackson
326edc4e83
Auto-update README on release
2026-04-06 12:50:47 -07:00
MattJackson
1e90497760
README: consistent layout, remove prebuilt binary section (library only)
2026-04-06 12:33:20 -07:00
MattJackson
509cdf6ea7
v0.2.1: update crates.io README, version check in release CI
2026-04-06 12:19:39 -07:00
MattJackson
ee230fe4fb
Release: verify Cargo.toml version matches git tag
2026-04-06 12:13:36 -07:00
MattJackson
ff46200829
CI: test on push/PR, auto-publish to crates.io on tag
...
- ci.yml: test on ubuntu + check on macos for every push/PR
- release.yml: test → publish to crates.io → create GitHub Release
2026-04-06 11:48:20 -07:00
MattJackson
55bc96eeee
Add release workflow + prebuilt binary downloads in README
...
- GitHub Actions: build Linux x86_64 + aarch64 on tag push
- Upload tar.gz binaries to GitHub Releases
- README: download table linking to releases
2026-04-06 11:44:46 -07:00
MattJackson
3a0ea29cf7
v0.2.0: Chipset architecture, platform-agnostic SCSI, no gatekeeping
...
Breaking changes from v0.1.2:
- PlatformType enum removed, replaced by Chipset (MediaTek, Renesas)
- DriveProfile.platform removed, replaced by .chipset + .unlock_mode + .unlock_buf_id
- DriveProfile.supported field removed — no gatekeeping
- ReadinessStatus enum removed
- DriveMatch enum removed
- SgIoTransport::open() replaced by scsi::open() (platform-agnostic)
- profiles.json: "program" field replaced by "chipset" + "unlock_mode" + "unlock_buf_id"
New:
- scsi::open() with cfg gates for Linux/macOS/Windows
- Compiles on macOS (stub returns platform-not-supported)
- libc dependency conditional on Linux only
2026-04-06 11:41:26 -07:00
MattJackson
e094fc66ba
Platform-agnostic SCSI transport with cfg gates
...
- scsi::open() returns Box<dyn ScsiTransport> on any platform
- Linux SG_IO behind #[cfg(target_os = "linux")]
- macOS IOKit and Windows SPTI stubs with TODO
- drive.rs uses scsi::open() — no platform-specific imports
- Compiles on macOS (returns "platform not yet supported")
2026-04-06 11:34:33 -07:00
MattJackson
0b2e390715
Remove supported/status gatekeeping, update README
...
- Removed supported field — if we have a profile, try unlock
- Removed ReadinessStatus, DriveMatch, flashable detection
- N0 and NM firmware both unlockable (library is agnostic)
- README: full API docs, chipset table, error codes, example output
2026-04-06 11:29:57 -07:00
MattJackson
c26b6f6819
Refactor: Chipset architecture, remove supported/status gatekeeping
...
- PlatformType → Chipset enum (MediaTek, Renesas)
- unlock_mode + unlock_buf_id stored in profile, not derived from enum
- Removed ReadinessStatus, supported field, needs_flash — library is agnostic
- Removed DriveMatch/Flashable — if we have a profile, try unlock
- profiles.json: chipset + unlock_mode + unlock_buf_id, no program/supported
- mt1959.rs reads mode/buf_id from profile fields directly
- Tests: find_known_drive, find_unknown_drive
2026-04-06 11:21:27 -07:00
MattJackson
afb43c69b3
Add CONTRIBUTING.md, issue templates, badges
2026-04-06 10:43:52 -07:00
MattJackson
ddcb614777
v0.1.2: 206 supported drives (was 141)
...
Fixed firmware database unpacker offset bug — recovered 65 additional drives.
All code.files verified: identical code (676 bytes), variable data.
Signature at offset 0x35C confirmed correct for all 8 code sizes.
mt1959_a (mode=1, buf=0x44): 65 drives
mt1959_b (mode=2, buf=0x77): 141 drives
2026-04-06 10:42:12 -07:00
MattJackson
cbf510e70e
Structured error codes: E1000-E5000, no user-facing text in library
...
Error codes:
1000-1001: device errors (not found, permission)
2000-2002: profile errors (unsupported, not found, parse)
3000-3003: unlock errors (failed, signature, not unlocked, not calibrated)
4000-4001: SCSI errors (command failed, timeout)
5000: I/O errors
All errors carry structured data (vendor_id, opcode, etc).
Applications format their own user-facing messages.
Library returns code + data, never English text.
2026-04-06 10:17:43 -07:00
MattJackson
4f0303dcc9
v0.1.1: clean profiles, SPC-4/MMC-6 field names
2026-04-06 10:00:13 -07:00
MattJackson
b9ea1d29dd
libfreemkv v0.1.0 — Open source 4K UHD / Blu-ray / DVD drive library
...
Features:
- Open drive identification via SPC-4 INQUIRY + MMC-6 GET CONFIGURATION
- 141 supported drives with bundled profiles
- MT1959 platform: unlock, calibrate, raw sector reads
- DriveSpeed enum: BD1x-BD12x, DVD1x-DVD16x
- Field names follow SPC-4 §6.4.2 and MMC-6 §5.3.10 standards
- No proprietary fingerprints — open matching by SCSI fields
- Zero config: profiles compiled into binary
Tested on real hardware: HL-DT-ST BD-RE BU40N 1.03
2026-04-06 10:00:00 -07:00