summaryrefslogtreecommitdiff
path: root/src/transfer.rs
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2019-01-08 01:09:26 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2019-01-08 01:09:26 +0100
commit5ce9fef2f59b2cad13a8460784f056db890700de (patch)
tree2477e0104899f1c90f265077b7470bc9ef5ecfcd /src/transfer.rs
parent4e0853f81708dad75c4fc259dd9b318bf0a46bd3 (diff)
downloadrspsxserial-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.rs38
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
+}