summary refs log tree commit diff
path: root/devices/src/virtio/input/defaults.rs
diff options
context:
space:
mode:
Diffstat (limited to 'devices/src/virtio/input/defaults.rs')
-rw-r--r--devices/src/virtio/input/defaults.rs201
1 files changed, 201 insertions, 0 deletions
diff --git a/devices/src/virtio/input/defaults.rs b/devices/src/virtio/input/defaults.rs
new file mode 100644
index 0000000..f5343f7
--- /dev/null
+++ b/devices/src/virtio/input/defaults.rs
@@ -0,0 +1,201 @@
+// Copyright 2019 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+use super::constants::*;
+use super::virtio_input_bitmap;
+use super::virtio_input_device_ids;
+use super::VirtioInputConfig;
+use std::collections::BTreeMap;
+use virtio::input::virtio_input_absinfo;
+
+/// Instantiates a VirtioInputConfig object with the default configuration for a trackpad. It
+/// supports touch, left button and right button events, as well as X and Y axis.
+pub fn new_trackpad_config(width: u32, height: u32) -> VirtioInputConfig {
+    VirtioInputConfig::new(
+        virtio_input_device_ids::new(0, 0, 0, 0),
+        "Crosvm Virtio Trackpad".as_bytes().to_vec(),
+        "virtio-trackpad".as_bytes().to_vec(),
+        virtio_input_bitmap::new([0u8; 128]),
+        default_trackpad_events(),
+        default_trackpad_absinfo(width, height),
+    )
+}
+
+/// Instantiates a VirtioInputConfig object with the default configuration for a mouse.
+/// It supports left, right and middle buttons, as wel as X, Y and wheel relative axes.
+pub fn new_mouse_config() -> VirtioInputConfig {
+    VirtioInputConfig::new(
+        virtio_input_device_ids::new(0, 0, 0, 0),
+        "Crosvm Virtio Mouse".as_bytes().to_vec(),
+        "virtio-mouse".as_bytes().to_vec(),
+        virtio_input_bitmap::new([0u8; 128]),
+        default_mouse_events(),
+        BTreeMap::new(),
+    )
+}
+
+/// Instantiates a VirtioInputConfig object with the default configuration for a keyboard.
+/// It supports the same keys as a en-us keyboard and the CAPSLOCK, NUMLOCK and SCROLLLOCK leds.
+pub fn new_keyboard_config() -> VirtioInputConfig {
+    VirtioInputConfig::new(
+        virtio_input_device_ids::new(0, 0, 0, 0),
+        "Crosvm Virtio Keyboard".as_bytes().to_vec(),
+        "virtio-keyboard".as_bytes().to_vec(),
+        virtio_input_bitmap::new([0u8; 128]),
+        default_keyboard_events(),
+        BTreeMap::new(),
+    )
+}
+
+fn default_trackpad_absinfo(width: u32, height: u32) -> BTreeMap<u16, virtio_input_absinfo> {
+    let mut absinfo: BTreeMap<u16, virtio_input_absinfo> = BTreeMap::new();
+    absinfo.insert(ABS_X, virtio_input_absinfo::new(0, width, 0, 0));
+    absinfo.insert(ABS_Y, virtio_input_absinfo::new(0, height, 0, 0));
+    absinfo
+}
+
+fn default_trackpad_events() -> BTreeMap<u16, virtio_input_bitmap> {
+    let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
+    supported_events.insert(
+        EV_KEY,
+        virtio_input_bitmap::from_bits(&[BTN_TOOL_FINGER, BTN_TOUCH, BTN_LEFT, BTN_RIGHT]),
+    );
+    supported_events.insert(EV_ABS, virtio_input_bitmap::from_bits(&[ABS_X, ABS_Y]));
+    supported_events
+}
+
+fn default_mouse_events() -> BTreeMap<u16, virtio_input_bitmap> {
+    let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
+    supported_events.insert(
+        EV_KEY,
+        virtio_input_bitmap::from_bits(&[BTN_LEFT, BTN_RIGHT, BTN_MIDDLE]),
+    );
+    supported_events.insert(
+        EV_REL,
+        virtio_input_bitmap::from_bits(&[REL_X, REL_Y, REL_WHEEL]),
+    );
+    supported_events
+}
+
+fn default_keyboard_events() -> BTreeMap<u16, virtio_input_bitmap> {
+    let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
+    supported_events.insert(
+        EV_KEY,
+        virtio_input_bitmap::from_bits(&[
+            KEY_ESC,
+            KEY_1,
+            KEY_2,
+            KEY_3,
+            KEY_4,
+            KEY_5,
+            KEY_6,
+            KEY_7,
+            KEY_8,
+            KEY_9,
+            KEY_0,
+            KEY_MINUS,
+            KEY_EQUAL,
+            KEY_BACKSPACE,
+            KEY_TAB,
+            KEY_Q,
+            KEY_W,
+            KEY_E,
+            KEY_R,
+            KEY_T,
+            KEY_Y,
+            KEY_U,
+            KEY_I,
+            KEY_O,
+            KEY_P,
+            KEY_LEFTBRACE,
+            KEY_RIGHTBRACE,
+            KEY_ENTER,
+            KEY_LEFTCTRL,
+            KEY_A,
+            KEY_S,
+            KEY_D,
+            KEY_F,
+            KEY_G,
+            KEY_H,
+            KEY_J,
+            KEY_K,
+            KEY_L,
+            KEY_SEMICOLON,
+            KEY_APOSTROPHE,
+            KEY_GRAVE,
+            KEY_LEFTSHIFT,
+            KEY_BACKSLASH,
+            KEY_Z,
+            KEY_X,
+            KEY_C,
+            KEY_V,
+            KEY_B,
+            KEY_N,
+            KEY_M,
+            KEY_COMMA,
+            KEY_DOT,
+            KEY_SLASH,
+            KEY_RIGHTSHIFT,
+            KEY_KPASTERISK,
+            KEY_LEFTALT,
+            KEY_SPACE,
+            KEY_CAPSLOCK,
+            KEY_F1,
+            KEY_F2,
+            KEY_F3,
+            KEY_F4,
+            KEY_F5,
+            KEY_F6,
+            KEY_F7,
+            KEY_F8,
+            KEY_F9,
+            KEY_F10,
+            KEY_NUMLOCK,
+            KEY_SCROLLLOCK,
+            KEY_KP7,
+            KEY_KP8,
+            KEY_KP9,
+            KEY_KPMINUS,
+            KEY_KP4,
+            KEY_KP5,
+            KEY_KP6,
+            KEY_KPPLUS,
+            KEY_KP1,
+            KEY_KP2,
+            KEY_KP3,
+            KEY_KP0,
+            KEY_KPDOT,
+            KEY_F11,
+            KEY_F12,
+            KEY_KPENTER,
+            KEY_RIGHTCTRL,
+            KEY_KPSLASH,
+            KEY_SYSRQ,
+            KEY_RIGHTALT,
+            KEY_HOME,
+            KEY_UP,
+            KEY_PAGEUP,
+            KEY_LEFT,
+            KEY_RIGHT,
+            KEY_END,
+            KEY_DOWN,
+            KEY_PAGEDOWN,
+            KEY_INSERT,
+            KEY_DELETE,
+            KEY_PAUSE,
+            KEY_MENU,
+            KEY_PRINT,
+            KEY_POWER,
+        ]),
+    );
+    supported_events.insert(
+        EV_REP,
+        virtio_input_bitmap::from_bits(&[REP_DELAY, REP_PERIOD]),
+    );
+    supported_events.insert(
+        EV_LED,
+        virtio_input_bitmap::from_bits(&[LED_CAPSL, LED_NUML, LED_SCROLLL]),
+    );
+    supported_events
+}