diff --git a/examples/blink_keyboard_leds.rs b/examples/blink_keyboard_leds.rs index 3d7c3c8..bd20874 100644 --- a/examples/blink_keyboard_leds.rs +++ b/examples/blink_keyboard_leds.rs @@ -8,23 +8,23 @@ fn main() { println!("Blinking the Keyboard LEDS..."); for i in 0..5 { let on = i % 2 != 0; - d.send_event(&InputEvent::new( - EventType::LED, - LedType::LED_CAPSL.0, - if on { i32::MAX } else { 0 }, - )) - .unwrap(); - d.send_event(&InputEvent::new( - EventType::LED, - LedType::LED_NUML.0, - if on { i32::MAX } else { 0 }, - )) - .unwrap(); - d.send_event(&InputEvent::new( - EventType::LED, - LedType::LED_SCROLLL.0, - if on { i32::MAX } else { 0 }, - )) + d.send_events(&[ + InputEvent::new( + EventType::LED, + LedType::LED_CAPSL.0, + if on { i32::MAX } else { 0 }, + ), + InputEvent::new( + EventType::LED, + LedType::LED_NUML.0, + if on { i32::MAX } else { 0 }, + ), + InputEvent::new( + EventType::LED, + LedType::LED_SCROLLL.0, + if on { i32::MAX } else { 0 }, + ), + ]) .unwrap(); std::thread::sleep(std::time::Duration::from_secs(1)); } diff --git a/src/raw_stream.rs b/src/raw_stream.rs index ddfa403..d6c5a71 100644 --- a/src/raw_stream.rs +++ b/src/raw_stream.rs @@ -1,4 +1,5 @@ use std::fs::{File, OpenOptions}; +use std::io::Write; use std::mem::MaybeUninit; use std::os::unix::io::{AsRawFd, RawFd}; use std::path::Path; @@ -616,15 +617,10 @@ impl RawDevice { /// Events that are typically sent to devices are /// [EventType::LED] (turn device LEDs on and off), /// [EventType::SOUND] (play a sound on the device) - /// and [EventType::FORCEFEEDBACK] (play force feedback events on the device, i.e. rumble). - pub fn send_event(&mut self, event: &InputEvent) -> io::Result<()> { - let raw_event = event.as_ref(); - let bytes_written = unsafe { - let buf = crate::cast_to_bytes(raw_event); - nix::unistd::write(self.as_raw_fd(), buf)? - }; - debug_assert_eq!(bytes_written, mem::size_of_val(raw_event)); - Ok(()) + /// and [EventType::FORCEFEEDBACK] (play force feedback effects on the device, i.e. rumble). + pub fn send_events(&mut self, events: &[InputEvent]) -> io::Result<()> { + let bytes = unsafe { crate::cast_to_bytes(events) }; + self.file.write_all(bytes) } } diff --git a/src/sync_stream.rs b/src/sync_stream.rs index 6c3b8c9..3e8d3b1 100644 --- a/src/sync_stream.rs +++ b/src/sync_stream.rs @@ -348,9 +348,9 @@ impl Device { /// Events that are typically sent to devices are /// [EventType::LED] (turn device LEDs on and off), /// [EventType::SOUND] (play a sound on the device) - /// and [EventType::FORCEFEEDBACK] (play force feedback events on the device, i.e. rumble). - pub fn send_event(&mut self, event: &InputEvent) -> io::Result<()> { - self.raw.send_event(event) + /// and [EventType::FORCEFEEDBACK] (play force feedback effects on the device, i.e. rumble). + pub fn send_events(&mut self, events: &[InputEvent]) -> io::Result<()> { + self.raw.send_events(events) } }