X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=src%2Fasus_aura_usb.rs;h=31a2b2751f8a1e3d1005259379a004e9bbe064fd;hb=0c50e4418792d9f5b78ef1c96d66514058beec26;hp=e639d385245e33006e6be11ecee780222f09be91;hpb=671f35058caee5a503ef51dcd6633dbb43abc08f;p=temp2RGB.git diff --git a/src/asus_aura_usb.rs b/src/asus_aura_usb.rs index e639d38..31a2b27 100644 --- a/src/asus_aura_usb.rs +++ b/src/asus_aura_usb.rs @@ -27,38 +27,36 @@ pub struct Device { } impl Device { - pub fn new(api: &hidapi::HidApi, motherboard: Motherboard) -> Self { + 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, - }, - ) - .unwrap(), + device: api.open( + VID, + match motherboard { + Motherboard::Asus650e => PID_650_E, + Motherboard::AsusCrosshairVIIIHero => PID_CROSSHAIR, + }, + )?, motherboard, }; - device.set_fixed_mode(); - device + 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])?)) } /* @@ -76,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. @@ -103,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; @@ -126,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(()) } }