pub mod mt1959;
use crate::error::Result;
use crate::scsi::ScsiTransport;
pub trait Platform {
fn unlock(&mut self, scsi: &mut dyn ScsiTransport) -> Result<()>;
fn read_config(&mut self, scsi: &mut dyn ScsiTransport) -> Result<Vec<u8>>;
fn read_register(&mut self, scsi: &mut dyn ScsiTransport, index: u8) -> 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 read_sectors(&mut self, scsi: &mut dyn ScsiTransport, lba: u32, count: u16, buf: &mut [u8]) -> Result<usize>;
fn timing(&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],
}