diff options
Diffstat (limited to 'src/machine/key.rs')
| -rw-r--r-- | src/machine/key.rs | 297 |
1 files changed, 147 insertions, 150 deletions
diff --git a/src/machine/key.rs b/src/machine/key.rs index 3464d83..250b38d 100644 --- a/src/machine/key.rs +++ b/src/machine/key.rs @@ -2,166 +2,163 @@ use self::super::kbd_defs::*; use core::convert; pub struct Key { - asc: u8, - scan: u8, - modi: u8, - rawcode: u8, // this field not necessary, remove after testing + asc: u8, + scan: u8, + modi: u8, + rawcode: u8, // this field not necessary, remove after testing } // Not implementing // +operator char() // -impl convert::Into<char> for Key{ - fn into(self) -> char { - self.asc as char - } +impl convert::Into<char> for Key { + fn into(self) -> char { + self.asc as char + } } -impl convert::Into<u8> for Key{ - fn into(self) -> u8 { - self.asc - } +impl convert::Into<u8> for Key { + fn into(self) -> u8 { + self.asc + } } #[allow(dead_code)] impl Key { - pub fn new() -> Self { - Self { - asc: 0, - scan: 0, - modi: 0, - rawcode: 0, - } - } - - pub fn valid(self) -> bool { - self.scan != 0 - } - - pub fn invalidate(&mut self) { - self.scan = 0; - } - - pub fn set_raw(&mut self, code:u8) { - self.rawcode = code; - } - - pub fn get_raw(self) -> u8 { - self.rawcode - } - - // setter and getter for ascii and scancode - pub fn set_ascii(&mut self, ascii: u8) { - self.asc = ascii; - } - pub fn get_ascii(self) -> u8 { - self.asc - } - pub fn set_scancode(&mut self, scancode: u8) { - self.scan = scancode; - } - pub fn get_scancode(self) -> u8 { - self.scan - } - - // reading the state of SHIFT, ALT, CTRL etc. - pub fn shift(&self) -> bool { - self.modi & (Mbit::Shift as u8) != 0 - } - pub fn alt_left(&self) -> bool { - self.modi & (Mbit::AltLeft as u8) != 0 - } - pub fn alt_right(&self) -> bool { - self.modi & (Mbit::AltRight as u8) != 0 - } - pub fn ctrl_left(&self) -> bool { - self.modi & (Mbit::CtrlLeft as u8) != 0 - } - pub fn ctrl_right(&self) -> bool { - self.modi & (Mbit::CtrlRight as u8) != 0 - } - pub fn caps_lock(&self) -> bool { - self.modi & (Mbit::CapsLock as u8) != 0 - } - pub fn num_lock(&self) -> bool { - self.modi & (Mbit::NumLock as u8) != 0 - } - pub fn scroll_lock(&self) -> bool { - self.modi & (Mbit::ScrollLock as u8) != 0 - } - pub fn alt(&self) -> bool { - self.alt_left() | self.alt_right() - } - pub fn ctrl(&self) -> bool { - self.ctrl_left() | self.ctrl_right() - } - - // setting/clearing states of SHIFT, ALT, CTRL etc. - pub fn set_shift(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::Shift as u8 - } else { - self.modi & !(Mbit::Shift as u8) - } - } - - pub fn set_alt_left(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::AltLeft as u8 - } else { - self.modi & !(Mbit::AltLeft as u8) - } - } - - - pub fn set_alt_right(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::AltRight as u8 - } else { - self.modi & !(Mbit::AltRight as u8) - } - } - - pub fn set_ctrl_left(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::CtrlLeft as u8 - } else { - self.modi & !(Mbit::CtrlLeft as u8) - } - } - - pub fn set_ctrl_right(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::CtrlRight as u8 - } else { - self.modi & !(Mbit::CtrlRight as u8) - } - } - - - pub fn set_caps_lock(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::CapsLock as u8 - } else { - self.modi & !(Mbit::CapsLock as u8) - } - } - - - pub fn set_num_lock(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::NumLock as u8 - } else { - self.modi & !(Mbit::NumLock as u8) - } - } - - pub fn set_scroll_lock(&mut self, pressed: bool) { - self.modi = if pressed { - self.modi | Mbit::ScrollLock as u8 - } else { - self.modi & !(Mbit::ScrollLock as u8) - } - } + pub fn new() -> Self { + Self { + asc: 0, + scan: 0, + modi: 0, + rawcode: 0, + } + } + + pub fn valid(self) -> bool { + self.scan != 0 + } + + pub fn invalidate(&mut self) { + self.scan = 0; + } + + pub fn set_raw(&mut self, code: u8) { + self.rawcode = code; + } + + pub fn get_raw(self) -> u8 { + self.rawcode + } + + // setter and getter for ascii and scancode + pub fn set_ascii(&mut self, ascii: u8) { + self.asc = ascii; + } + pub fn get_ascii(self) -> u8 { + self.asc + } + pub fn set_scancode(&mut self, scancode: u8) { + self.scan = scancode; + } + pub fn get_scancode(self) -> u8 { + self.scan + } + + // reading the state of SHIFT, ALT, CTRL etc. + pub fn shift(&self) -> bool { + self.modi & (Mbit::Shift as u8) != 0 + } + pub fn alt_left(&self) -> bool { + self.modi & (Mbit::AltLeft as u8) != 0 + } + pub fn alt_right(&self) -> bool { + self.modi & (Mbit::AltRight as u8) != 0 + } + pub fn ctrl_left(&self) -> bool { + self.modi & (Mbit::CtrlLeft as u8) != 0 + } + pub fn ctrl_right(&self) -> bool { + self.modi & (Mbit::CtrlRight as u8) != 0 + } + pub fn caps_lock(&self) -> bool { + self.modi & (Mbit::CapsLock as u8) != 0 + } + pub fn num_lock(&self) -> bool { + self.modi & (Mbit::NumLock as u8) != 0 + } + pub fn scroll_lock(&self) -> bool { + self.modi & (Mbit::ScrollLock as u8) != 0 + } + pub fn alt(&self) -> bool { + self.alt_left() | self.alt_right() + } + pub fn ctrl(&self) -> bool { + self.ctrl_left() | self.ctrl_right() + } + + // setting/clearing states of SHIFT, ALT, CTRL etc. + pub fn set_shift(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::Shift as u8 + } else { + self.modi & !(Mbit::Shift as u8) + } + } + + pub fn set_alt_left(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::AltLeft as u8 + } else { + self.modi & !(Mbit::AltLeft as u8) + } + } + + pub fn set_alt_right(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::AltRight as u8 + } else { + self.modi & !(Mbit::AltRight as u8) + } + } + + pub fn set_ctrl_left(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::CtrlLeft as u8 + } else { + self.modi & !(Mbit::CtrlLeft as u8) + } + } + + pub fn set_ctrl_right(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::CtrlRight as u8 + } else { + self.modi & !(Mbit::CtrlRight as u8) + } + } + + pub fn set_caps_lock(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::CapsLock as u8 + } else { + self.modi & !(Mbit::CapsLock as u8) + } + } + + pub fn set_num_lock(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::NumLock as u8 + } else { + self.modi & !(Mbit::NumLock as u8) + } + } + + pub fn set_scroll_lock(&mut self, pressed: bool) { + self.modi = if pressed { + self.modi | Mbit::ScrollLock as u8 + } else { + self.modi & !(Mbit::ScrollLock as u8) + } + } } |
