BurritOS/src/drivers/drv_disk.rs
2023-03-17 17:39:14 +01:00

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);
}
}