Cargo fmt
[temp2RGB.git] / src / b650_e.rs
1 use std::str;
2
3 use crate::rgb::RGB;
4
5 /*
6 * Doc:
7 * - https://blog.inlart.com/post/openrgb-asus-x570/
8 * - https://openrgb-wiki.readthedocs.io/en/latest/asus/ASUS-Aura-USB/
9 */
10
11 const AURA_REQUEST_FIRMWARE_VERSION: u8 = 0x82;
12 const AURA_REQUEST_CONFIG_TABLE: u8 = 0xB0;
13
14 const VID: u16 = 0x0B05; // Vendor ID: ASUS.
15 const PID: u16 = 0x19AF; // Product ID: AURA LED Controller.
16
17 pub fn get_device(api: &hidapi::HidApi) -> hidapi::HidDevice {
18 api.open(VID, PID).unwrap()
19 }
20
21 pub fn get_firmware_string(device: &hidapi::HidDevice) -> String {
22 let mut buffer = [0u8; 65];
23 buffer[0] = 0xEC;
24 buffer[1] = AURA_REQUEST_FIRMWARE_VERSION;
25 let n_write = device.write(&buffer).unwrap();
26 assert_eq!(n_write, 65);
27
28 buffer.fill(0);
29 let n_read = device.read(&mut buffer).unwrap();
30 assert_eq!(n_read, 65);
31 assert_eq!(buffer[0], 0xEC);
32 assert_eq!(buffer[1], 0x02);
33
34 String::from(str::from_utf8(&buffer[2..17]).unwrap())
35 }
36
37 pub fn get_configuration_table(device: &hidapi::HidDevice) -> [u8; 60] {
38 let mut buffer = [0u8; 65];
39 buffer[0] = 0xEC;
40 buffer[1] = AURA_REQUEST_CONFIG_TABLE;
41 let n_write = device.write(&buffer).unwrap();
42 assert_eq!(n_write, 65);
43
44 buffer.fill(0);
45 let n_read = device.read(&mut buffer).unwrap();
46 assert_eq!(n_read, 65);
47 assert_eq!(buffer[0], 0xEC);
48 assert_eq!(buffer[1], 0x30);
49
50 buffer[4..64]
51 .try_into()
52 .expect("slice with incorrect length")
53 }
54
55 // TODO: it seems this doesn't work.
56 // The mode is set by OpenRGB prior launching temp2RGB for the moment.
57 pub fn set_fixed_mode(device: &hidapi::HidDevice) {
58 let mut buffer = [0u8; 65];
59 buffer[0] = 0xEC;
60 buffer[1] = 0x35;
61 buffer[2] = 0x00; // Channel effect id = Fixed.
62 buffer[5] = 0x01; // Mode id = static.
63
64 let n_write = device.write(&buffer).unwrap();
65 assert_eq!(n_write, 65);
66 }
67
68 pub fn set_color(device: &hidapi::HidDevice, color: &RGB) {
69 let mut buffer = [0u8; 65];
70 buffer[0] = 0xEC;
71 buffer[1] = 0x36;
72 buffer[2] = 0x00; // 16 bits LED mask: first part.
73 buffer[3] = 0x02; // 16 bits LED mask: second part.
74
75 // Don't know why the first LED isn't used.
76 // buffer[5] = color.red;
77 // buffer[6] = color.green;
78 // buffer[7] = color.blue;
79
80 // // Set second LED.
81 buffer[8] = color.red;
82 buffer[9] = color.green;
83 buffer[10] = color.blue;
84
85 let n_write = device.write(&buffer).unwrap();
86 assert_eq!(n_write, 65);
87 }
88
89 pub fn save_current_color(device: &hidapi::HidDevice) {
90 let mut buffer = [0u8; 65];
91 buffer[0] = 0xEC;
92 buffer[1] = 0x3F;
93 buffer[2] = 0x55;
94
95 let n_write = device.write(&buffer).unwrap();
96 assert_eq!(n_write, 65);
97 }