Add keycode configuration and cpu throttling

This commit is contained in:
2025-02-14 08:51:59 +00:00
parent 462a447489
commit 120a27e00e
5 changed files with 78 additions and 50 deletions

View File

@@ -1,5 +1,5 @@
use std::sync::mpsc::Sender;
use crate::device::keyboard::{Keyboard, KeyboardEvent};
use crate::device::keyboard::{Key, Keyboard, KeyboardEvent};
use crate::device::keyboard::KeyboardEvent::{KeyDown, KeyUp};
use crate::util::EmulatorResult;
@@ -22,15 +22,41 @@ impl SdlKeyboardAdapter {
(sdl2_kb_adapter,device_kb)
}
pub fn send_key_up(&self, keycode: u8) -> EmulatorResult<u8> {
log::trace!("Sending Key up {}",keycode);
self.keyboard_event_sender.send(KeyUp(keycode))?;
Ok(keycode)
pub fn process_key_up(&self, keycode: sdl2::keyboard::Keycode) -> EmulatorResult<()> {
log::debug!("Sending Key up {}",keycode);
if let Some(key) = Self::keycode_to_key(keycode){
self.keyboard_event_sender.send(KeyUp(key))?;
}
Ok(())
}
pub fn send_key_down(&self, keycode: u8) -> EmulatorResult<u8> {
pub fn process_key_down(&self, keycode: sdl2::keyboard::Keycode) -> EmulatorResult<()> {
log::trace!("Sending Key down {}",keycode);
self.keyboard_event_sender.send(KeyDown(keycode))?;
Ok(keycode)
if let Some(key) = Self::keycode_to_key(keycode){
self.keyboard_event_sender.send(KeyDown(key))?;
}
Ok(())
}
/// Key map configuration
pub fn keycode_to_key(keycode: sdl2::keyboard::Keycode) -> Option<Key>{
match keycode {
sdl2::keyboard::Keycode::X=>Some(Key::K0),
sdl2::keyboard::Keycode::Num1=>Some(Key::K1),
sdl2::keyboard::Keycode::Num2=>Some(Key::K2),
sdl2::keyboard::Keycode::Num3=>Some(Key::K3),
sdl2::keyboard::Keycode::Q=>Some(Key::K4),
sdl2::keyboard::Keycode::W=>Some(Key::K5),
sdl2::keyboard::Keycode::E=>Some(Key::K6),
sdl2::keyboard::Keycode::A=>Some(Key::K7),
sdl2::keyboard::Keycode::S=>Some(Key::K8),
sdl2::keyboard::Keycode::D=>Some(Key::K9),
sdl2::keyboard::Keycode::Z=>Some(Key::KA),
sdl2::keyboard::Keycode::C=>Some(Key::KB),
sdl2::keyboard::Keycode::Num4=>Some(Key::KC),
sdl2::keyboard::Keycode::R=>Some(Key::KD),
sdl2::keyboard::Keycode::F=>Some(Key::KE),
sdl2::keyboard::Keycode::V=>Some(Key::KF),
_=>None
}
}
}