diff --git a/pbs-api-types/src/tape/drive.rs b/pbs-api-types/src/tape/drive.rs index 626c5d9c..de569980 100644 --- a/pbs-api-types/src/tape/drive.rs +++ b/pbs-api-types/src/tape/drive.rs @@ -276,3 +276,68 @@ pub struct Lp17VolumeStatistics { /// Volume serial number pub serial: String, } + +/// The DT Device Activity from DT Device Status LP page +#[api] +#[derive(Copy, Clone, Serialize, Deserialize)] +#[serde(rename_all = "kebab-case")] +pub enum DeviceActivity { + /// No activity + NoActivity, + /// Cleaning + Cleaning, + /// Loading + Loading, + /// Unloading + Unloading, + /// Other unspecified activity + Other, + /// Reading + Reading, + /// Writing + Writing, + /// Locating + Locating, + /// Rewinding + Rewinding, + /// Erasing + Erasing, + /// Formatting + Formatting, + /// Calibrating + Calibrating, + /// Other (DT) + OtherDT, + /// Updating microcode + MicrocodeUpdate, + /// Reading encrypted data + ReadingEncrypted, + /// Writing encrypted data + WritingEncrypted, +} + +impl TryFrom for DeviceActivity { + type Error = Error; + + fn try_from(value: u8) -> Result { + Ok(match value { + 0x00 => DeviceActivity::NoActivity, + 0x01 => DeviceActivity::Cleaning, + 0x02 => DeviceActivity::Loading, + 0x03 => DeviceActivity::Unloading, + 0x04 => DeviceActivity::Other, + 0x05 => DeviceActivity::Reading, + 0x06 => DeviceActivity::Writing, + 0x07 => DeviceActivity::Locating, + 0x08 => DeviceActivity::Rewinding, + 0x09 => DeviceActivity::Erasing, + 0x0A => DeviceActivity::Formatting, + 0x0B => DeviceActivity::Calibrating, + 0x0C => DeviceActivity::OtherDT, + 0x0D => DeviceActivity::MicrocodeUpdate, + 0x0E => DeviceActivity::ReadingEncrypted, + 0x0F => DeviceActivity::WritingEncrypted, + other => bail!("invalid DT device activity value: {:x}", other), + }) + } +}