diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-10 01:54:14 +0100 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-10 01:54:14 +0100 |
| commit | dec723669aa2a5e54ab675d93bd980a56f1be0c2 (patch) | |
| tree | dc0b5d0fd3840d06e13686e1dc296088404da82b | |
| parent | e53f5e6ac95b647467002122f5ff43db791199d6 (diff) | |
PSX-EXE header is now sent on 8-byte chunks.
| -rw-r--r-- | src/transfer.rs | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/src/transfer.rs b/src/transfer.rs index 7b6c6ce..8960c8d 100644 --- a/src/transfer.rs +++ b/src/transfer.rs @@ -69,8 +69,36 @@ pub fn wait_ack(port : &mut serial::SystemPort, prev_state: TransferState) -> Tr } pub fn send_header(port : &mut serial::SystemPort, folder : &String) -> TransferState { - match get_exe_name(folder) { + match get_exe_data(&folder) { None => TransferState::Finished, + Some(header) => { + const HEADER_SIZE : usize = 32 as usize; + const PACKET_SIZE : usize = 8 as usize; + + for packet in (0..HEADER_SIZE).step_by(PACKET_SIZE) { + match header.get(packet..(packet + PACKET_SIZE)) { + None => return TransferState::Finished, + Some(chunk) => { + use std::{thread, time}; + + thread::sleep(time::Duration::from_millis(100)); + + use std::io::Write; + (*port).write(&chunk).expect("Could not write EXE header into the device"); + + println!("Sent packet {:?}", &chunk); + } + } + } + + TransferState::WaitAck + } + } +} + +fn get_exe_data(folder: &String) -> Option<Vec<u8>> { + match get_exe_name(folder) { + None => None, Some(exe_name) => { let exe_path = format!("{}/{}", folder, exe_name); @@ -79,19 +107,10 @@ pub fn send_header(port : &mut serial::SystemPort, folder : &String) -> Transfer match fs::read(&exe_path) { Err(e) => { println!("{:?}. File path: {}", e, exe_path); - TransferState::Finished + None }, Ok(data) => { - use std::io::Write; - - const HEADER_SIZE : usize = 32 as usize; - let mut header = data.clone(); - - header.truncate(HEADER_SIZE); - - (*port).write(&header).expect("Could not write EXE header into the device"); - - TransferState::WaitAck + Some(data) } } } |
