disc: log adaptive patch speed transitions; issue SET CD SPEED max unconditionally

Two recovery-path fixes:
- patch: log the per-range speed transitions (INFO, phase="patch_speed") — each
  range enters at 0xFFFF (max) and drops to 0x0000 (slow recovery) on its first
  read failure. Previously the adaptive-speed behavior was invisible in the logs.
- drive init: issue the generic SET CD SPEED max UNCONDITIONALLY at drive-open,
  not only when a firmware unlocker matched. A stock-mode BD/UHD drive (no
  firmware unlock) was left riplocked because the call sat inside the
  unlocker-matched branch.
This commit is contained in:
Matthew Jackson
2026-06-29 21:47:50 -07:00
parent e648bde94b
commit b36896564f
2 changed files with 23 additions and 4 deletions
+7 -4
View File
@@ -431,11 +431,14 @@ impl Drive {
if let Some(vid) = unlocked.vid {
self.oem_vid = Some(vid);
}
// Now that the drive is unlocked, raise it to its maximum read speed
// with a generic SET CD SPEED. Best-effort: a failure here must NOT
// fail the rip — a slow drive still rips.
self.set_speed(crate::speed::DriveSpeed::Max.to_kbps());
}
// Raise the drive to its maximum read speed with a generic SET CD SPEED —
// UNCONDITIONALLY, whether or not an unlocker matched. A stock-mode BD/UHD
// drive (no firmware unlocker) still wants max speed; gating this on an
// unlocker match left such drives riplocked. (DVD returns earlier in
// stock mode; its sweep sets DVD speed separately.) Best-effort: a
// failure here must NOT fail the rip — a slow drive still rips.
self.set_speed(crate::speed::DriveSpeed::Max.to_kbps());
let r: Result<()> = Ok(());
tracing::info!(
target: "freemkv::drive",