#![no_std]
#[macro_use]
extern crate log;
extern crate alloc;
use alloc::vec::Vec;
use core::mem;
use ax_driver::{AxDeviceContainer, prelude::*};
use ax_lazyinit::LazyInit;
use ax_sync::Mutex;
static DEVICES: LazyInit<Mutex<Vec<AxInputDevice>>> = LazyInit::new();
pub fn init_input(mut input_devs: AxDeviceContainer<AxInputDevice>) {
info!("Initialize input subsystem...");
let mut devices = Vec::new();
while let Some(dev) = input_devs.take_one() {
info!(
" registered a new {:?} input device: {}",
dev.device_type(),
dev.device_name(),
);
devices.push(dev);
}
DEVICES.init_once(Mutex::new(devices));
}
pub fn take_inputs() -> Vec<AxInputDevice> {
mem::take(&mut DEVICES.lock())
}