X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=src%2Fa770.rs;h=ed6c18e40faf801fa56fb102e484d0c04539c396;hb=bfb3de4d11feee1307654936452e3776ccb3a056;hp=b37d7423f26eadc201eefb2c81c618bebcdba2dc;hpb=cbe5e6d643cafbb36dc0e2019651900a0623938a;p=temp2RGB.git diff --git a/src/a770.rs b/src/a770.rs index b37d742..ed6c18e 100644 --- a/src/a770.rs +++ b/src/a770.rs @@ -40,6 +40,8 @@ // internal static \u0024ArrayType\u0024\u0024\u0024BY08E \u003FA0x171ed149\u002E\u003FprevData\u0040\u003F1\u003F\u003FSetLEDBehavior\u0040CVGAAdaptor\u0040\u0040UEAA_NEEEEEEEEE\u0040Z\u00404PAEA; // public static __FnPtr<_ctl_result_t (_ctl_init_args_t*, _ctl_api_handle_t**)> __m2mep\u0040\u003FctlInit\u0040\u0040\u0024\u0024J0YA\u003FAW4_ctl_result_t\u0040\u0040PEAU_ctl_init_args_t\u0040\u0040PEAPEAU_ctl_api_handle_t\u0040\u0040\u0040Z; +use log::error; + use std::{ io::prelude::*, net::TcpStream, @@ -52,23 +54,24 @@ pub struct A770 { } impl A770 { - pub fn new() -> Self { - A770 { - process: Command::new(r"IntelOC.exe") - .spawn() - .expect("failed to execute process"), - stream: TcpStream::connect("127.0.0.1:6577").unwrap(), - } + pub fn new() -> anyhow::Result { + Ok(A770 { + process: Command::new(r"IntelOC.exe").spawn()?, + stream: TcpStream::connect("127.0.0.1:6577")?, + }) } - pub fn set_color(&mut self, r: u8, g: u8, b: u8) { + pub fn set_color(&mut self, r: u8, g: u8, b: u8) -> anyhow::Result<()> { let buffer: [u8; 3] = [r, g, b]; - self.stream.write(&buffer).unwrap(); + self.stream.write(&buffer).map(|_| ())?; + Ok(()) } } impl Drop for A770 { fn drop(&mut self) { - self.process.kill().unwrap(); + if let Err(error) = self.process.kill().and(self.process.try_wait()) { + error!("Unable to kill the child process: {:?}", error); + } } }