summaryrefslogtreecommitdiff
path: root/src/transfer.rs
diff options
context:
space:
mode:
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
+}