diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-15 00:21:22 +0100 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-15 00:21:22 +0100 |
| commit | a1eed373b07d54c534310a5a4cd69d77d3a54350 (patch) | |
| tree | 831fbd48b849101a6c56883118b1611c3215b517 /src | |
| parent | 136d9f5a37d5dfd72e6c1486065de4d96611c523 (diff) | |
requested_file is now also modified by send_file().
Packets smaller than 8 bytes are now also sent.
Diffstat (limited to 'src')
| -rw-r--r-- | src/app.rs | 48 | ||||
| -rw-r--r-- | src/transfer.rs | 55 |
2 files changed, 56 insertions, 47 deletions
@@ -94,7 +94,7 @@ fn serial_comm(addr : Option<&String>, port_name : &String, baud_rate : Option<& TransferState::SendFile => transfer::send_file(&mut port, &folder, &mut sent_bytes, - &requested_file, + &mut requested_file, &mut file_data, &mut file_size), TransferState::Finished => break @@ -127,31 +127,25 @@ fn serial_init(addr : Option<&String>, port_name : &String, baud_rate : Option<& } }; - // This variable will be bound to a SystemPort - // instance if everything could be configured successfully. - let mut port_unwrapped; - match port { - Err(_) => { - return Err(Error::new(ErrorKind::NotFound, "Could not open serial device")); - }, - - Ok(p) => { - port_unwrapped = p; - } - }; - - let settings = - serial::PortSettings { - baud_rate: baud, - char_size: serial::Bits8, - parity: serial::ParityNone, - stop_bits: serial::Stop1, - flow_control: serial::FlowNone - }; - - port_unwrapped.configure(&settings)?; - - // Return SystemPort instance if successful. - Ok(port_unwrapped) + Err(_) => { + Err(Error::new(ErrorKind::NotFound, "Could not open serial device")) + }, + + Ok(mut p) => { + let settings = + serial::PortSettings { + baud_rate: baud, + char_size: serial::Bits8, + parity: serial::ParityNone, + stop_bits: serial::Stop1, + flow_control: serial::FlowNone + }; + + p.configure(&settings)?; + + // Return SystemPort instance if successful. + Ok(p) + } + } } diff --git a/src/transfer.rs b/src/transfer.rs index c441fd0..aaa5dc8 100644 --- a/src/transfer.rs +++ b/src/transfer.rs @@ -181,34 +181,48 @@ pub fn wait_file_request(port : &mut serial::SystemPort, requested_file : &mut S } fn get_file_name(buffer : &Vec<u8>, requested_file: &mut String) -> TransferState { - // No valid header byte has been found yet. - match buffer.iter().position(|&c| c == '#' as u8) { - None => TransferState::WaitFileRequest, - Some(pos) => { - let final_pos : usize = - match buffer.iter().position(|&c| c == '@' as u8) { - None => buffer.len() - 1, - Some(l) => l - }; - requested_file.clone_from(&String::from_utf8(buffer[pos + 1..final_pos].to_vec()).unwrap()); - - println!("Requested file: {}", requested_file); - - if requested_file.ends_with(";1") { - TransferState::SendFile + if requested_file.is_empty() { + // No valid header byte has been found yet. + match buffer.iter().position(|&c| c == '#' as u8) { + Some(pos) => { + let final_pos : usize = + match buffer.iter().position(|&c| c == '@' as u8) { + None => { + println!("Terminator character could not be found"); + buffer.len() - 1 + }, + Some(l) => l + }; + requested_file.clone_from(&String::from_utf8(buffer[pos + 1..final_pos].to_vec()).unwrap()); } - else - { - TransferState::WaitFileRequest + None => {}, + } + } + else + { + // No valid header byte has been found yet. + match buffer.iter().position(|&c| c == '@' as u8) { + Some(pos) => { + requested_file.push_str(&String::from_utf8(buffer[0..pos].to_vec()).unwrap()); } + None => {}, } } + + if requested_file.ends_with(";1") { + println!("Requested file: {}", requested_file); + TransferState::SendFile + } + else + { + TransferState::WaitFileRequest + } } pub fn send_file(port : &mut serial::SystemPort, folder: &String, sent_bytes: &mut usize, - requested_file: &String, + requested_file: &mut String, file_data : &mut Vec<u8>, file_size : &mut Option<usize>) -> TransferState { use std::fs; @@ -295,12 +309,13 @@ pub fn send_file(port : &mut serial::SystemPort, } else { - println!("{} has been completely sent.", requested_file); + println!("\r{} has been completely sent.", requested_file); // Reset information. *sent_bytes = 0; *file_size = None; file_data.clear(); + requested_file.clear(); TransferState::WaitFileRequest } |
