summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2019-01-15 00:21:22 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2019-01-15 00:21:22 +0100
commita1eed373b07d54c534310a5a4cd69d77d3a54350 (patch)
tree831fbd48b849101a6c56883118b1611c3215b517 /src
parent136d9f5a37d5dfd72e6c1486065de4d96611c523 (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.rs48
-rw-r--r--src/transfer.rs55
2 files changed, 56 insertions, 47 deletions
diff --git a/src/app.rs b/src/app.rs
index 3cea4ce..dfaf668 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -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
}