virtio_input_decoder/
decoder.rs

1use crate::{Key, KeyDecoder, KeyType, Mouse, MouseDecoder};
2
3pub struct Decoder();
4
5#[derive(Debug, PartialEq, Clone, Copy)]
6pub enum DecodeType {
7    Key(Key, KeyType),
8    Mouse(Mouse),
9}
10
11impl Decoder {
12    /// decode the input event into type enum
13    pub fn decode(etype : usize, code : usize, value: usize)->Result<DecodeType, ()> {
14        match etype {
15            3 | 2 => Ok(DecodeType::Mouse(MouseDecoder::decode(code, value).unwrap())),
16            1 => {
17                if code >= 0x150 {
18                    // Ok(DecodeType::Mouse(MouseDecoder::decode(code, value).unwrap()))
19                    Err(())
20                }
21                else {
22                    Ok(DecodeType::Key(KeyDecoder::decode(code).unwrap(),
23                        KeyDecoder::key_type(value).unwrap()))
24                }
25            }
26            _ => Err(())
27        }
28    }
29
30    /// convert the key enum into char
31    pub fn convert_key(key : Key)->Result<char, ()> {
32        KeyDecoder::convert(key)
33    }
34}