From 3385de570453eaa812489422f95cbde67d9f2088 Mon Sep 17 00:00:00 2001 From: MattJackson <1085847+MattJackson@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:45:32 +0000 Subject: [PATCH] Add Drive::read_capacity() for raw sector dump --- src/drive/mod.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/drive/mod.rs b/src/drive/mod.rs index fd59496..2970855 100644 --- a/src/drive/mod.rs +++ b/src/drive/mod.rs @@ -359,6 +359,20 @@ impl Drive { Ok(result.bytes_transferred) } + /// Read the disc capacity in sectors (2048 bytes each). + pub fn read_capacity(&mut self) -> Result { + let cdb = [ + crate::scsi::SCSI_READ_CAPACITY, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + ]; + let mut buf = [0u8; 8]; + self.scsi.as_mut().execute( + &cdb, crate::scsi::DataDirection::FromDevice, &mut buf, 5_000, + )?; + let last_lba = u32::from_be_bytes([buf[0], buf[1], buf[2], buf[3]]); + Ok(last_lba + 1) + } + pub fn set_speed(&mut self, speed_kbs: u16) { let cdb = crate::scsi::build_set_cd_speed(speed_kbs); let mut dummy = [0u8; 0];