Skip to main content

libfreemkv/
speed.rs

1//! Drive speed constants.
2
3/// Common optical drive speeds with KB/s values for SET_CD_SPEED.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
5pub enum DriveSpeed {
6    BD1x,
7    BD2x,
8    BD4x,
9    BD6x,
10    BD8x,
11    BD10x,
12    BD12x,
13    DVD1x,
14    DVD2x,
15    DVD4x,
16    DVD8x,
17    DVD16x,
18    Max,
19}
20
21impl DriveSpeed {
22    pub fn to_kbps(self) -> u16 {
23        match self {
24            DriveSpeed::BD1x => 4_500,
25            DriveSpeed::BD2x => 9_000,
26            DriveSpeed::BD4x => 18_000,
27            DriveSpeed::BD6x => 27_000,
28            DriveSpeed::BD8x => 36_000,
29            DriveSpeed::BD10x => 45_000,
30            DriveSpeed::BD12x => 54_000,
31            DriveSpeed::DVD1x => 1_385,
32            DriveSpeed::DVD2x => 2_770,
33            DriveSpeed::DVD4x => 5_540,
34            DriveSpeed::DVD8x => 11_080,
35            DriveSpeed::DVD16x => 22_160,
36            DriveSpeed::Max => 0xFFFF,
37        }
38    }
39}
40
41impl std::fmt::Display for DriveSpeed {
42    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43        write!(f, "{:?} ({} KB/s)", self, self.to_kbps())
44    }
45}