This commit is contained in:
Luke
2020-04-25 08:45:23 +12:00
parent f05103b5c9
commit 7be66f31e8
4 changed files with 56 additions and 37 deletions

View File

@@ -22,23 +22,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut per_key_led = Vec::new(); let mut per_key_led = Vec::new();
let mut key_colours = KeyColourArray::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()); 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 { for _ in 0..49 {
*key_colours.key(Key::ROG).0 += 5; *key_colours.key(Key::ROG).0 += 5;
*key_colours.key(Key::L).0 += 5; *key_colours.key(Key::L).0 += 5;
@@ -49,7 +34,18 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
per_key_led.push(key_colours.clone()); 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 row = KeyColourArray::get_init_msg();
let msg = let msg =
@@ -61,6 +57,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
thread::sleep(time); thread::sleep(time);
for group in &per_key_led { for group in &per_key_led {
thread::sleep(time);
let group = group.get(); let group = group.get();
let msg = Message::new_method_call(DBUS_NAME, DBUS_PATH, DBUS_IFACE, "ledeffect")? let msg = Message::new_method_call(DBUS_NAME, DBUS_PATH, DBUS_IFACE, "ledeffect")?
.append1(&group[0].to_vec()) .append1(&group[0].to_vec())
@@ -78,6 +75,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let after = std::time::Instant::now(); let after = std::time::Instant::now();
let diff = after.duration_since(now); let diff = after.duration_since(now);
dbg!(diff.as_millis()); dbg!(diff.as_millis());
return Ok(()); //return Ok(());
} }
} }

View File

@@ -22,24 +22,24 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut per_key_led = Vec::new(); let mut per_key_led = Vec::new();
let mut key_colours = KeyColourArray::new(); let mut key_colours = KeyColourArray::new();
key_colours.set(Key::ROG, 255, 0, 0); // key_colours.set(Key::ROG, 0, 0, 0);
key_colours.set(Key::L, 255, 0, 0); // key_colours.set(Key::L, 0, 0, 0);
key_colours.set(Key::I, 255, 0, 0); // key_colours.set(Key::I, 0, 0, 0);
key_colours.set(Key::N, 255, 0, 0); // key_colours.set(Key::N, 0, 0, 0);
key_colours.set(Key::U, 255, 0, 0); // key_colours.set(Key::U, 0, 0, 0);
key_colours.set(Key::X, 255, 0, 0); // key_colours.set(Key::X, 0, 0, 0);
per_key_led.push(key_colours.clone()); 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::ROG).0 -= 5;
*key_colours.key(Key::L).0 -= 5; // *key_colours.key(Key::L).0 -= 5;
*key_colours.key(Key::I).0 -= 5; // *key_colours.key(Key::I).0 -= 5;
*key_colours.key(Key::N).0 -= 5; // *key_colours.key(Key::N).0 -= 5;
*key_colours.key(Key::U).0 -= 5; // *key_colours.key(Key::U).0 -= 5;
*key_colours.key(Key::X).0 -= 5; // *key_colours.key(Key::X).0 -= 5;
per_key_led.push(key_colours.clone()); // 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::ROG).0 += 5;
*key_colours.key(Key::L).0 += 5; *key_colours.key(Key::L).0 += 5;
*key_colours.key(Key::I).0 += 5; *key_colours.key(Key::I).0 += 5;
@@ -49,7 +49,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
per_key_led.push(key_colours.clone()); 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 row = KeyColourArray::get_init_msg();
let msg = let msg =
@@ -73,5 +73,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let after = std::time::Instant::now(); let after = std::time::Instant::now();
let diff = after.duration_since(now); let diff = after.duration_since(now);
dbg!(diff.as_millis()); dbg!(diff.as_millis());
//return Ok(());
} }
} }

View File

@@ -128,11 +128,24 @@ impl RogCore {
} }
pub fn aura_write(&mut self, message: &[u8]) -> Result<(), AuraError> { pub fn aura_write(&mut self, message: &[u8]) -> Result<(), AuraError> {
let now = std::time::Instant::now();
match self match self
.handle .handle
.write_interrupt(self.led_endpoint, message, Duration::from_millis(1)) .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 { Err(err) => match err {
rusb::Error::Timeout => {} rusb::Error::Timeout => {}
_ => error!("Failed to read keyboard interrupt: {:?}", err), _ => error!("Failed to read keyboard interrupt: {:?}", err),

View File

@@ -130,7 +130,10 @@ pub fn start_daemon() -> Result<(), Box<dyn Error>> {
// A no-comp loop takes 2 milliseconds // A no-comp loop takes 2 milliseconds
// With effect, up to 16ms // With effect, up to 16ms
// With single write, 3ms // 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)); //thread::sleep(Duration::from_millis(2));
connection connection
.process(Duration::from_millis(20)) .process(Duration::from_millis(20))
@@ -142,14 +145,19 @@ pub fn start_daemon() -> Result<(), Box<dyn Error>> {
// 700u per write // 700u per write
if let Ok(mut lock) = input.try_borrow_mut() { if let Ok(mut lock) = input.try_borrow_mut() {
if let Some(bytes) = &*lock { 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)?; rogcore.aura_set_and_save(&supported, &bytes)?;
*lock = None; *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 Ok(mut lock) = effect.try_borrow_mut() {
if let Some(bytes) = &*lock { 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(); // let now = std::time::Instant::now();
for row in bytes { for row in bytes {
rogcore.aura_write(&row)?; rogcore.aura_write(&row)?;