cd-da-reader 1.0.0

CD-DA (audio CD) reading library
Documentation
use super::device::Drive;
use super::spti::{CommandContext, execute_read};
use crate::data_reader::{SectorReadFormat, build_read_cd_cdb};
use crate::{CdReaderError, ScsiOp};

const READ_CD_TIMEOUT_SECONDS: u32 = 30;

pub(super) fn read_cd_chunk(
    drive: &Drive,
    lba: u32,
    sectors: u32,
    format: SectorReadFormat,
) -> Result<Vec<u8>, CdReaderError> {
    let mut chunk = vec![0u8; sectors as usize * format.sector_size()];
    let cdb = build_read_cd_cdb(lba, sectors, format);
    let transferred = execute_read(
        drive.handle(),
        &cdb,
        &mut chunk,
        READ_CD_TIMEOUT_SECONDS,
        CommandContext {
            op: ScsiOp::ReadCd,
            lba: Some(lba),
            sectors: Some(sectors),
        },
    )?;
    chunk.truncate(transferred);

    Ok(chunk)
}