diff --git a/examples/per-key-effect-2.rs b/examples/per-key-effect-2.rs index beaeb806..038e7cbc 100644 --- a/examples/per-key-effect-2.rs +++ b/examples/per-key-effect-2.rs @@ -22,23 +22,8 @@ fn main() -> Result<(), Box> { let mut per_key_led = Vec::new(); let mut key_colours = KeyColourArray::new(); - key_colours.set(Key::ROG, 255, 0, 0); - key_colours.set(Key::L, 255, 0, 0); - key_colours.set(Key::I, 255, 0, 0); - key_colours.set(Key::N, 255, 0, 0); - key_colours.set(Key::U, 255, 0, 0); - key_colours.set(Key::X, 255, 0, 0); per_key_led.push(key_colours.clone()); - for _ in 0..49 { - *key_colours.key(Key::ROG).0 -= 5; - *key_colours.key(Key::L).0 -= 5; - *key_colours.key(Key::I).0 -= 5; - *key_colours.key(Key::N).0 -= 5; - *key_colours.key(Key::U).0 -= 5; - *key_colours.key(Key::X).0 -= 5; - per_key_led.push(key_colours.clone()); - } for _ in 0..49 { *key_colours.key(Key::ROG).0 += 5; *key_colours.key(Key::L).0 += 5; @@ -49,7 +34,18 @@ fn main() -> Result<(), Box> { per_key_led.push(key_colours.clone()); } - let time = time::Duration::from_millis(1200); + for _ in 0..49 { + *key_colours.key(Key::ROG).0 -= 5; + *key_colours.key(Key::L).0 -= 5; + *key_colours.key(Key::I).0 -= 5; + *key_colours.key(Key::N).0 -= 5; + *key_colours.key(Key::U).0 -= 5; + *key_colours.key(Key::X).0 -= 5; + per_key_led.push(key_colours.clone()); + } + + // It takes the EC 20ms to process a single colour block + let time = time::Duration::from_millis(20); let row = KeyColourArray::get_init_msg(); let msg = @@ -61,6 +57,7 @@ fn main() -> Result<(), Box> { thread::sleep(time); for group in &per_key_led { + thread::sleep(time); let group = group.get(); let msg = Message::new_method_call(DBUS_NAME, DBUS_PATH, DBUS_IFACE, "ledeffect")? .append1(&group[0].to_vec()) @@ -78,6 +75,6 @@ fn main() -> Result<(), Box> { let after = std::time::Instant::now(); let diff = after.duration_since(now); dbg!(diff.as_millis()); - return Ok(()); + //return Ok(()); } } diff --git a/examples/per-key-effect.rs b/examples/per-key-effect.rs index d8b4bdae..da0ac1b2 100644 --- a/examples/per-key-effect.rs +++ b/examples/per-key-effect.rs @@ -22,24 +22,24 @@ fn main() -> Result<(), Box> { let mut per_key_led = Vec::new(); let mut key_colours = KeyColourArray::new(); - key_colours.set(Key::ROG, 255, 0, 0); - key_colours.set(Key::L, 255, 0, 0); - key_colours.set(Key::I, 255, 0, 0); - key_colours.set(Key::N, 255, 0, 0); - key_colours.set(Key::U, 255, 0, 0); - key_colours.set(Key::X, 255, 0, 0); + // key_colours.set(Key::ROG, 0, 0, 0); + // key_colours.set(Key::L, 0, 0, 0); + // key_colours.set(Key::I, 0, 0, 0); + // key_colours.set(Key::N, 0, 0, 0); + // key_colours.set(Key::U, 0, 0, 0); + // key_colours.set(Key::X, 0, 0, 0); per_key_led.push(key_colours.clone()); - for _ in 0..46 { - *key_colours.key(Key::ROG).0 -= 5; - *key_colours.key(Key::L).0 -= 5; - *key_colours.key(Key::I).0 -= 5; - *key_colours.key(Key::N).0 -= 5; - *key_colours.key(Key::U).0 -= 5; - *key_colours.key(Key::X).0 -= 5; - per_key_led.push(key_colours.clone()); - } - for _ in 0..46 { + // for _ in 0..49 { + // *key_colours.key(Key::ROG).0 -= 5; + // *key_colours.key(Key::L).0 -= 5; + // *key_colours.key(Key::I).0 -= 5; + // *key_colours.key(Key::N).0 -= 5; + // *key_colours.key(Key::U).0 -= 5; + // *key_colours.key(Key::X).0 -= 5; + // per_key_led.push(key_colours.clone()); + // } + for _ in 0..49 { *key_colours.key(Key::ROG).0 += 5; *key_colours.key(Key::L).0 += 5; *key_colours.key(Key::I).0 += 5; @@ -49,7 +49,7 @@ fn main() -> Result<(), Box> { per_key_led.push(key_colours.clone()); } - let time = time::Duration::from_micros(1600); + let time = time::Duration::from_millis(2); let row = KeyColourArray::get_init_msg(); let msg = @@ -73,5 +73,6 @@ fn main() -> Result<(), Box> { let after = std::time::Instant::now(); let diff = after.duration_since(now); dbg!(diff.as_millis()); + //return Ok(()); } } diff --git a/src/core.rs b/src/core.rs index 7692e7e8..2fa72da8 100644 --- a/src/core.rs +++ b/src/core.rs @@ -128,11 +128,24 @@ impl RogCore { } pub fn aura_write(&mut self, message: &[u8]) -> Result<(), AuraError> { + let now = std::time::Instant::now(); match self .handle .write_interrupt(self.led_endpoint, message, Duration::from_millis(1)) { - Ok(_) => {} + Ok(_) => { + let after = std::time::Instant::now(); + let diff = after.duration_since(now); + dbg!(diff.as_micros()); + // let mut buf = [0u8; 32]; + // if let Ok(_) = self.handle.read_interrupt( + // self.led_endpoint, + // &mut buf, + // Duration::from_millis(1), + // ) { + // println!("{:X?}", buf); + // } + } Err(err) => match err { rusb::Error::Timeout => {} _ => error!("Failed to read keyboard interrupt: {:?}", err), diff --git a/src/daemon.rs b/src/daemon.rs index 8fe0a294..da83698f 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -130,7 +130,10 @@ pub fn start_daemon() -> Result<(), Box> { // A no-comp loop takes 2 milliseconds // With effect, up to 16ms // With single write, 3ms - // Actual EC for keyboard seems to take longer to process + // Actual EC for keyboard seems to take longer to process, something like + // 2ms per line in, so 20ms per colour block? + // + // rusb is slow. Wireshark caps show speed in nanoseconds //thread::sleep(Duration::from_millis(2)); connection .process(Duration::from_millis(20)) @@ -142,14 +145,19 @@ pub fn start_daemon() -> Result<(), Box> { // 700u per write if let Ok(mut lock) = input.try_borrow_mut() { if let Some(bytes) = &*lock { + // It takes up to 10 milliseconds to write a complete colour block here + // let now = std::time::Instant::now(); rogcore.aura_set_and_save(&supported, &bytes)?; *lock = None; + // let after = std::time::Instant::now(); + // let diff = after.duration_since(now); + // dbg!(diff.as_millis()); } } if let Ok(mut lock) = effect.try_borrow_mut() { if let Some(bytes) = &*lock { - // It takes up to 10 milliseconds to write a complete colour block... + // It takes up to 10 milliseconds to write a complete colour block and here // let now = std::time::Instant::now(); for row in bytes { rogcore.aura_write(&row)?;