1 //! This library provides helper functions to parse cod. 2 3 struct Class { 4 major: u32, 5 minor: u32, 6 } 7 8 impl Class { new(cod: u32) -> Class9 fn new(cod: u32) -> Class { 10 Class { major: (cod & 0x1f00) >> 8, minor: (cod & 0xff) } 11 } 12 } 13 is_cod_hid_keyboard(cod: u32) -> bool14pub fn is_cod_hid_keyboard(cod: u32) -> bool { 15 let c = Class::new(cod); 16 c.major == 0x05 && ((c.minor >> 6) & 0x03) == 0x01 17 } 18 is_cod_hid_combo(cod: u32) -> bool19pub fn is_cod_hid_combo(cod: u32) -> bool { 20 let c = Class::new(cod); 21 c.major == 0x05 && ((c.minor >> 6) & 0x03) == 0x03 22 } 23 24 #[cfg(test)] 25 mod tests { 26 use crate::cod::{is_cod_hid_combo, is_cod_hid_keyboard}; 27 28 #[test] test_cod()29 fn test_cod() { 30 let keyboard_gamepad_cod = 0x0548; 31 let combo_joystick_cod = 0x05c4; 32 let mouse_cod = 0x0580; 33 34 assert!(is_cod_hid_keyboard(keyboard_gamepad_cod)); 35 assert!(!is_cod_hid_combo(keyboard_gamepad_cod)); 36 assert!(!is_cod_hid_keyboard(combo_joystick_cod)); 37 assert!(is_cod_hid_combo(combo_joystick_cod)); 38 assert!(!is_cod_hid_keyboard(mouse_cod)); 39 assert!(!is_cod_hid_combo(mouse_cod)); 40 } 41 } 42