From 5ce9fef2f59b2cad13a8460784f056db890700de Mon Sep 17 00:00:00 2001 From: XaviDCR92 Date: Tue, 8 Jan 2019 01:09:26 +0100 Subject: ACK from the device is received. Fixed serial configuration as "no parity". Added command-line argument "--cdimg-folder", used to retrieve data. --- src/transfer.rs | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'src/transfer.rs') 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 +} -- cgit v1.2.3