}
impl Device {
- pub fn new(api: &hidapi::HidApi, motherboard: Motherboard) -> Self {
+ pub fn new(api: &hidapi::HidApi, motherboard: Motherboard) -> anyhow::Result<Self> {
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<String> {
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])?))
}
/*
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.
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;
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(())
}
}