Crates.io | keycode |
lib.rs | keycode |
version | 0.4.0 |
source | src |
created_at | 2019-01-22 08:12:49.726502 |
updated_at | 2022-09-01 00:50:48.557016 |
description | A Rust crate for translating keycodes based on Chrome's mapping of keys. |
homepage | https://github.com/dfrankland/keycode |
repository | https://github.com/dfrankland/keycode |
max_upload_size | |
id | 109951 |
size | 14,655 |
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:
2b6022954b9fb600f15e08002a148187f4f986da
How to update source file:
curl -sL 'https://chromium.googlesource.com/chromium/src/+/master/ui/events/keycodes/dom/keycode_converter_data.inc?format=TEXT' | base64 --decode > keycode_converter_data.inc
use keycode::{KeyMap, KeyMappingId};
// Check the USB HID value of the "a" key
fn main() {
let a = KeyMap::from(KeyMappingId::UsA);
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);
}
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::UsA);
let shift = KeyMap::from(KeyMappingId::ShiftLeft);
// 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]);
}
Requires Rust 1.34.0 or newer due to use of TryFrom.