rpk_firmware/
lib.rs

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;