diff --git a/src/device.rs b/src/device.rs index a0b2f78..8c563dc 100755 --- a/src/device.rs +++ b/src/device.rs @@ -346,7 +346,7 @@ impl Device{ } return true } - pub fn set_serial(&mut self) -> &mut Self{ + pub fn auto_set_serial(&mut self) -> bool{ self.reboot(); self.usb_tty.write_to_device(Command::Login); while self.usb_tty.read_from_device(None) != Response::ShellPrompt {} @@ -368,7 +368,7 @@ impl Device{ Response::DebugInit | Response::Empty | Response::EmptyNewline => { continue; } _ => { log::error!("Bad value: {:?}",return_value); - todo!(); + return false }, } } @@ -378,9 +378,15 @@ impl Device{ self.reboot(); self.load_values(); self.save_values(); + return true + } + pub fn manual_set_serial(&mut self, serial:&str) -> &mut Self{ + self.serial = serial.to_string(); + self.load_values(); + self.save_values(); return self; } - pub fn get_serial(&mut self) -> &str{ + pub fn get_serial(&self) -> &str{ &self.serial } pub fn get_location(&mut self) -> String{ diff --git a/src/main.rs b/src/main.rs index de52323..3577796 100755 --- a/src/main.rs +++ b/src/main.rs @@ -11,11 +11,22 @@ use clap::Parser; #[derive(Parser,Debug)] #[command(author,version,about)] struct Args{ + /// Print all logs to screen. Sets iteration count to 50000 #[arg(short,long,action)] - debug:bool + debug:bool, + + /// Force manually setting serial numbers + #[arg(short,long,action)] + manual:bool, + + /// Set iteration count from command line + #[arg(short,long)] + iterations:Option + } const VERSION:&str="2.3.0"; +const DEBUG_ITERATION_COUNT:u64=50000; fn int_input_filtering(prompt:Option<&str>) -> u64{ let internal_prompt = prompt.unwrap_or(">>>"); @@ -58,7 +69,10 @@ fn main(){ loop{ let mut iteration_count:u64 = 0; if args.debug { - iteration_count = 10000; + iteration_count = DEBUG_ITERATION_COUNT; + } + else if let Some(value) = args.iterations{ + iteration_count = value; } else { while iteration_count < 1{ @@ -91,7 +105,9 @@ fn main(){ match new_device{ Ok(mut device) => { device.darken_screen(); - device.set_serial(); + if !args.manual { + device.auto_set_serial(); + } Some(device) }, Err(_) => None @@ -114,9 +130,13 @@ fn main(){ possible_devices.push(output); } + let mut serials_set:bool = true; let mut devices:Vec = Vec::new(); for possible_device in possible_devices.into_iter(){ if let Some(device) = possible_device{ + if device.get_serial().eq("uninitialised"){ + serials_set = false; + } devices.push(device); } } @@ -126,9 +146,11 @@ fn main(){ log::info!("--------------------------------------\n\n"); for device in devices.iter_mut(){ - //device.brighten_screen(); - //device.set_serial(); - //device.darken_screen(); + if !serials_set || args.manual { + device.brighten_screen(); + device.manual_set_serial(&input_filtering(Some("Enter the serial of the device with the bright screen: ")).to_string()); + device.darken_screen(); + } log::info!("Checking probe well of device {}",device.get_serial()); log::debug!("Number of unassigned addresses: {}",gpio.get_unassigned_addresses().len()); if !find_gpio(device, gpio){