cd-da-reader 1.0.0

CD-DA (audio CD) reading library
Documentation
use super::device::Drive;
use crate::CdReaderError;
use crate::data_reader::ReadSpeed;

pub(super) fn request_read_speed(
    drive: &Drive,
    target_read_speed: ReadSpeed,
) -> Result<(), CdReaderError> {
    let multiplier = match target_read_speed {
        ReadSpeed::Unchanged => return Ok(()),
        ReadSpeed::Optimal => 0,
        ReadSpeed::CustomMultiplier(x) => x as u32,
    };
    let target_speed_kbs = if multiplier == 0 {
        0xffff
    } else {
        multiplier * 176400 / 1000
    };
    let response =
        unsafe { super::ffi::request_cd_read_speed(drive.fd(), target_speed_kbs as u16) };

    if !response {
        return Err(CdReaderError::Io(std::io::Error::last_os_error()));
    }

    Ok(())
}