diff options
Diffstat (limited to 'src/transfer.rs')
| -rw-r--r-- | src/transfer.rs | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/src/transfer.rs b/src/transfer.rs index 31594dd..11946f1 100644 --- a/src/transfer.rs +++ b/src/transfer.rs @@ -16,6 +16,7 @@ pub fn first_contact(port : &mut serial::SystemPort) -> TransferState { Err(_) => TransferState::FirstContact, Ok(b) => { if b == 1 { + println!("Written 1 byte: {}", INITIAL_TRANSMISSION); TransferState::WaitAck } else @@ -34,19 +35,46 @@ pub fn wait_ack(port : &mut serial::SystemPort, prev_state: TransferState) -> Tr let mut buffer : [u8; 1] = [0]; + use serial::SerialPort; + + (*port).set_timeout(std::time::Duration::from_secs(2)).expect("Could not adjust timeout"); + match (*port).read(&mut buffer) { - Err(_) => TransferState::WaitAck, + Err(_) => { + prev_state + }, Ok(b) => { if b == 1 { - match prev_state { - TransferState::FirstContact => TransferState::SendHeader, - _ => TransferState::Finished + if buffer[0] == 'b' as u8 { + println!("Received ACK"); + match prev_state { + TransferState::FirstContact => TransferState::SendHeader, + _ => TransferState::Finished + } + } + else + { + prev_state } } else { - TransferState::WaitAck + prev_state } } } } + +pub fn send_header(port : &mut serial::SystemPort, folder : &String) -> TransferState { + use std::fs; + use regex::Regex; + + let data_buffer = fs::read_to_string(format!("{}/{}", folder, "SYSTEM.CNF")).unwrap(); + lazy_static! { + static ref RX: Regex = Regex::new(r"BOOT\s*=\s*cdrom:\(.+\.EXE);1").unwrap(); + } + + println!("{:?}", RX.captures(&data_buffer).unwrap()); + + TransferState::SendHeader +} |
