pub mod mt1959;
use crate::error::Result;
use crate::scsi::ScsiTransport;
pub trait Platform {
fn unlock(&mut self, scsi: &mut dyn ScsiTransport) -> Result<()>;
fn load_firmware(&mut self, scsi: &mut dyn ScsiTransport) -> Result<()>;
fn read_register_a(&mut self, scsi: &mut dyn ScsiTransport) -> Result<[u8; 16]>;
fn read_register_b(&mut self, scsi: &mut dyn ScsiTransport) -> Result<[u8; 16]>;
fn calibrate(&mut self, scsi: &mut dyn ScsiTransport) -> Result<()>;
fn keepalive(&mut self, scsi: &mut dyn ScsiTransport) -> Result<()>;
fn status(&mut self, scsi: &mut dyn ScsiTransport) -> Result<DriveStatus>;
fn probe(&mut self, scsi: &mut dyn ScsiTransport, sub_cmd: u8, address: u32, length: u32) -> Result<Vec<u8>>;
fn set_read_speed(&mut self, scsi: &mut dyn ScsiTransport, lba: u32) -> Result<()>;
fn timing(&mut self, scsi: &mut dyn ScsiTransport) -> Result<()>;
fn init(&mut self, scsi: &mut dyn ScsiTransport) -> Result<()>;
fn is_unlocked(&self) -> bool;
}
#[derive(Debug, Clone)]
pub struct DriveStatus {
pub unlocked: bool,
pub features: [u8; 16],
}