1#![no_std]
2pub mod config;
3pub mod exec;
4pub mod firmware_functions;
5pub mod hid;
6pub mod key_reporter;
7pub mod key_scanner;
8pub mod layout;
9pub mod norflash_ring_fs;
10pub mod ring_fs;
11pub mod mapper;
12pub mod usb;
13
14#[macro_use]
15mod macros;
16
17pub use exec::KeyboardBuilder;
18
19pub const KEY_BITS_SIZE: usize = 32;
20
21fn add_bit<const SIZE: usize>(keys_down: &mut [u8], kc: u8) -> bool {
22 let i = (kc >> 3) as usize;
23 if i > SIZE {
24 crate::error!("invalid key! {}", kc);
25 return false;
26 }
27 let bp = 1 << (kc & 7);
28 let old = keys_down[i];
29 keys_down[i] |= bp;
30 old & bp == 0
31}
32
33fn del_bit<const SIZE: usize>(keys_down: &mut [u8], kc: u8) -> bool {
34 let i = (kc >> 3) as usize;
35 if i > SIZE {
36 crate::error!("invalid key! {}", kc);
37 return false;
38 }
39 let bp = !(1 << (kc & 7));
40 let old = keys_down[i];
41 keys_down[i] &= bp;
42 old | bp == 0xff
43}
44
45fn add_key_bit(keys_down: &mut [u8], kc: u8) -> bool {
46 add_bit::<KEY_BITS_SIZE>(keys_down, kc)
47}
48
49fn del_key_bit(keys_down: &mut [u8], kc: u8) -> bool {
50 del_bit::<KEY_BITS_SIZE>(keys_down, kc)
51}
52
53#[cfg(test)]
54#[path = "lib_test.rs"]
55mod test;