possibilité d'écrire et de lire plusieurs secteurs d'un coup
This commit is contained in:
parent
153c3d6618
commit
8b19189689
@ -38,6 +38,34 @@ impl DrvDisk {
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
/// 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_multiple_sector(&mut self, sector_number: i32, data: &mut [u8]) {
|
||||
match Disk::read_multiple_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_multiple_sector(&mut self, sector_number: i32, data: &[u8]) {
|
||||
match Disk::write_multiple_request(&mut self.disk, sector_number, data) {
|
||||
Err(e) => println!("{:?}", e),
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -132,12 +132,7 @@ impl Disk {
|
||||
/// - **sector_number** sector where to write the data
|
||||
/// - **data** where the data to write is stored
|
||||
///
|
||||
pub fn write_request(
|
||||
disk: &mut Disk,
|
||||
sector_number: i32,
|
||||
//data: &mut Vec<u8>,
|
||||
data: &[u8],
|
||||
) -> io::Result<()> {
|
||||
pub fn write_request(disk: &mut Disk,sector_number: i32,data: &[u8]) -> io::Result<()> {
|
||||
if disk.active {
|
||||
panic!("Only one request at time");
|
||||
}
|
||||
@ -170,6 +165,61 @@ impl Disk {
|
||||
disk.active = false;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
/// read data from a disk, at a certain sector number
|
||||
/// on lit de un à plusieurs secteurs
|
||||
/// `panic!` when the disk is already active or the sector number is impossible
|
||||
///
|
||||
/// ### parameters
|
||||
///
|
||||
/// - **disk** to read from
|
||||
/// - **sector_number** sector where to read the data
|
||||
/// - **data** where the readed data will be stored
|
||||
pub fn read_multiple_request(disk: &mut Disk, sector_number: i32, data: &mut [u8]) -> io::Result<()> {
|
||||
|
||||
if data.len() < (SECTOR_SIZE as usize) {
|
||||
panic!("disk::read_multiple_request, param slice smaller than one sector")
|
||||
}
|
||||
|
||||
//ex SECTOR_SIZE = 4, data.len = 27, number_sector_to_read = 27 - (27%4) = 27 - 3 = 24 = 6*4, soit 6 secteurs
|
||||
let number_sector_to_read = data.len() - (data.len()%(SECTOR_SIZE as usize));
|
||||
|
||||
//ex on lit 4 secteurs ce qui donne data[0..4],data[4..8],data[8..12],data[12..16]
|
||||
|
||||
for i in 0..number_sector_to_read {
|
||||
Disk::read_request(disk, sector_number + (i as i32), &mut data[(i*(SECTOR_SIZE as usize))..((i+1)*(SECTOR_SIZE as usize))]);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// write data into a disk, at a certain sector number
|
||||
/// on écrit de un à plusieurs secteurs
|
||||
/// `panic!` when the disk is already active or the sector number is impossible
|
||||
///
|
||||
/// ### parameters
|
||||
///
|
||||
/// - **disk** to write data into
|
||||
/// - **sector_number** sector where to write the data
|
||||
/// - **data** where the data to write is stored
|
||||
///
|
||||
pub fn write_multiple_request(disk: &mut Disk,sector_number: i32,data: &[u8]) -> io::Result<()> {
|
||||
|
||||
if data.len() < (SECTOR_SIZE as usize) {
|
||||
panic!("disk::read_multiple_request, param slice smaller than one sector")
|
||||
}
|
||||
|
||||
let number_sector_to_read = data.len() - (data.len()%(SECTOR_SIZE as usize));
|
||||
|
||||
//ex on ecrit 4 secteurs ce qui donne data[0..4],data[4..8],data[8..12],data[12..16]
|
||||
|
||||
for i in 0..number_sector_to_read {
|
||||
Disk::write_request(disk, sector_number + (i as i32), &data[(i*(SECTOR_SIZE as usize))..((i+1)*(SECTOR_SIZE as usize))]);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn stupid_fct(buf: &[u8]) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user