X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=src%2Fasus_aura_usb.rs;h=31a2b2751f8a1e3d1005259379a004e9bbe064fd;hb=0c50e4418792d9f5b78ef1c96d66514058beec26;hp=01590c06de110f02f8e936ffb6e829c3e4182e28;hpb=9789f56d04a0a45fdb0495ca4fab6b01ba3d4f3e;p=temp2RGB.git diff --git a/src/asus_aura_usb.rs b/src/asus_aura_usb.rs index 01590c0..31a2b27 100644 --- a/src/asus_aura_usb.rs +++ b/src/asus_aura_usb.rs @@ -27,39 +27,36 @@ pub struct Device { } impl Device { - pub fn new(api: &hidapi::HidApi, motherboard: Motherboard) -> Self { - let device = - Device { - device: api - .open( - VID, - match motherboard { - Motherboard::Asus650e => PID_650_E, - Motherboard::AsusCrosshairVIIIHero => PID_CROSSHAIR, - }, - ) - .unwrap(), - motherboard, - }; - - device.set_fixed_mode(); - device + pub fn new(api: &hidapi::HidApi, motherboard: Motherboard) -> anyhow::Result { + let device = Device { + device: api.open( + VID, + match motherboard { + Motherboard::Asus650e => PID_650_E, + Motherboard::AsusCrosshairVIIIHero => PID_CROSSHAIR, + }, + )?, + motherboard, + }; + + device.set_fixed_mode()?; + Ok(device) } - pub fn get_firmware_string(&self) -> String { + pub fn get_firmware_string(&self) -> anyhow::Result { let mut buffer = [0u8; 65]; buffer[0] = 0xEC; buffer[1] = AURA_REQUEST_FIRMWARE_VERSION; - let n_write = self.device.write(&buffer).unwrap(); + let n_write = self.device.write(&buffer)?; assert_eq!(n_write, 65); buffer.fill(0); - let n_read = self.device.read(&mut buffer).unwrap(); + let n_read = self.device.read(&mut buffer)?; assert_eq!(n_read, 65); assert_eq!(buffer[0], 0xEC); assert_eq!(buffer[1], 0x02); - String::from(str::from_utf8(&buffer[2..17]).unwrap()) + Ok(String::from(str::from_utf8(&buffer[2..17])?)) } /* @@ -77,25 +74,23 @@ impl Device { 00 00 00 00 00 00 00 00 00 00 00 00 */ - pub fn get_configuration_table(&self) -> [u8; 60] { + pub fn get_configuration_table(&self) -> anyhow::Result<[u8; 60]> { let mut buffer = [0u8; 65]; buffer[0] = 0xEC; buffer[1] = AURA_REQUEST_CONFIG_TABLE; - let n_write = self.device.write(&buffer).unwrap(); + let n_write = self.device.write(&buffer)?; assert_eq!(n_write, 65); buffer.fill(0); - let n_read = self.device.read(&mut buffer).unwrap(); + let n_read = self.device.read(&mut buffer)?; assert_eq!(n_read, 65); assert_eq!(buffer[0], 0xEC); assert_eq!(buffer[1], 0x30); - buffer[4..64] - .try_into() - .expect("slice with incorrect length") + Ok(buffer[4..64].try_into()?) } - fn set_fixed_mode(&self) { + fn set_fixed_mode(&self) -> anyhow::Result<()> { let mut buffer = [0u8; 65]; buffer[0] = 0xEC; buffer[1] = 0x35; // Control mode. @@ -104,12 +99,13 @@ impl Device { for channel_effect_id in 0..2 { buffer[2] = channel_effect_id; // Channel effect id: Fixed. - let n_write = self.device.write(&buffer).unwrap(); + let n_write = self.device.write(&buffer)?; assert_eq!(n_write, 65); } + Ok(()) } - pub fn set_color(&self, color: &RGB) { + pub fn set_color(&self, color: &RGB) -> anyhow::Result<()> { let mut buffer = [0u8; 65]; buffer[0] = 0xEC; buffer[1] = 0x36; @@ -127,17 +123,19 @@ impl Device { buffer[5 + 3 * n + 2] = color.blue; } - let n_write = self.device.write(&buffer).unwrap(); + let n_write = self.device.write(&buffer)?; assert_eq!(n_write, 65); + Ok(()) } - pub fn save_current_color(&self) { + pub fn save_current_color(&self) -> anyhow::Result<()> { let mut buffer = [0u8; 65]; buffer[0] = 0xEC; buffer[1] = 0x3F; buffer[2] = 0x55; - let n_write = self.device.write(&buffer).unwrap(); + let n_write = self.device.write(&buffer)?; assert_eq!(n_write, 65); + Ok(()) } }