8个版本
0.4.0 | 2022年9月1日 |
---|---|
0.3.0 | 2020年1月2日 |
0.2.2 | 2019年7月8日 |
0.1.2 | 2019年6月18日 |
0.1.1 | 2019年1月27日 |
#677 在 操作系统
3,109 每月下载量
用于 3 crates
17KB
191 行
keycode
基于Chrome键映射的Rust crate,用于转换键码。
轻松转换、生成、监听或映射Linux、Windows、Mac、USB和浏览器的键码!包括一个 struct
来管理按下的键的状态并生成USB HID报告。可用于 #![no_std]
crates。
源数据
键码数据源
- 仓库:https://chromium.googlesource.com/chromium/src.git
- 文件:https://chromium.googlesource.com/chromium/src.git/+/master/ui/events/keycodes/dom/keycode_converter_data.inc
- Git提交:
2b6022954b9fb600f15e08002a148187f4f986da
如何更新源文件
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);
}
生成USB HID报告
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]);
}
支持的Rust版本
由于使用了 TryFrom,需要Rust 1.34.0或更高版本。
依赖
~0.9–1.2MB
~21K SLoC