+ assert_eq!(buffer[0], 0);
+ }
+
+ pub fn set_color(&self, color: &RGB) {
+ // println!("set_color: {color:?}");
+ for channel_id in 0..CHANNEL_COUNT {
+ self.send_port_state(channel_id, CORSAIR_LIGHTING_NODE_PORT_STATE_SOFTWARE);
+
+ let mut buffer = [0u8; 65];
+
+ for color_channel in [
+ CORSAIR_LIGHTING_NODE_DIRECT_CHANNEL_RED,
+ CORSAIR_LIGHTING_NODE_DIRECT_CHANNEL_GREEN,
+ CORSAIR_LIGHTING_NODE_DIRECT_CHANNEL_BLUE,
+ ] {
+ buffer[0x01] = CORSAIR_LIGHTING_NODE_PACKET_ID_DIRECT;
+ buffer[0x02] = channel_id;
+ buffer[0x04] = NB_LEDS; // Number of color;
+ buffer[0x05] = color_channel;
+
+ let color_component = match color_channel {
+ 0 => color.red,
+ 1 => color.green,
+ _ => color.blue,
+ };
+
+ for n in 0..NB_LEDS {
+ buffer[0x06 + n as usize] = color_component;
+ }
+
+ let n_write = self.device.write(&buffer).unwrap();
+ assert_eq!(n_write, 65);
+
+ let n_read = self.device.read(&mut buffer[0..16]).unwrap();
+ assert_eq!(n_read, 16);
+ assert_eq!(buffer[0], 0);
+ }
+
+ self.send_commit(channel_id);
+ }