diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-08 01:09:26 +0100 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-08 01:09:26 +0100 |
| commit | 5ce9fef2f59b2cad13a8460784f056db890700de (patch) | |
| tree | 2477e0104899f1c90f265077b7470bc9ef5ecfcd /src/transfer.rs | |
| parent | 4e0853f81708dad75c4fc259dd9b318bf0a46bd3 (diff) | |
| download | rspsxserial-5ce9fef2f59b2cad13a8460784f056db890700de.tar.gz | |
ACK from the device is received.
Fixed serial configuration as "no parity".
Added command-line argument "--cdimg-folder", used to retrieve data.
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 +} |
