summary refs log tree commit diff
path: root/src/linux.rs
diff options
context:
space:
mode:
authorJorge E. Moreira <jemoreira@google.com>2019-03-07 10:59:54 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-03-09 01:18:59 -0800
commit99d3f08dc5d4ad63d8596c349f9d207144e2c949 (patch)
treec3f2b3a7236d51b2ae1de66a8bcfbd37c028c0e4 /src/linux.rs
parente5828e7ecdb1b92645161e0b0b66e7645da92447 (diff)
downloadcrosvm-99d3f08dc5d4ad63d8596c349f9d207144e2c949.tar
crosvm-99d3f08dc5d4ad63d8596c349f9d207144e2c949.tar.gz
crosvm-99d3f08dc5d4ad63d8596c349f9d207144e2c949.tar.bz2
crosvm-99d3f08dc5d4ad63d8596c349f9d207144e2c949.tar.lz
crosvm-99d3f08dc5d4ad63d8596c349f9d207144e2c949.tar.xz
crosvm-99d3f08dc5d4ad63d8596c349f9d207144e2c949.tar.zst
crosvm-99d3f08dc5d4ad63d8596c349f9d207144e2c949.zip
Add a (single touch only) touch screen input device
Very similar to the trackpad device, it has the INPUT_PROP_DIRECT
property and does not support any buttons, just touch events.

Change-Id: I2c963013e402ff2aa1b4b529c6c494dd57f4add9
Reviewed-on: https://chromium-review.googlesource.com/1509697
Commit-Ready: Jorge Moreira Broche <jemoreira@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Diffstat (limited to 'src/linux.rs')
-rw-r--r--src/linux.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/linux.rs b/src/linux.rs
index 6398270..acea1de 100644
--- a/src/linux.rs
+++ b/src/linux.rs
@@ -44,7 +44,7 @@ use sys_util::{
 use vhost;
 use vm_control::{VmRequest, VmResponse, VmRunMode};
 
-use crate::{Config, DiskOption, TrackpadOption};
+use crate::{Config, DiskOption, TouchDeviceOption};
 
 use arch::{self, LinuxArch, RunnableLinuxVm, VirtioDeviceStub, VmComponents};
 
@@ -358,7 +358,21 @@ fn create_tpm_device(cfg: &Config) -> DeviceResult {
     })
 }
 
-fn create_trackpad_device(cfg: &Config, trackpad_spec: &TrackpadOption) -> DeviceResult {
+fn create_single_touch_device(cfg: &Config, single_touch_spec: &TouchDeviceOption) -> DeviceResult {
+    let socket = create_input_socket(&single_touch_spec.path).map_err(|e| {
+        error!("failed configuring virtio single touch: {:?}", e);
+        e
+    })?;
+
+    let dev = virtio::new_single_touch(socket, single_touch_spec.width, single_touch_spec.height)
+        .map_err(Error::InputDeviceNew)?;
+    Ok(VirtioDeviceStub {
+        dev: Box::new(dev),
+        jail: simple_jail(&cfg, "input_device.policy")?,
+    })
+}
+
+fn create_trackpad_device(cfg: &Config, trackpad_spec: &TouchDeviceOption) -> DeviceResult {
     let socket = create_input_socket(&trackpad_spec.path).map_err(|e| {
         error!("failed configuring virtio trackpad: {}", e);
         e
@@ -651,6 +665,10 @@ fn create_virtio_devices(
         }
     }
 
+    if let Some(single_touch_spec) = &cfg.virtio_single_touch {
+        devs.push(create_single_touch_device(cfg, single_touch_spec)?);
+    }
+
     if let Some(trackpad_spec) = &cfg.virtio_trackpad {
         devs.push(create_trackpad_device(cfg, trackpad_spec)?);
     }