67 lines
3.3 KiB
Rust
67 lines
3.3 KiB
Rust
|
|
use moa_core::host::Key;
|
|
|
|
#[inline(always)]
|
|
pub fn set_bit(data: &mut [u8; 8], index: usize, bit: u8, state: bool) {
|
|
let mask = 1 << bit;
|
|
data[index] = (data[index] & !mask) | (if state { mask } else { 0 });
|
|
}
|
|
|
|
pub fn record_key_press(data: &mut [u8; 8], key: Key, state: bool) {
|
|
match key {
|
|
Key::Backquote => set_bit(data, 0, 0, state),
|
|
Key::A => set_bit(data, 0, 1, state),
|
|
Key::B => set_bit(data, 0, 2, state),
|
|
Key::C => set_bit(data, 0, 3, state),
|
|
Key::D => set_bit(data, 0, 4, state),
|
|
Key::E => set_bit(data, 0, 5, state),
|
|
Key::F => set_bit(data, 0, 6, state),
|
|
Key::G => set_bit(data, 0, 7, state),
|
|
Key::H => set_bit(data, 1, 0, state),
|
|
Key::I => set_bit(data, 1, 1, state),
|
|
Key::J => set_bit(data, 1, 2, state),
|
|
Key::K => set_bit(data, 1, 3, state),
|
|
Key::L => set_bit(data, 1, 4, state),
|
|
Key::M => set_bit(data, 1, 5, state),
|
|
Key::N => set_bit(data, 1, 6, state),
|
|
Key::O => set_bit(data, 1, 7, state),
|
|
Key::P => set_bit(data, 2, 0, state),
|
|
Key::Q => set_bit(data, 2, 1, state),
|
|
Key::R => set_bit(data, 2, 2, state),
|
|
Key::S => set_bit(data, 2, 3, state),
|
|
Key::T => set_bit(data, 2, 4, state),
|
|
Key::U => set_bit(data, 2, 5, state),
|
|
Key::V => set_bit(data, 2, 6, state),
|
|
Key::W => set_bit(data, 2, 7, state),
|
|
Key::X => set_bit(data, 3, 0, state),
|
|
Key::Y => set_bit(data, 3, 1, state),
|
|
Key::Z => set_bit(data, 3, 2, state),
|
|
Key::Num0 => set_bit(data, 4, 0, state),
|
|
Key::Num1 => set_bit(data, 4, 1, state),
|
|
Key::Num2 => set_bit(data, 4, 2, state),
|
|
Key::Num3 => set_bit(data, 4, 3, state),
|
|
Key::Num4 => set_bit(data, 4, 4, state),
|
|
Key::Num5 => set_bit(data, 4, 5, state),
|
|
Key::Num6 => set_bit(data, 4, 6, state),
|
|
Key::Num7 => set_bit(data, 4, 7, state),
|
|
Key::Num8 => set_bit(data, 5, 0, state),
|
|
Key::Num9 => set_bit(data, 5, 1, state),
|
|
Key::LeftBracket => set_bit(data, 5, 2, state),
|
|
Key::RightBracket => set_bit(data, 5, 3, state),
|
|
Key::Comma => set_bit(data, 5, 4, state),
|
|
Key::Equals => set_bit(data, 5, 5, state),
|
|
Key::Period => set_bit(data, 5, 6, state),
|
|
Key::Enter => set_bit(data, 6, 0, state),
|
|
Key::PrintScreen => set_bit(data, 6, 1, state),
|
|
Key::Pause => set_bit(data, 6, 2, state),
|
|
Key::Up => set_bit(data, 6, 3, state),
|
|
Key::Down => set_bit(data, 6, 4, state),
|
|
Key::Left => set_bit(data, 6, 5, state),
|
|
Key::Right => set_bit(data, 6, 6, state),
|
|
Key::Space => set_bit(data, 6, 7, state),
|
|
Key::LeftShift | Key::RightShift => set_bit(data, 7, 0, state),
|
|
_ => { },
|
|
}
|
|
}
|
|
|