1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard Worker use std::collections::BTreeMap;
6*bb4ee6a4SAndroid Build Coastguard Worker
7*bb4ee6a4SAndroid Build Coastguard Worker use base::warn;
8*bb4ee6a4SAndroid Build Coastguard Worker use linux_input_sys::constants::*;
9*bb4ee6a4SAndroid Build Coastguard Worker
10*bb4ee6a4SAndroid Build Coastguard Worker use super::virtio_input_absinfo;
11*bb4ee6a4SAndroid Build Coastguard Worker use super::virtio_input_bitmap;
12*bb4ee6a4SAndroid Build Coastguard Worker use super::virtio_input_device_ids;
13*bb4ee6a4SAndroid Build Coastguard Worker use super::VirtioInputConfig;
14*bb4ee6a4SAndroid Build Coastguard Worker
15*bb4ee6a4SAndroid Build Coastguard Worker /// Instantiates a VirtioInputConfig object with the default configuration for a trackpad. It
16*bb4ee6a4SAndroid Build Coastguard Worker /// supports touch, left button and right button events, as well as X and Y axis.
new_trackpad_config( idx: u32, width: u32, height: u32, name: Option<&str>, ) -> VirtioInputConfig17*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_trackpad_config(
18*bb4ee6a4SAndroid Build Coastguard Worker idx: u32,
19*bb4ee6a4SAndroid Build Coastguard Worker width: u32,
20*bb4ee6a4SAndroid Build Coastguard Worker height: u32,
21*bb4ee6a4SAndroid Build Coastguard Worker name: Option<&str>,
22*bb4ee6a4SAndroid Build Coastguard Worker ) -> VirtioInputConfig {
23*bb4ee6a4SAndroid Build Coastguard Worker let name = name
24*bb4ee6a4SAndroid Build Coastguard Worker .map(str::to_owned)
25*bb4ee6a4SAndroid Build Coastguard Worker .unwrap_or(format!("Crosvm Virtio Trackpad {idx}"));
26*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
27*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
28*bb4ee6a4SAndroid Build Coastguard Worker name,
29*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-trackpad-{idx}"),
30*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::new([0u8; 128]),
31*bb4ee6a4SAndroid Build Coastguard Worker default_trackpad_events(),
32*bb4ee6a4SAndroid Build Coastguard Worker default_trackpad_absinfo(width, height),
33*bb4ee6a4SAndroid Build Coastguard Worker )
34*bb4ee6a4SAndroid Build Coastguard Worker }
35*bb4ee6a4SAndroid Build Coastguard Worker
new_multitouch_trackpad_config( idx: u32, width: u32, height: u32, name: Option<&str>, ) -> VirtioInputConfig36*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_multitouch_trackpad_config(
37*bb4ee6a4SAndroid Build Coastguard Worker idx: u32,
38*bb4ee6a4SAndroid Build Coastguard Worker width: u32,
39*bb4ee6a4SAndroid Build Coastguard Worker height: u32,
40*bb4ee6a4SAndroid Build Coastguard Worker name: Option<&str>,
41*bb4ee6a4SAndroid Build Coastguard Worker ) -> VirtioInputConfig {
42*bb4ee6a4SAndroid Build Coastguard Worker let name = name
43*bb4ee6a4SAndroid Build Coastguard Worker .map(str::to_owned)
44*bb4ee6a4SAndroid Build Coastguard Worker .unwrap_or(format!("Crosvm Virtio Multi-touch Trackpad {idx}"));
45*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
46*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
47*bb4ee6a4SAndroid Build Coastguard Worker name,
48*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-multi-touch-trackpad-{idx}"),
49*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[INPUT_PROP_POINTER, INPUT_PROP_BUTTONPAD]),
50*bb4ee6a4SAndroid Build Coastguard Worker default_multitouchpad_events(),
51*bb4ee6a4SAndroid Build Coastguard Worker default_multitouchpad_absinfo(width, height, 10, 65536),
52*bb4ee6a4SAndroid Build Coastguard Worker )
53*bb4ee6a4SAndroid Build Coastguard Worker }
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard Worker /// Instantiates a VirtioInputConfig object with the default configuration for a mouse.
56*bb4ee6a4SAndroid Build Coastguard Worker /// It supports left, right and middle buttons, as wel as X, Y and wheel relative axes.
new_mouse_config(idx: u32) -> VirtioInputConfig57*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_mouse_config(idx: u32) -> VirtioInputConfig {
58*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
59*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
60*bb4ee6a4SAndroid Build Coastguard Worker format!("Crosvm Virtio Mouse {idx}"),
61*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-mouse-{idx}"),
62*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::new([0u8; 128]),
63*bb4ee6a4SAndroid Build Coastguard Worker default_mouse_events(),
64*bb4ee6a4SAndroid Build Coastguard Worker BTreeMap::new(),
65*bb4ee6a4SAndroid Build Coastguard Worker )
66*bb4ee6a4SAndroid Build Coastguard Worker }
67*bb4ee6a4SAndroid Build Coastguard Worker
68*bb4ee6a4SAndroid Build Coastguard Worker /// Instantiates a VirtioInputConfig object with the default configuration for a keyboard.
69*bb4ee6a4SAndroid Build Coastguard Worker /// It supports the same keys as a en-us keyboard and the CAPSLOCK, NUMLOCK and SCROLLLOCK leds.
new_keyboard_config(idx: u32) -> VirtioInputConfig70*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_keyboard_config(idx: u32) -> VirtioInputConfig {
71*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
72*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
73*bb4ee6a4SAndroid Build Coastguard Worker format!("Crosvm Virtio Keyboard {idx}"),
74*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-keyboard-{idx}"),
75*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::new([0u8; 128]),
76*bb4ee6a4SAndroid Build Coastguard Worker default_keyboard_events(),
77*bb4ee6a4SAndroid Build Coastguard Worker BTreeMap::new(),
78*bb4ee6a4SAndroid Build Coastguard Worker )
79*bb4ee6a4SAndroid Build Coastguard Worker }
80*bb4ee6a4SAndroid Build Coastguard Worker
81*bb4ee6a4SAndroid Build Coastguard Worker /// Instantiates a VirtioInputConfig object with the default configuration for a collection of
82*bb4ee6a4SAndroid Build Coastguard Worker /// switches.
new_switches_config(idx: u32) -> VirtioInputConfig83*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_switches_config(idx: u32) -> VirtioInputConfig {
84*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
85*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
86*bb4ee6a4SAndroid Build Coastguard Worker format!("Crosvm Virtio Switches {idx}"),
87*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-switches-{idx}"),
88*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::new([0u8; 128]),
89*bb4ee6a4SAndroid Build Coastguard Worker default_switch_events(),
90*bb4ee6a4SAndroid Build Coastguard Worker BTreeMap::new(),
91*bb4ee6a4SAndroid Build Coastguard Worker )
92*bb4ee6a4SAndroid Build Coastguard Worker }
93*bb4ee6a4SAndroid Build Coastguard Worker
94*bb4ee6a4SAndroid Build Coastguard Worker /// Instantiates a VirtioInputConfig object with the default configuration for a collection of
95*bb4ee6a4SAndroid Build Coastguard Worker /// rotary.
new_rotary_config(idx: u32) -> VirtioInputConfig96*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_rotary_config(idx: u32) -> VirtioInputConfig {
97*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
98*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
99*bb4ee6a4SAndroid Build Coastguard Worker format!("Crosvm Virtio Rotary {idx}"),
100*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-rotary-{idx}"),
101*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::new([0u8; 128]),
102*bb4ee6a4SAndroid Build Coastguard Worker default_rotary_events(),
103*bb4ee6a4SAndroid Build Coastguard Worker BTreeMap::new(),
104*bb4ee6a4SAndroid Build Coastguard Worker )
105*bb4ee6a4SAndroid Build Coastguard Worker }
106*bb4ee6a4SAndroid Build Coastguard Worker
107*bb4ee6a4SAndroid Build Coastguard Worker /// Instantiates a VirtioInputConfig object with the default configuration for a touchscreen (no
108*bb4ee6a4SAndroid Build Coastguard Worker /// multitouch support).
new_single_touch_config( idx: u32, width: u32, height: u32, name: Option<&str>, ) -> VirtioInputConfig109*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_single_touch_config(
110*bb4ee6a4SAndroid Build Coastguard Worker idx: u32,
111*bb4ee6a4SAndroid Build Coastguard Worker width: u32,
112*bb4ee6a4SAndroid Build Coastguard Worker height: u32,
113*bb4ee6a4SAndroid Build Coastguard Worker name: Option<&str>,
114*bb4ee6a4SAndroid Build Coastguard Worker ) -> VirtioInputConfig {
115*bb4ee6a4SAndroid Build Coastguard Worker let name = name
116*bb4ee6a4SAndroid Build Coastguard Worker .map(str::to_owned)
117*bb4ee6a4SAndroid Build Coastguard Worker .unwrap_or(format!("Crosvm Virtio Touchscreen {idx}"));
118*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
119*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
120*bb4ee6a4SAndroid Build Coastguard Worker name,
121*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-touchscreen-{idx}"),
122*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[INPUT_PROP_DIRECT]),
123*bb4ee6a4SAndroid Build Coastguard Worker default_touchscreen_events(),
124*bb4ee6a4SAndroid Build Coastguard Worker default_touchscreen_absinfo(width, height),
125*bb4ee6a4SAndroid Build Coastguard Worker )
126*bb4ee6a4SAndroid Build Coastguard Worker }
127*bb4ee6a4SAndroid Build Coastguard Worker
128*bb4ee6a4SAndroid Build Coastguard Worker /// Instantiates a VirtioInputConfig object with the default configuration for a multitouch
129*bb4ee6a4SAndroid Build Coastguard Worker /// touchscreen.
new_multi_touch_config( idx: u32, width: u32, height: u32, name: Option<&str>, ) -> VirtioInputConfig130*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_multi_touch_config(
131*bb4ee6a4SAndroid Build Coastguard Worker idx: u32,
132*bb4ee6a4SAndroid Build Coastguard Worker width: u32,
133*bb4ee6a4SAndroid Build Coastguard Worker height: u32,
134*bb4ee6a4SAndroid Build Coastguard Worker name: Option<&str>,
135*bb4ee6a4SAndroid Build Coastguard Worker ) -> VirtioInputConfig {
136*bb4ee6a4SAndroid Build Coastguard Worker let name = name
137*bb4ee6a4SAndroid Build Coastguard Worker .map(str::to_owned)
138*bb4ee6a4SAndroid Build Coastguard Worker .unwrap_or(format!("Crosvm Virtio Multitouch Touchscreen {idx}"));
139*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
140*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
141*bb4ee6a4SAndroid Build Coastguard Worker name,
142*bb4ee6a4SAndroid Build Coastguard Worker format!("virtio-touchscreen-{idx}"),
143*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[INPUT_PROP_DIRECT]),
144*bb4ee6a4SAndroid Build Coastguard Worker default_multitouchscreen_events(),
145*bb4ee6a4SAndroid Build Coastguard Worker default_multitouchscreen_absinfo(width, height, 10, 10),
146*bb4ee6a4SAndroid Build Coastguard Worker )
147*bb4ee6a4SAndroid Build Coastguard Worker }
148*bb4ee6a4SAndroid Build Coastguard Worker
149*bb4ee6a4SAndroid Build Coastguard Worker /// Initializes a VirtioInputConfig object for a custom virtio-input device.
150*bb4ee6a4SAndroid Build Coastguard Worker ///
151*bb4ee6a4SAndroid Build Coastguard Worker /// # Arguments
152*bb4ee6a4SAndroid Build Coastguard Worker ///
153*bb4ee6a4SAndroid Build Coastguard Worker /// * `idx` - input device index
154*bb4ee6a4SAndroid Build Coastguard Worker /// * `name` - input device name
155*bb4ee6a4SAndroid Build Coastguard Worker /// * `serial_name` - input device serial name
156*bb4ee6a4SAndroid Build Coastguard Worker /// * `supported_events` - Event configuration provided by a configuration file
new_custom_config( idx: u32, name: &str, serial_name: &str, supported_events: BTreeMap<u16, virtio_input_bitmap>, ) -> VirtioInputConfig157*bb4ee6a4SAndroid Build Coastguard Worker pub fn new_custom_config(
158*bb4ee6a4SAndroid Build Coastguard Worker idx: u32,
159*bb4ee6a4SAndroid Build Coastguard Worker name: &str,
160*bb4ee6a4SAndroid Build Coastguard Worker serial_name: &str,
161*bb4ee6a4SAndroid Build Coastguard Worker supported_events: BTreeMap<u16, virtio_input_bitmap>,
162*bb4ee6a4SAndroid Build Coastguard Worker ) -> VirtioInputConfig {
163*bb4ee6a4SAndroid Build Coastguard Worker let name: String = format!("{name} {idx}");
164*bb4ee6a4SAndroid Build Coastguard Worker let serial_name = format!("{serial_name}-{idx}");
165*bb4ee6a4SAndroid Build Coastguard Worker if name.as_bytes().len() > 128 {
166*bb4ee6a4SAndroid Build Coastguard Worker warn!("name: {name} exceeds 128 bytes, will be truncated.");
167*bb4ee6a4SAndroid Build Coastguard Worker }
168*bb4ee6a4SAndroid Build Coastguard Worker if serial_name.as_bytes().len() > 128 {
169*bb4ee6a4SAndroid Build Coastguard Worker warn!("serial_name: {serial_name} exceeds 128 bytes, will be truncated.");
170*bb4ee6a4SAndroid Build Coastguard Worker }
171*bb4ee6a4SAndroid Build Coastguard Worker
172*bb4ee6a4SAndroid Build Coastguard Worker VirtioInputConfig::new(
173*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_device_ids::new(0, 0, 0, 0),
174*bb4ee6a4SAndroid Build Coastguard Worker name,
175*bb4ee6a4SAndroid Build Coastguard Worker serial_name,
176*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::new([0u8; 128]),
177*bb4ee6a4SAndroid Build Coastguard Worker supported_events,
178*bb4ee6a4SAndroid Build Coastguard Worker BTreeMap::new(),
179*bb4ee6a4SAndroid Build Coastguard Worker )
180*bb4ee6a4SAndroid Build Coastguard Worker }
181*bb4ee6a4SAndroid Build Coastguard Worker
default_touchscreen_absinfo(width: u32, height: u32) -> BTreeMap<u16, virtio_input_absinfo>182*bb4ee6a4SAndroid Build Coastguard Worker fn default_touchscreen_absinfo(width: u32, height: u32) -> BTreeMap<u16, virtio_input_absinfo> {
183*bb4ee6a4SAndroid Build Coastguard Worker let mut absinfo: BTreeMap<u16, virtio_input_absinfo> = BTreeMap::new();
184*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_X, virtio_input_absinfo::new(0, width, 0, 0));
185*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_Y, virtio_input_absinfo::new(0, height, 0, 0));
186*bb4ee6a4SAndroid Build Coastguard Worker absinfo
187*bb4ee6a4SAndroid Build Coastguard Worker }
188*bb4ee6a4SAndroid Build Coastguard Worker
default_touchscreen_events() -> BTreeMap<u16, virtio_input_bitmap>189*bb4ee6a4SAndroid Build Coastguard Worker fn default_touchscreen_events() -> BTreeMap<u16, virtio_input_bitmap> {
190*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
191*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(EV_KEY, virtio_input_bitmap::from_bits(&[BTN_TOUCH]));
192*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(EV_ABS, virtio_input_bitmap::from_bits(&[ABS_X, ABS_Y]));
193*bb4ee6a4SAndroid Build Coastguard Worker supported_events
194*bb4ee6a4SAndroid Build Coastguard Worker }
195*bb4ee6a4SAndroid Build Coastguard Worker
default_multitouchscreen_absinfo( width: u32, height: u32, slot: u32, id: u32, ) -> BTreeMap<u16, virtio_input_absinfo>196*bb4ee6a4SAndroid Build Coastguard Worker fn default_multitouchscreen_absinfo(
197*bb4ee6a4SAndroid Build Coastguard Worker width: u32,
198*bb4ee6a4SAndroid Build Coastguard Worker height: u32,
199*bb4ee6a4SAndroid Build Coastguard Worker slot: u32,
200*bb4ee6a4SAndroid Build Coastguard Worker id: u32,
201*bb4ee6a4SAndroid Build Coastguard Worker ) -> BTreeMap<u16, virtio_input_absinfo> {
202*bb4ee6a4SAndroid Build Coastguard Worker let mut absinfo: BTreeMap<u16, virtio_input_absinfo> = BTreeMap::new();
203*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_SLOT, virtio_input_absinfo::new(0, slot, 0, 0));
204*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_TRACKING_ID, virtio_input_absinfo::new(0, id, 0, 0));
205*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_X, virtio_input_absinfo::new(0, width, 0, 0));
206*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_Y, virtio_input_absinfo::new(0, height, 0, 0));
207*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_POSITION_X, virtio_input_absinfo::new(0, width, 0, 0));
208*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(
209*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_POSITION_Y,
210*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_absinfo::new(0, height, 0, 0),
211*bb4ee6a4SAndroid Build Coastguard Worker );
212*bb4ee6a4SAndroid Build Coastguard Worker absinfo
213*bb4ee6a4SAndroid Build Coastguard Worker }
214*bb4ee6a4SAndroid Build Coastguard Worker
default_multitouchscreen_events() -> BTreeMap<u16, virtio_input_bitmap>215*bb4ee6a4SAndroid Build Coastguard Worker fn default_multitouchscreen_events() -> BTreeMap<u16, virtio_input_bitmap> {
216*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
217*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(EV_KEY, virtio_input_bitmap::from_bits(&[BTN_TOUCH]));
218*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
219*bb4ee6a4SAndroid Build Coastguard Worker EV_ABS,
220*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[
221*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_SLOT,
222*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_TRACKING_ID,
223*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_POSITION_X,
224*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_POSITION_Y,
225*bb4ee6a4SAndroid Build Coastguard Worker ABS_X,
226*bb4ee6a4SAndroid Build Coastguard Worker ABS_Y,
227*bb4ee6a4SAndroid Build Coastguard Worker ]),
228*bb4ee6a4SAndroid Build Coastguard Worker );
229*bb4ee6a4SAndroid Build Coastguard Worker supported_events
230*bb4ee6a4SAndroid Build Coastguard Worker }
231*bb4ee6a4SAndroid Build Coastguard Worker
default_multitouchpad_absinfo( width: u32, height: u32, slot: u32, id: u32, ) -> BTreeMap<u16, virtio_input_absinfo>232*bb4ee6a4SAndroid Build Coastguard Worker fn default_multitouchpad_absinfo(
233*bb4ee6a4SAndroid Build Coastguard Worker width: u32,
234*bb4ee6a4SAndroid Build Coastguard Worker height: u32,
235*bb4ee6a4SAndroid Build Coastguard Worker slot: u32,
236*bb4ee6a4SAndroid Build Coastguard Worker id: u32,
237*bb4ee6a4SAndroid Build Coastguard Worker ) -> BTreeMap<u16, virtio_input_absinfo> {
238*bb4ee6a4SAndroid Build Coastguard Worker let mut absinfo: BTreeMap<u16, virtio_input_absinfo> = BTreeMap::new();
239*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_SLOT, virtio_input_absinfo::new(0, slot, 0, 0));
240*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_TRACKING_ID, virtio_input_absinfo::new(0, id, 0, 0));
241*bb4ee6a4SAndroid Build Coastguard Worker // TODO(b/347253952): make them configurable if necessary
242*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_PRESSURE, virtio_input_absinfo::new(0, 255, 0, 0));
243*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_PRESSURE, virtio_input_absinfo::new(0, 255, 0, 0));
244*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_TOUCH_MAJOR, virtio_input_absinfo::new(0, 4095, 0, 0));
245*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_TOUCH_MINOR, virtio_input_absinfo::new(0, 4095, 0, 0));
246*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_X, virtio_input_absinfo::new(0, width, 0, 0));
247*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_Y, virtio_input_absinfo::new(0, height, 0, 0));
248*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_POSITION_X, virtio_input_absinfo::new(0, width, 0, 0));
249*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_MT_TOOL_TYPE, virtio_input_absinfo::new(0, 2, 0, 0));
250*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(
251*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_POSITION_Y,
252*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_absinfo::new(0, height, 0, 0),
253*bb4ee6a4SAndroid Build Coastguard Worker );
254*bb4ee6a4SAndroid Build Coastguard Worker absinfo
255*bb4ee6a4SAndroid Build Coastguard Worker }
256*bb4ee6a4SAndroid Build Coastguard Worker
default_multitouchpad_events() -> BTreeMap<u16, virtio_input_bitmap>257*bb4ee6a4SAndroid Build Coastguard Worker fn default_multitouchpad_events() -> BTreeMap<u16, virtio_input_bitmap> {
258*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
259*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
260*bb4ee6a4SAndroid Build Coastguard Worker EV_KEY,
261*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[
262*bb4ee6a4SAndroid Build Coastguard Worker BTN_TOUCH,
263*bb4ee6a4SAndroid Build Coastguard Worker BTN_TOOL_FINGER,
264*bb4ee6a4SAndroid Build Coastguard Worker BTN_TOOL_DOUBLETAP,
265*bb4ee6a4SAndroid Build Coastguard Worker BTN_TOOL_TRIPLETAP,
266*bb4ee6a4SAndroid Build Coastguard Worker BTN_TOOL_QUADTAP,
267*bb4ee6a4SAndroid Build Coastguard Worker BTN_LEFT,
268*bb4ee6a4SAndroid Build Coastguard Worker ]),
269*bb4ee6a4SAndroid Build Coastguard Worker );
270*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
271*bb4ee6a4SAndroid Build Coastguard Worker EV_ABS,
272*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[
273*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_SLOT,
274*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_TRACKING_ID,
275*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_POSITION_X,
276*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_POSITION_Y,
277*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_TOOL_TYPE,
278*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_PRESSURE,
279*bb4ee6a4SAndroid Build Coastguard Worker ABS_X,
280*bb4ee6a4SAndroid Build Coastguard Worker ABS_Y,
281*bb4ee6a4SAndroid Build Coastguard Worker ABS_PRESSURE,
282*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_TOUCH_MAJOR,
283*bb4ee6a4SAndroid Build Coastguard Worker ABS_MT_TOUCH_MINOR,
284*bb4ee6a4SAndroid Build Coastguard Worker ABS_PRESSURE,
285*bb4ee6a4SAndroid Build Coastguard Worker ]),
286*bb4ee6a4SAndroid Build Coastguard Worker );
287*bb4ee6a4SAndroid Build Coastguard Worker supported_events
288*bb4ee6a4SAndroid Build Coastguard Worker }
289*bb4ee6a4SAndroid Build Coastguard Worker
default_trackpad_absinfo(width: u32, height: u32) -> BTreeMap<u16, virtio_input_absinfo>290*bb4ee6a4SAndroid Build Coastguard Worker fn default_trackpad_absinfo(width: u32, height: u32) -> BTreeMap<u16, virtio_input_absinfo> {
291*bb4ee6a4SAndroid Build Coastguard Worker let mut absinfo: BTreeMap<u16, virtio_input_absinfo> = BTreeMap::new();
292*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_X, virtio_input_absinfo::new(0, width, 0, 0));
293*bb4ee6a4SAndroid Build Coastguard Worker absinfo.insert(ABS_Y, virtio_input_absinfo::new(0, height, 0, 0));
294*bb4ee6a4SAndroid Build Coastguard Worker absinfo
295*bb4ee6a4SAndroid Build Coastguard Worker }
296*bb4ee6a4SAndroid Build Coastguard Worker
default_trackpad_events() -> BTreeMap<u16, virtio_input_bitmap>297*bb4ee6a4SAndroid Build Coastguard Worker fn default_trackpad_events() -> BTreeMap<u16, virtio_input_bitmap> {
298*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
299*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
300*bb4ee6a4SAndroid Build Coastguard Worker EV_KEY,
301*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[BTN_TOOL_FINGER, BTN_TOUCH, BTN_LEFT, BTN_RIGHT]),
302*bb4ee6a4SAndroid Build Coastguard Worker );
303*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(EV_ABS, virtio_input_bitmap::from_bits(&[ABS_X, ABS_Y]));
304*bb4ee6a4SAndroid Build Coastguard Worker supported_events
305*bb4ee6a4SAndroid Build Coastguard Worker }
306*bb4ee6a4SAndroid Build Coastguard Worker
default_mouse_events() -> BTreeMap<u16, virtio_input_bitmap>307*bb4ee6a4SAndroid Build Coastguard Worker fn default_mouse_events() -> BTreeMap<u16, virtio_input_bitmap> {
308*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
309*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
310*bb4ee6a4SAndroid Build Coastguard Worker EV_KEY,
311*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[BTN_LEFT, BTN_RIGHT, BTN_MIDDLE]),
312*bb4ee6a4SAndroid Build Coastguard Worker );
313*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
314*bb4ee6a4SAndroid Build Coastguard Worker EV_REL,
315*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[REL_X, REL_Y, REL_WHEEL]),
316*bb4ee6a4SAndroid Build Coastguard Worker );
317*bb4ee6a4SAndroid Build Coastguard Worker supported_events
318*bb4ee6a4SAndroid Build Coastguard Worker }
319*bb4ee6a4SAndroid Build Coastguard Worker
default_keyboard_events() -> BTreeMap<u16, virtio_input_bitmap>320*bb4ee6a4SAndroid Build Coastguard Worker fn default_keyboard_events() -> BTreeMap<u16, virtio_input_bitmap> {
321*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
322*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
323*bb4ee6a4SAndroid Build Coastguard Worker EV_KEY,
324*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[
325*bb4ee6a4SAndroid Build Coastguard Worker KEY_ESC,
326*bb4ee6a4SAndroid Build Coastguard Worker KEY_1,
327*bb4ee6a4SAndroid Build Coastguard Worker KEY_2,
328*bb4ee6a4SAndroid Build Coastguard Worker KEY_3,
329*bb4ee6a4SAndroid Build Coastguard Worker KEY_4,
330*bb4ee6a4SAndroid Build Coastguard Worker KEY_5,
331*bb4ee6a4SAndroid Build Coastguard Worker KEY_6,
332*bb4ee6a4SAndroid Build Coastguard Worker KEY_7,
333*bb4ee6a4SAndroid Build Coastguard Worker KEY_8,
334*bb4ee6a4SAndroid Build Coastguard Worker KEY_9,
335*bb4ee6a4SAndroid Build Coastguard Worker KEY_0,
336*bb4ee6a4SAndroid Build Coastguard Worker KEY_MINUS,
337*bb4ee6a4SAndroid Build Coastguard Worker KEY_EQUAL,
338*bb4ee6a4SAndroid Build Coastguard Worker KEY_BACKSPACE,
339*bb4ee6a4SAndroid Build Coastguard Worker KEY_TAB,
340*bb4ee6a4SAndroid Build Coastguard Worker KEY_Q,
341*bb4ee6a4SAndroid Build Coastguard Worker KEY_W,
342*bb4ee6a4SAndroid Build Coastguard Worker KEY_E,
343*bb4ee6a4SAndroid Build Coastguard Worker KEY_R,
344*bb4ee6a4SAndroid Build Coastguard Worker KEY_T,
345*bb4ee6a4SAndroid Build Coastguard Worker KEY_Y,
346*bb4ee6a4SAndroid Build Coastguard Worker KEY_U,
347*bb4ee6a4SAndroid Build Coastguard Worker KEY_I,
348*bb4ee6a4SAndroid Build Coastguard Worker KEY_O,
349*bb4ee6a4SAndroid Build Coastguard Worker KEY_P,
350*bb4ee6a4SAndroid Build Coastguard Worker KEY_LEFTBRACE,
351*bb4ee6a4SAndroid Build Coastguard Worker KEY_RIGHTBRACE,
352*bb4ee6a4SAndroid Build Coastguard Worker KEY_ENTER,
353*bb4ee6a4SAndroid Build Coastguard Worker KEY_LEFTCTRL,
354*bb4ee6a4SAndroid Build Coastguard Worker KEY_A,
355*bb4ee6a4SAndroid Build Coastguard Worker KEY_S,
356*bb4ee6a4SAndroid Build Coastguard Worker KEY_D,
357*bb4ee6a4SAndroid Build Coastguard Worker KEY_F,
358*bb4ee6a4SAndroid Build Coastguard Worker KEY_G,
359*bb4ee6a4SAndroid Build Coastguard Worker KEY_H,
360*bb4ee6a4SAndroid Build Coastguard Worker KEY_J,
361*bb4ee6a4SAndroid Build Coastguard Worker KEY_K,
362*bb4ee6a4SAndroid Build Coastguard Worker KEY_L,
363*bb4ee6a4SAndroid Build Coastguard Worker KEY_SEMICOLON,
364*bb4ee6a4SAndroid Build Coastguard Worker KEY_APOSTROPHE,
365*bb4ee6a4SAndroid Build Coastguard Worker KEY_GRAVE,
366*bb4ee6a4SAndroid Build Coastguard Worker KEY_LEFTSHIFT,
367*bb4ee6a4SAndroid Build Coastguard Worker KEY_BACKSLASH,
368*bb4ee6a4SAndroid Build Coastguard Worker KEY_Z,
369*bb4ee6a4SAndroid Build Coastguard Worker KEY_X,
370*bb4ee6a4SAndroid Build Coastguard Worker KEY_C,
371*bb4ee6a4SAndroid Build Coastguard Worker KEY_V,
372*bb4ee6a4SAndroid Build Coastguard Worker KEY_B,
373*bb4ee6a4SAndroid Build Coastguard Worker KEY_N,
374*bb4ee6a4SAndroid Build Coastguard Worker KEY_M,
375*bb4ee6a4SAndroid Build Coastguard Worker KEY_COMMA,
376*bb4ee6a4SAndroid Build Coastguard Worker KEY_DOT,
377*bb4ee6a4SAndroid Build Coastguard Worker KEY_SLASH,
378*bb4ee6a4SAndroid Build Coastguard Worker KEY_RIGHTSHIFT,
379*bb4ee6a4SAndroid Build Coastguard Worker KEY_KPASTERISK,
380*bb4ee6a4SAndroid Build Coastguard Worker KEY_LEFTALT,
381*bb4ee6a4SAndroid Build Coastguard Worker KEY_SPACE,
382*bb4ee6a4SAndroid Build Coastguard Worker KEY_CAPSLOCK,
383*bb4ee6a4SAndroid Build Coastguard Worker KEY_F1,
384*bb4ee6a4SAndroid Build Coastguard Worker KEY_F2,
385*bb4ee6a4SAndroid Build Coastguard Worker KEY_F3,
386*bb4ee6a4SAndroid Build Coastguard Worker KEY_F4,
387*bb4ee6a4SAndroid Build Coastguard Worker KEY_F5,
388*bb4ee6a4SAndroid Build Coastguard Worker KEY_F6,
389*bb4ee6a4SAndroid Build Coastguard Worker KEY_F7,
390*bb4ee6a4SAndroid Build Coastguard Worker KEY_F8,
391*bb4ee6a4SAndroid Build Coastguard Worker KEY_F9,
392*bb4ee6a4SAndroid Build Coastguard Worker KEY_F10,
393*bb4ee6a4SAndroid Build Coastguard Worker KEY_NUMLOCK,
394*bb4ee6a4SAndroid Build Coastguard Worker KEY_SCROLLLOCK,
395*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP7,
396*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP8,
397*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP9,
398*bb4ee6a4SAndroid Build Coastguard Worker KEY_KPMINUS,
399*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP4,
400*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP5,
401*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP6,
402*bb4ee6a4SAndroid Build Coastguard Worker KEY_KPPLUS,
403*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP1,
404*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP2,
405*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP3,
406*bb4ee6a4SAndroid Build Coastguard Worker KEY_KP0,
407*bb4ee6a4SAndroid Build Coastguard Worker KEY_KPDOT,
408*bb4ee6a4SAndroid Build Coastguard Worker KEY_F11,
409*bb4ee6a4SAndroid Build Coastguard Worker KEY_F12,
410*bb4ee6a4SAndroid Build Coastguard Worker KEY_KPENTER,
411*bb4ee6a4SAndroid Build Coastguard Worker KEY_RIGHTCTRL,
412*bb4ee6a4SAndroid Build Coastguard Worker KEY_KPSLASH,
413*bb4ee6a4SAndroid Build Coastguard Worker KEY_SYSRQ,
414*bb4ee6a4SAndroid Build Coastguard Worker KEY_RIGHTALT,
415*bb4ee6a4SAndroid Build Coastguard Worker KEY_HOME,
416*bb4ee6a4SAndroid Build Coastguard Worker KEY_UP,
417*bb4ee6a4SAndroid Build Coastguard Worker KEY_PAGEUP,
418*bb4ee6a4SAndroid Build Coastguard Worker KEY_LEFT,
419*bb4ee6a4SAndroid Build Coastguard Worker KEY_RIGHT,
420*bb4ee6a4SAndroid Build Coastguard Worker KEY_END,
421*bb4ee6a4SAndroid Build Coastguard Worker KEY_DOWN,
422*bb4ee6a4SAndroid Build Coastguard Worker KEY_PAGEDOWN,
423*bb4ee6a4SAndroid Build Coastguard Worker KEY_INSERT,
424*bb4ee6a4SAndroid Build Coastguard Worker KEY_DELETE,
425*bb4ee6a4SAndroid Build Coastguard Worker KEY_PAUSE,
426*bb4ee6a4SAndroid Build Coastguard Worker KEY_MENU,
427*bb4ee6a4SAndroid Build Coastguard Worker KEY_PRINT,
428*bb4ee6a4SAndroid Build Coastguard Worker KEY_POWER,
429*bb4ee6a4SAndroid Build Coastguard Worker KEY_HOMEPAGE,
430*bb4ee6a4SAndroid Build Coastguard Worker KEY_MUTE,
431*bb4ee6a4SAndroid Build Coastguard Worker KEY_VOLUMEDOWN,
432*bb4ee6a4SAndroid Build Coastguard Worker KEY_VOLUMEUP,
433*bb4ee6a4SAndroid Build Coastguard Worker KEY_BACK,
434*bb4ee6a4SAndroid Build Coastguard Worker ]),
435*bb4ee6a4SAndroid Build Coastguard Worker );
436*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
437*bb4ee6a4SAndroid Build Coastguard Worker EV_REP,
438*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[REP_DELAY, REP_PERIOD]),
439*bb4ee6a4SAndroid Build Coastguard Worker );
440*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
441*bb4ee6a4SAndroid Build Coastguard Worker EV_LED,
442*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[LED_CAPSL, LED_NUML, LED_SCROLLL]),
443*bb4ee6a4SAndroid Build Coastguard Worker );
444*bb4ee6a4SAndroid Build Coastguard Worker supported_events
445*bb4ee6a4SAndroid Build Coastguard Worker }
446*bb4ee6a4SAndroid Build Coastguard Worker
default_switch_events() -> BTreeMap<u16, virtio_input_bitmap>447*bb4ee6a4SAndroid Build Coastguard Worker fn default_switch_events() -> BTreeMap<u16, virtio_input_bitmap> {
448*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
449*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(
450*bb4ee6a4SAndroid Build Coastguard Worker EV_SW,
451*bb4ee6a4SAndroid Build Coastguard Worker virtio_input_bitmap::from_bits(&[
452*bb4ee6a4SAndroid Build Coastguard Worker SW_LID,
453*bb4ee6a4SAndroid Build Coastguard Worker SW_TABLET_MODE,
454*bb4ee6a4SAndroid Build Coastguard Worker SW_HEADPHONE_INSERT,
455*bb4ee6a4SAndroid Build Coastguard Worker SW_RFKILL_ALL,
456*bb4ee6a4SAndroid Build Coastguard Worker SW_MICROPHONE_INSERT,
457*bb4ee6a4SAndroid Build Coastguard Worker SW_DOCK,
458*bb4ee6a4SAndroid Build Coastguard Worker SW_LINEOUT_INSERT,
459*bb4ee6a4SAndroid Build Coastguard Worker SW_JACK_PHYSICAL_INSERT,
460*bb4ee6a4SAndroid Build Coastguard Worker SW_VIDEOOUT_INSERT,
461*bb4ee6a4SAndroid Build Coastguard Worker SW_CAMERA_LENS_COVER,
462*bb4ee6a4SAndroid Build Coastguard Worker SW_KEYPAD_SLIDE,
463*bb4ee6a4SAndroid Build Coastguard Worker SW_FRONT_PROXIMITY,
464*bb4ee6a4SAndroid Build Coastguard Worker SW_ROTATE_LOCK,
465*bb4ee6a4SAndroid Build Coastguard Worker SW_LINEIN_INSERT,
466*bb4ee6a4SAndroid Build Coastguard Worker SW_MUTE_DEVICE,
467*bb4ee6a4SAndroid Build Coastguard Worker SW_PEN_INSERTED,
468*bb4ee6a4SAndroid Build Coastguard Worker SW_MACHINE_COVER,
469*bb4ee6a4SAndroid Build Coastguard Worker ]),
470*bb4ee6a4SAndroid Build Coastguard Worker );
471*bb4ee6a4SAndroid Build Coastguard Worker supported_events
472*bb4ee6a4SAndroid Build Coastguard Worker }
473*bb4ee6a4SAndroid Build Coastguard Worker
default_rotary_events() -> BTreeMap<u16, virtio_input_bitmap>474*bb4ee6a4SAndroid Build Coastguard Worker fn default_rotary_events() -> BTreeMap<u16, virtio_input_bitmap> {
475*bb4ee6a4SAndroid Build Coastguard Worker let mut supported_events: BTreeMap<u16, virtio_input_bitmap> = BTreeMap::new();
476*bb4ee6a4SAndroid Build Coastguard Worker supported_events.insert(EV_REL, virtio_input_bitmap::from_bits(&[REL_WHEEL]));
477*bb4ee6a4SAndroid Build Coastguard Worker supported_events
478*bb4ee6a4SAndroid Build Coastguard Worker }
479*bb4ee6a4SAndroid Build Coastguard Worker
480*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(test)]
481*bb4ee6a4SAndroid Build Coastguard Worker mod tests {
482*bb4ee6a4SAndroid Build Coastguard Worker use super::*;
483*bb4ee6a4SAndroid Build Coastguard Worker
484*bb4ee6a4SAndroid Build Coastguard Worker #[test]
test_new_switches_config()485*bb4ee6a4SAndroid Build Coastguard Worker fn test_new_switches_config() {
486*bb4ee6a4SAndroid Build Coastguard Worker let config = new_switches_config(0);
487*bb4ee6a4SAndroid Build Coastguard Worker assert_eq!(config.serial_name, "virtio-switches-0");
488*bb4ee6a4SAndroid Build Coastguard Worker
489*bb4ee6a4SAndroid Build Coastguard Worker let events = config.supported_events;
490*bb4ee6a4SAndroid Build Coastguard Worker assert_eq!(events.len(), 1);
491*bb4ee6a4SAndroid Build Coastguard Worker assert_eq!(events.contains_key(&EV_SW), true);
492*bb4ee6a4SAndroid Build Coastguard Worker
493*bb4ee6a4SAndroid Build Coastguard Worker // The bitmap should contain SW_CNT=0x10+1=17 ones,
494*bb4ee6a4SAndroid Build Coastguard Worker // where each one is packed into the u8 bitmap.
495*bb4ee6a4SAndroid Build Coastguard Worker let mut expected_bitmap = [0_u8; 128];
496*bb4ee6a4SAndroid Build Coastguard Worker expected_bitmap[0] = 0b11111111u8;
497*bb4ee6a4SAndroid Build Coastguard Worker expected_bitmap[1] = 0b11111111u8;
498*bb4ee6a4SAndroid Build Coastguard Worker expected_bitmap[2] = 0b1u8;
499*bb4ee6a4SAndroid Build Coastguard Worker assert_eq!(events[&EV_SW].bitmap, expected_bitmap);
500*bb4ee6a4SAndroid Build Coastguard Worker }
501*bb4ee6a4SAndroid Build Coastguard Worker }
502