90 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| 
								 | 
							
								use std::io::{self, Read};
							 | 
						||
| 
								 | 
							
								use virtual_display;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn prompt_input() -> u8 {
							 | 
						||
| 
								 | 
							
								    println!("Press  key          execute:");
							 | 
						||
| 
								 | 
							
								    println!("       1. 'x'       1. exit");
							 | 
						||
| 
								 | 
							
								    println!("       2. 'i'       2. install or update driver");
							 | 
						||
| 
								 | 
							
								    println!("       3. 'u'       3. uninstall driver");
							 | 
						||
| 
								 | 
							
								    println!("       4. 'c'       4. create device");
							 | 
						||
| 
								 | 
							
								    println!("       5. 'd'       5. destroy device");
							 | 
						||
| 
								 | 
							
								    println!("       6. '1'       6. plug in monitor 0,1,2");
							 | 
						||
| 
								 | 
							
								    println!("       7. '4'       7. plug out monitor 0,1,2");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    io::stdin()
							 | 
						||
| 
								 | 
							
								        .bytes()
							 | 
						||
| 
								 | 
							
								        .next()
							 | 
						||
| 
								 | 
							
								        .and_then(|result| result.ok())
							 | 
						||
| 
								 | 
							
								        .unwrap_or(0)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn plug_in() {
							 | 
						||
| 
								 | 
							
								    println!("Plug in monitor begin");
							 | 
						||
| 
								 | 
							
								    if let Err(e) = virtual_display::plug_in_monitor() {
							 | 
						||
| 
								 | 
							
								        println!("{}", e);
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        println!("Plug in monitor done");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn plug_out() {
							 | 
						||
| 
								 | 
							
								    println!("Plug out monitor begin");
							 | 
						||
| 
								 | 
							
								    if let Err(e) = virtual_display::plug_out_monitor() {
							 | 
						||
| 
								 | 
							
								        println!("{}", e);
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        println!("Plug out monitor done");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn main() {
							 | 
						||
| 
								 | 
							
								    loop {
							 | 
						||
| 
								 | 
							
								        match prompt_input() as char {
							 | 
						||
| 
								 | 
							
								            'x' => break,
							 | 
						||
| 
								 | 
							
								            'i' => {
							 | 
						||
| 
								 | 
							
								                println!("Install or update driver begin");
							 | 
						||
| 
								 | 
							
								                let mut reboot_required = false;
							 | 
						||
| 
								 | 
							
								                if let Err(e) = virtual_display::install_update_driver(&mut reboot_required) {
							 | 
						||
| 
								 | 
							
								                    println!("{}", e);
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    println!(
							 | 
						||
| 
								 | 
							
								                        "Install or update driver done, reboot is {} required",
							 | 
						||
| 
								 | 
							
								                        if reboot_required { "" } else { "not" }
							 | 
						||
| 
								 | 
							
								                    );
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            'u' => {
							 | 
						||
| 
								 | 
							
								                println!("Uninstall driver begin");
							 | 
						||
| 
								 | 
							
								                let mut reboot_required = false;
							 | 
						||
| 
								 | 
							
								                if let Err(e) = virtual_display::uninstall_driver(&mut reboot_required) {
							 | 
						||
| 
								 | 
							
								                    println!("{}", e);
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    println!(
							 | 
						||
| 
								 | 
							
								                        "Uninstall driver done, reboot is {} required",
							 | 
						||
| 
								 | 
							
								                        if reboot_required { "" } else { "not" }
							 | 
						||
| 
								 | 
							
								                    );
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            'c' => {
							 | 
						||
| 
								 | 
							
								                println!("Create device begin");
							 | 
						||
| 
								 | 
							
								                if virtual_display::is_device_created() {
							 | 
						||
| 
								 | 
							
								                    println!("Device created before");
							 | 
						||
| 
								 | 
							
								                    continue;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                if let Err(e) = virtual_display::create_device() {
							 | 
						||
| 
								 | 
							
								                    println!("{}", e);
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    println!("Create device done");
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            'd' => {
							 | 
						||
| 
								 | 
							
								                println!("Close device begin");
							 | 
						||
| 
								 | 
							
								                virtual_display::close_device();
							 | 
						||
| 
								 | 
							
								                println!("Close device done");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            '1' => plug_in(),
							 | 
						||
| 
								 | 
							
								            '4' => plug_out(),
							 | 
						||
| 
								 | 
							
								            _ => {}
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |