[−][src]Crate keycode
A Rust crate for translating keycodes based on Chrome's mapping of keys.
Easily convert, generate, listen for, or map keycodes for Linux, Windows, Mac, USB, and
browsers! Includes a struct
to manage the state of pressed keys and generate USB HID reports.
Can be used for #![no_std]
crates.
Source of keycodes data:
- Repo: https://chromium.googlesource.com/chromium/src.git
- File: https://chromium.googlesource.com/chromium/src.git/+/master/ui/events/keycodes/dom/keycode_converter_data.inc
- Git commit:
2b6022954b9fb600f15e08002a148187f4f986da
Example: get a key mapping
use keycode::{KeyMap, KeyMappingId}; // Check the USB HID value of the "a" key fn main() { let a = KeyMap::from(KeyMappingId::US_A); assert_eq!(a.usb, 0x0004); assert_eq!(a.evdev, 0x001e); assert_eq!(a.xkb, 0x0026); assert_eq!(a.win, 0x001e); assert_eq!(a.mac, 0x0000); }
Example: generate a USB HID report
use keycode::{KeyboardState, KeyMap, KeyMappingId, KeyState}; // Press and release the "A" key fn main() { // Generate a keyboard state with n-key rollover let mut keyboard_state = KeyboardState::new(None); // Get key mappings let a = KeyMap::from(KeyMappingId::US_A); let shift = KeyMap::from(KeyMappingId::SHIFT_LEFT); // USB HID report for "no keys pressed" assert_eq!(keyboard_state.usb_input_report(), &[0; 8]); // Press "shift" and "a" keys keyboard_state.update_key(a, KeyState::Pressed); keyboard_state.update_key(shift, KeyState::Pressed); // USB HID report for "'A' is pressed" assert_eq!( keyboard_state.usb_input_report(), &[shift.modifier.unwrap().bits(), 0, a.usb as u8, 0, 0, 0, 0, 0] ); // Release "shift" and "a" keys keyboard_state.update_key(a, KeyState::Released); keyboard_state.update_key(shift, KeyState::Released); // USB HID report for "no keys pressed" assert_eq!(keyboard_state.usb_input_report(), &[0; 8]); }
Structs
KeyMap | Ergonomic access to a specific key's mapping of values |
KeyModifiers | Bitmask for key modifiers based on the USB HID standard |
KeyboardState | Keyboard state that helps manage pressed keys, rollover, and generating USB HID reports |
Enums
KeyMapping | The mapping of values between platforms for a specific key |
KeyMappingCode | W3 browser event code for a specific key |
KeyMappingId | Id for a specific key |
KeyState | State of any key, whether it is pressed or not |
Constants
NUM_KEYS | Max keys is 235, but this is the size of array used to manage state |