82 lines
2.0 KiB
Rust
82 lines
2.0 KiB
Rust
use crate::Disk;
|
|
|
|
/// driver disk
|
|
pub struct DrvDisk {
|
|
disk: Disk,
|
|
}
|
|
|
|
impl DrvDisk {
|
|
///initialize the disk ok the current driver
|
|
pub fn init_drv_disk(disk: Disk) -> DrvDisk {
|
|
DrvDisk { disk: disk }
|
|
}
|
|
|
|
/// read inside the disk
|
|
///
|
|
/// ### Parameters
|
|
///
|
|
/// - **self** driver disk
|
|
/// - **sector_number** sector where to read the data
|
|
/// - **data** where the readed data will be stored
|
|
pub fn read_sector(&mut self, sector_number: i32, data: &mut Vec<u8>) {
|
|
match Disk::read_request(&mut self.disk, sector_number, data) {
|
|
Err(e) => println!("{:?}", e),
|
|
_ => (),
|
|
}
|
|
}
|
|
|
|
/// write inside the disk
|
|
///
|
|
/// ### Parameters
|
|
///
|
|
/// - **self** driver disk
|
|
/// - **sector_number** sector where to write the data
|
|
/// - **data** where the data to write is stored
|
|
pub fn write_sector(&mut self, sector_number: i32, data: &mut Vec<u8>) {
|
|
match Disk::write_request(&mut self.disk, sector_number, data) {
|
|
Err(e) => println!("{:?}", e),
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::DrvDisk;
|
|
use crate::Disk;
|
|
|
|
#[test]
|
|
fn test_init_driver() {
|
|
let disk = Disk::init_disk();
|
|
let _ = DrvDisk::init_drv_disk(disk);
|
|
}
|
|
|
|
#[test]
|
|
fn test_read_write_disk() {
|
|
let disk = Disk::init_disk();
|
|
let mut drv_disk = DrvDisk::init_drv_disk(disk);
|
|
|
|
let mut data = Vec::new();
|
|
data.push(0 as u8);
|
|
data.push(0 as u8);
|
|
data.push(0 as u8);
|
|
data.push(0 as u8);
|
|
|
|
let mut data1 = Vec::new();
|
|
data1.push(1 as u8);
|
|
data1.push(1 as u8);
|
|
data1.push(1 as u8);
|
|
data1.push(1 as u8);
|
|
|
|
let mut data2: Vec<u8> = Vec::new();
|
|
|
|
drv_disk.write_sector(0, &mut data);
|
|
drv_disk.write_sector(1, &mut data1);
|
|
drv_disk.read_sector(1, &mut data2);
|
|
|
|
assert_eq!(data1, data2);
|
|
assert_ne!(data, data1);
|
|
assert_ne!(data, data2);
|
|
}
|
|
}
|