Skip to content

Commit 119e32a

Browse files
Add some examples.
1 parent 6cb7c88 commit 119e32a

File tree

4 files changed

+145
-0
lines changed

4 files changed

+145
-0
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ keywords = ["arm", "cortex-m", "template", "video", "menu"]
77
categories = ["embedded", "no-std"]
88
license = "MIT OR Apache-2.0"
99
repository = "https://github.com/rust-embedded-community/pc-keyboard.git"
10+
edition = "2021"
1011

1112
[dependencies]

examples/decoder.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
use pc_keyboard::Ps2Decoder;
2+
3+
fn main() {
4+
let mut decoder = Ps2Decoder::new();
5+
6+
// If you get all 11 bits as on `u16`
7+
match decoder.add_word(0x0402) {
8+
Ok(byte) => println!("Word 0x0402 is byte 0x{:02x}", byte),
9+
Err(e) => println!("Word 0x0402 failed to decode: {:?}", e),
10+
}
11+
12+
// If you get a bit at a time
13+
for bit in [
14+
false, true, false, false, false, false, false, false, false, false, true,
15+
] {
16+
match decoder.add_bit(bit) {
17+
Ok(None) => println!("Added {}, not enough bits yet!", bit as u8),
18+
Ok(Some(byte)) => println!("Added {}, got byte 0x{byte:02x}", bit as u8),
19+
Err(e) => println!("Failed to decode: {e:?}"),
20+
}
21+
}
22+
23+
// Flipped a random bit, so we get a parity error
24+
for bit in [
25+
false, true, false, false, false, false, true, false, false, false, true,
26+
] {
27+
match decoder.add_bit(bit) {
28+
Ok(None) => println!("Added {}, not enough bits yet!", bit as u8),
29+
Ok(Some(byte)) => println!("Added {}, got byte 0x{byte:02x}", bit as u8),
30+
Err(e) => println!("Failed to decode: {e:?}"),
31+
}
32+
}
33+
}

examples/layout.rs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use pc_keyboard::{
2+
layouts::{AnyLayout, Uk105Key},
3+
DecodedKey, EventDecoder, KeyCode, KeyEvent, KeyState,
4+
};
5+
6+
fn main() {
7+
let mut decoder = EventDecoder::new(
8+
AnyLayout::Uk105Key(Uk105Key),
9+
pc_keyboard::HandleControl::Ignore,
10+
);
11+
12+
// User presses 'A' on their UK keyboard, gets a lower-case 'a'.
13+
let decoded_key = decoder.process_keyevent(KeyEvent {
14+
code: KeyCode::A,
15+
state: KeyState::Down,
16+
});
17+
assert_eq!(Some(DecodedKey::Unicode('a')), decoded_key);
18+
println!("Got {:?}", decoded_key);
19+
20+
// User releases 'A' on their UK keyboard
21+
let decoded_key = decoder.process_keyevent(KeyEvent {
22+
code: KeyCode::A,
23+
state: KeyState::Up,
24+
});
25+
assert_eq!(None, decoded_key);
26+
27+
// User presses 'Shift' on their UK keyboard
28+
let decoded_key = decoder.process_keyevent(KeyEvent {
29+
code: KeyCode::LShift,
30+
state: KeyState::Down,
31+
});
32+
assert_eq!(None, decoded_key);
33+
34+
// User presses 'A' on their UK keyboard, now gets a Capital A
35+
let decoded_key = decoder.process_keyevent(KeyEvent {
36+
code: KeyCode::A,
37+
state: KeyState::Down,
38+
});
39+
assert_eq!(Some(DecodedKey::Unicode('A')), decoded_key);
40+
println!("Got {:?}", decoded_key);
41+
42+
// User releases 'A' on their UK keyboard
43+
let decoded_key = decoder.process_keyevent(KeyEvent {
44+
code: KeyCode::A,
45+
state: KeyState::Up,
46+
});
47+
assert_eq!(None, decoded_key);
48+
49+
// User releases 'Shift' on their UK keyboard
50+
let decoded_key = decoder.process_keyevent(KeyEvent {
51+
code: KeyCode::LShift,
52+
state: KeyState::Up,
53+
});
54+
assert_eq!(None, decoded_key);
55+
}

examples/scancodes.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use pc_keyboard::{KeyEvent, ScancodeSet, ScancodeSet1, ScancodeSet2};
2+
3+
fn main() {
4+
let mut s = ScancodeSet1::new();
5+
// [ 0x01 ] means "Pressed Escape" in Set 1
6+
match s.advance_state(0x01) {
7+
Ok(Some(KeyEvent { code, state })) => {
8+
println!("Scancode Set 1 0x01 is KeyCode '{code:?}' KeyState '{state:?}'");
9+
}
10+
Ok(None) => {
11+
println!("This is wrong, we didn't think that was a complete sequence");
12+
}
13+
Err(e) => {
14+
println!("There was an error: {e:?}");
15+
}
16+
}
17+
// [ 0x81 ] means "Released Escape" in Set 1
18+
match s.advance_state(0x81) {
19+
Ok(Some(KeyEvent { code, state })) => {
20+
println!("Scancode Set 1 0x81 is KeyCode '{code:?}' KeyState '{state:?}'");
21+
}
22+
Ok(None) => {
23+
println!("This is wrong, we didn't think that was a complete sequence");
24+
}
25+
Err(e) => {
26+
println!("There was an error: {e:?}");
27+
}
28+
}
29+
30+
let mut s = ScancodeSet2::new();
31+
// [ 0x01 ] means "Pressed F9" in Set 2
32+
match s.advance_state(0x01) {
33+
Ok(Some(KeyEvent { code, state })) => {
34+
println!("Scancode Set 2 0x01 is KeyCode '{code:?}' KeyState '{state:?}'");
35+
}
36+
Ok(None) => {
37+
println!("This is wrong, we didn't think that was a complete sequence");
38+
}
39+
Err(e) => {
40+
println!("There was an error: {e:?}");
41+
}
42+
}
43+
// [ 0xF0, 0x01 ] means "Released F9" in Set 2
44+
assert_eq!(Ok(None), s.advance_state(0xF0));
45+
match s.advance_state(0x01) {
46+
Ok(Some(KeyEvent { code, state })) => {
47+
println!("Scancode Set 2 0xF0 0x01 is KeyCode '{code:?}' KeyState '{state:?}'");
48+
}
49+
Ok(None) => {
50+
println!("This is wrong, we didn't think that was a complete sequence");
51+
}
52+
Err(e) => {
53+
println!("There was an error: {e:?}");
54+
}
55+
}
56+
}

0 commit comments

Comments
 (0)