@@ -70,6 +70,7 @@ use embedded_hal::{
7070} ;
7171use fugit:: RateExtU32 ;
7272use panic_probe as _;
73+ use pc_keyboard:: ScancodeSet ;
7374use rp_pico:: {
7475 self ,
7576 hal:: {
@@ -107,7 +108,7 @@ struct Hardware {
107108 /// The last CS pin we selected
108109 last_cs : u8 ,
109110 /// Our keyboard decoder
110- keyboard : pc_keyboard:: Keyboard < pc_keyboard :: layouts :: Uk105Key , pc_keyboard :: ScancodeSet2 > ,
111+ keyboard : pc_keyboard:: ScancodeSet2 ,
111112 /// Our queue of HID events
112113 event_queue : heapless:: Deque < neotron_common_bios:: hid:: HidEvent , 16 > ,
113114 /// A place to send/receive bytes to/from the BMC
@@ -623,7 +624,7 @@ impl Hardware {
623624 delay,
624625 led_state : 0 ,
625626 last_cs : 0 ,
626- keyboard : pc_keyboard:: Keyboard :: new ( pc_keyboard :: HandleControl :: Ignore ) ,
627+ keyboard : pc_keyboard:: ScancodeSet2 :: new ( ) ,
627628 event_queue : heapless:: Deque :: new ( ) ,
628629 bmc_buffer : [ 0u8 ; 64 ] ,
629630 interrupts_pending : 0 ,
@@ -1328,7 +1329,7 @@ pub extern "C" fn hid_get_event() -> common::Result<common::Option<common::hid::
13281329 let slice = if n >= 8 { & buffer } else { & buffer[ 0 ..n] } ;
13291330 defmt:: info!( "{} bytes in KB FIFO, got: {=[u8]:x}" , n, & slice) ;
13301331 for b in slice. iter ( ) {
1331- match hw. keyboard . add_byte ( * b) {
1332+ match hw. keyboard . advance_state ( * b) {
13321333 Ok ( Some ( key_event) ) => {
13331334 convert_hid_event ( key_event, & mut hw. event_queue ) ;
13341335 }
@@ -1337,7 +1338,6 @@ pub extern "C" fn hid_get_event() -> common::Result<common::Option<common::hid::
13371338 }
13381339 Err ( _e) => {
13391340 defmt:: warn!( "Keyboard decode error!" ) ;
1340- hw. keyboard . clear ( ) ;
13411341 }
13421342 }
13431343 }
@@ -1368,155 +1368,25 @@ fn convert_hid_event(
13681368 match pc_keyboard_ev. state {
13691369 pc_keyboard:: KeyState :: Down => {
13701370 ev_queue
1371- . push_back ( common:: hid:: HidEvent :: KeyPress ( convert_hid_code (
1372- pc_keyboard_ev. code ,
1373- ) ) )
1371+ . push_back ( common:: hid:: HidEvent :: KeyPress ( pc_keyboard_ev. code ) )
13741372 . unwrap ( ) ;
13751373 }
13761374 pc_keyboard:: KeyState :: Up => {
13771375 ev_queue
1378- . push_back ( common:: hid:: HidEvent :: KeyRelease ( convert_hid_code (
1379- pc_keyboard_ev. code ,
1380- ) ) )
1376+ . push_back ( common:: hid:: HidEvent :: KeyRelease ( pc_keyboard_ev. code ) )
13811377 . unwrap ( ) ;
13821378 }
13831379 pc_keyboard:: KeyState :: SingleShot => {
13841380 ev_queue
1385- . push_back ( common:: hid:: HidEvent :: KeyPress ( convert_hid_code (
1386- pc_keyboard_ev. code ,
1387- ) ) )
1381+ . push_back ( common:: hid:: HidEvent :: KeyPress ( pc_keyboard_ev. code ) )
13881382 . unwrap ( ) ;
13891383 ev_queue
1390- . push_back ( common:: hid:: HidEvent :: KeyRelease ( convert_hid_code (
1391- pc_keyboard_ev. code ,
1392- ) ) )
1384+ . push_back ( common:: hid:: HidEvent :: KeyRelease ( pc_keyboard_ev. code ) )
13931385 . unwrap ( ) ;
13941386 }
13951387 }
13961388}
13971389
1398- fn convert_hid_code ( pc_code : pc_keyboard:: KeyCode ) -> common:: hid:: KeyCode {
1399- match pc_code {
1400- pc_keyboard:: KeyCode :: AltLeft => common:: hid:: KeyCode :: AltLeft ,
1401- pc_keyboard:: KeyCode :: AltRight => common:: hid:: KeyCode :: AltRight ,
1402- pc_keyboard:: KeyCode :: ArrowDown => common:: hid:: KeyCode :: ArrowDown ,
1403- pc_keyboard:: KeyCode :: ArrowLeft => common:: hid:: KeyCode :: ArrowLeft ,
1404- pc_keyboard:: KeyCode :: ArrowRight => common:: hid:: KeyCode :: ArrowRight ,
1405- pc_keyboard:: KeyCode :: ArrowUp => common:: hid:: KeyCode :: ArrowUp ,
1406- pc_keyboard:: KeyCode :: BackSlash => common:: hid:: KeyCode :: BackSlash ,
1407- pc_keyboard:: KeyCode :: Backspace => common:: hid:: KeyCode :: Backspace ,
1408- pc_keyboard:: KeyCode :: BackTick => common:: hid:: KeyCode :: BackTick ,
1409- pc_keyboard:: KeyCode :: BracketSquareLeft => common:: hid:: KeyCode :: BracketSquareLeft ,
1410- pc_keyboard:: KeyCode :: BracketSquareRight => common:: hid:: KeyCode :: BracketSquareRight ,
1411- pc_keyboard:: KeyCode :: Break => common:: hid:: KeyCode :: PauseBreak ,
1412- pc_keyboard:: KeyCode :: CapsLock => common:: hid:: KeyCode :: CapsLock ,
1413- pc_keyboard:: KeyCode :: Comma => common:: hid:: KeyCode :: Comma ,
1414- pc_keyboard:: KeyCode :: ControlLeft => common:: hid:: KeyCode :: ControlLeft ,
1415- pc_keyboard:: KeyCode :: ControlRight => common:: hid:: KeyCode :: ControlRight ,
1416- pc_keyboard:: KeyCode :: Delete => common:: hid:: KeyCode :: Delete ,
1417- pc_keyboard:: KeyCode :: End => common:: hid:: KeyCode :: End ,
1418- pc_keyboard:: KeyCode :: Enter => common:: hid:: KeyCode :: Enter ,
1419- pc_keyboard:: KeyCode :: Escape => common:: hid:: KeyCode :: Escape ,
1420- pc_keyboard:: KeyCode :: Equals => common:: hid:: KeyCode :: Equals ,
1421- pc_keyboard:: KeyCode :: F1 => common:: hid:: KeyCode :: F1 ,
1422- pc_keyboard:: KeyCode :: F2 => common:: hid:: KeyCode :: F2 ,
1423- pc_keyboard:: KeyCode :: F3 => common:: hid:: KeyCode :: F3 ,
1424- pc_keyboard:: KeyCode :: F4 => common:: hid:: KeyCode :: F4 ,
1425- pc_keyboard:: KeyCode :: F5 => common:: hid:: KeyCode :: F5 ,
1426- pc_keyboard:: KeyCode :: F6 => common:: hid:: KeyCode :: F6 ,
1427- pc_keyboard:: KeyCode :: F7 => common:: hid:: KeyCode :: F7 ,
1428- pc_keyboard:: KeyCode :: F8 => common:: hid:: KeyCode :: F8 ,
1429- pc_keyboard:: KeyCode :: F9 => common:: hid:: KeyCode :: F9 ,
1430- pc_keyboard:: KeyCode :: F10 => common:: hid:: KeyCode :: F10 ,
1431- pc_keyboard:: KeyCode :: F11 => common:: hid:: KeyCode :: F11 ,
1432- pc_keyboard:: KeyCode :: F12 => common:: hid:: KeyCode :: F12 ,
1433- pc_keyboard:: KeyCode :: Fullstop => common:: hid:: KeyCode :: Fullstop ,
1434- pc_keyboard:: KeyCode :: Home => common:: hid:: KeyCode :: Home ,
1435- pc_keyboard:: KeyCode :: Insert => common:: hid:: KeyCode :: Insert ,
1436- pc_keyboard:: KeyCode :: Key1 => common:: hid:: KeyCode :: Key1 ,
1437- pc_keyboard:: KeyCode :: Key2 => common:: hid:: KeyCode :: Key2 ,
1438- pc_keyboard:: KeyCode :: Key3 => common:: hid:: KeyCode :: Key3 ,
1439- pc_keyboard:: KeyCode :: Key4 => common:: hid:: KeyCode :: Key4 ,
1440- pc_keyboard:: KeyCode :: Key5 => common:: hid:: KeyCode :: Key5 ,
1441- pc_keyboard:: KeyCode :: Key6 => common:: hid:: KeyCode :: Key6 ,
1442- pc_keyboard:: KeyCode :: Key7 => common:: hid:: KeyCode :: Key7 ,
1443- pc_keyboard:: KeyCode :: Key8 => common:: hid:: KeyCode :: Key8 ,
1444- pc_keyboard:: KeyCode :: Key9 => common:: hid:: KeyCode :: Key9 ,
1445- pc_keyboard:: KeyCode :: Key0 => common:: hid:: KeyCode :: Key0 ,
1446- pc_keyboard:: KeyCode :: Menus => common:: hid:: KeyCode :: Menus ,
1447- pc_keyboard:: KeyCode :: Minus => common:: hid:: KeyCode :: Minus ,
1448- pc_keyboard:: KeyCode :: Numpad0 => common:: hid:: KeyCode :: Numpad0 ,
1449- pc_keyboard:: KeyCode :: Numpad1 => common:: hid:: KeyCode :: Numpad1 ,
1450- pc_keyboard:: KeyCode :: Numpad2 => common:: hid:: KeyCode :: Numpad2 ,
1451- pc_keyboard:: KeyCode :: Numpad3 => common:: hid:: KeyCode :: Numpad3 ,
1452- pc_keyboard:: KeyCode :: Numpad4 => common:: hid:: KeyCode :: Numpad4 ,
1453- pc_keyboard:: KeyCode :: Numpad5 => common:: hid:: KeyCode :: Numpad5 ,
1454- pc_keyboard:: KeyCode :: Numpad6 => common:: hid:: KeyCode :: Numpad6 ,
1455- pc_keyboard:: KeyCode :: Numpad7 => common:: hid:: KeyCode :: Numpad7 ,
1456- pc_keyboard:: KeyCode :: Numpad8 => common:: hid:: KeyCode :: Numpad8 ,
1457- pc_keyboard:: KeyCode :: Numpad9 => common:: hid:: KeyCode :: Numpad9 ,
1458- pc_keyboard:: KeyCode :: NumpadEnter => common:: hid:: KeyCode :: NumpadEnter ,
1459- pc_keyboard:: KeyCode :: NumpadLock => common:: hid:: KeyCode :: NumpadLock ,
1460- pc_keyboard:: KeyCode :: NumpadSlash => common:: hid:: KeyCode :: NumpadSlash ,
1461- pc_keyboard:: KeyCode :: NumpadStar => common:: hid:: KeyCode :: NumpadStar ,
1462- pc_keyboard:: KeyCode :: NumpadMinus => common:: hid:: KeyCode :: NumpadMinus ,
1463- pc_keyboard:: KeyCode :: NumpadPeriod => common:: hid:: KeyCode :: NumpadPeriod ,
1464- pc_keyboard:: KeyCode :: NumpadPlus => common:: hid:: KeyCode :: NumpadPlus ,
1465- pc_keyboard:: KeyCode :: PageDown => common:: hid:: KeyCode :: PageDown ,
1466- pc_keyboard:: KeyCode :: PageUp => common:: hid:: KeyCode :: PageUp ,
1467- pc_keyboard:: KeyCode :: PauseBreak => common:: hid:: KeyCode :: PauseBreak ,
1468- pc_keyboard:: KeyCode :: PrintScreen => common:: hid:: KeyCode :: PrintScreen ,
1469- pc_keyboard:: KeyCode :: ScrollLock => common:: hid:: KeyCode :: ScrollLock ,
1470- pc_keyboard:: KeyCode :: SemiColon => common:: hid:: KeyCode :: SemiColon ,
1471- pc_keyboard:: KeyCode :: ShiftLeft => common:: hid:: KeyCode :: ShiftLeft ,
1472- pc_keyboard:: KeyCode :: ShiftRight => common:: hid:: KeyCode :: ShiftRight ,
1473- pc_keyboard:: KeyCode :: Slash => common:: hid:: KeyCode :: Slash ,
1474- pc_keyboard:: KeyCode :: Spacebar => common:: hid:: KeyCode :: Spacebar ,
1475- pc_keyboard:: KeyCode :: Tab => common:: hid:: KeyCode :: Tab ,
1476- pc_keyboard:: KeyCode :: Quote => common:: hid:: KeyCode :: Quote ,
1477- pc_keyboard:: KeyCode :: WindowsLeft => common:: hid:: KeyCode :: WindowsLeft ,
1478- pc_keyboard:: KeyCode :: WindowsRight => common:: hid:: KeyCode :: WindowsRight ,
1479- pc_keyboard:: KeyCode :: A => common:: hid:: KeyCode :: A ,
1480- pc_keyboard:: KeyCode :: B => common:: hid:: KeyCode :: B ,
1481- pc_keyboard:: KeyCode :: C => common:: hid:: KeyCode :: C ,
1482- pc_keyboard:: KeyCode :: D => common:: hid:: KeyCode :: D ,
1483- pc_keyboard:: KeyCode :: E => common:: hid:: KeyCode :: E ,
1484- pc_keyboard:: KeyCode :: F => common:: hid:: KeyCode :: F ,
1485- pc_keyboard:: KeyCode :: G => common:: hid:: KeyCode :: G ,
1486- pc_keyboard:: KeyCode :: H => common:: hid:: KeyCode :: H ,
1487- pc_keyboard:: KeyCode :: I => common:: hid:: KeyCode :: I ,
1488- pc_keyboard:: KeyCode :: J => common:: hid:: KeyCode :: J ,
1489- pc_keyboard:: KeyCode :: K => common:: hid:: KeyCode :: K ,
1490- pc_keyboard:: KeyCode :: L => common:: hid:: KeyCode :: L ,
1491- pc_keyboard:: KeyCode :: M => common:: hid:: KeyCode :: M ,
1492- pc_keyboard:: KeyCode :: N => common:: hid:: KeyCode :: N ,
1493- pc_keyboard:: KeyCode :: O => common:: hid:: KeyCode :: O ,
1494- pc_keyboard:: KeyCode :: P => common:: hid:: KeyCode :: P ,
1495- pc_keyboard:: KeyCode :: Q => common:: hid:: KeyCode :: Q ,
1496- pc_keyboard:: KeyCode :: R => common:: hid:: KeyCode :: R ,
1497- pc_keyboard:: KeyCode :: S => common:: hid:: KeyCode :: S ,
1498- pc_keyboard:: KeyCode :: T => common:: hid:: KeyCode :: T ,
1499- pc_keyboard:: KeyCode :: U => common:: hid:: KeyCode :: U ,
1500- pc_keyboard:: KeyCode :: V => common:: hid:: KeyCode :: V ,
1501- pc_keyboard:: KeyCode :: W => common:: hid:: KeyCode :: W ,
1502- pc_keyboard:: KeyCode :: X => common:: hid:: KeyCode :: X ,
1503- pc_keyboard:: KeyCode :: Y => common:: hid:: KeyCode :: Y ,
1504- pc_keyboard:: KeyCode :: Z => common:: hid:: KeyCode :: Z ,
1505- pc_keyboard:: KeyCode :: HashTilde => common:: hid:: KeyCode :: HashTilde ,
1506- pc_keyboard:: KeyCode :: PrevTrack => common:: hid:: KeyCode :: PrevTrack ,
1507- pc_keyboard:: KeyCode :: NextTrack => common:: hid:: KeyCode :: NextTrack ,
1508- pc_keyboard:: KeyCode :: Mute => common:: hid:: KeyCode :: Mute ,
1509- pc_keyboard:: KeyCode :: Calculator => common:: hid:: KeyCode :: Calculator ,
1510- pc_keyboard:: KeyCode :: Play => common:: hid:: KeyCode :: Play ,
1511- pc_keyboard:: KeyCode :: Stop => common:: hid:: KeyCode :: Stop ,
1512- pc_keyboard:: KeyCode :: VolumeDown => common:: hid:: KeyCode :: VolumeDown ,
1513- pc_keyboard:: KeyCode :: VolumeUp => common:: hid:: KeyCode :: VolumeUp ,
1514- pc_keyboard:: KeyCode :: WWWHome => common:: hid:: KeyCode :: WWWHome ,
1515- pc_keyboard:: KeyCode :: PowerOnTestOk => common:: hid:: KeyCode :: PowerOnTestOk ,
1516- _ => common:: hid:: KeyCode :: X ,
1517- }
1518- }
1519-
15201390/// Control the keyboard LEDs.
15211391pub extern "C" fn hid_set_leds ( _leds : common:: hid:: KeyboardLeds ) -> common:: Result < ( ) > {
15221392 common:: Result :: Err ( common:: Error :: Unimplemented )
@@ -1597,7 +1467,7 @@ extern "C" fn i2c_write_read(
15971467
15981468extern "C" fn audio_mixer_channel_get_info (
15991469 _audio_mixer_id : u8 ,
1600- ) -> common:: Result < common:: audio:: MixerChannelInfo > {
1470+ ) -> common:: Option < common:: audio:: MixerChannelInfo > {
16011471 unimplemented ! ( ) ;
16021472}
16031473
0 commit comments