use crate::error::Result;
use crate::protocol::FrameType;
use crate::protocol::command::inject_payload;
use crate::protocol::opcode::INJ_KEY;
use crate::types::{Action, Key};
use super::Device;
impl Device {
pub fn key(&self, key: Key, action: Action) -> Result<()> {
self.link.desired().lock().apply_key(key, action);
self.link.send(
FrameType::Inject,
&inject_payload(INJ_KEY, key.usage() as u16, action.as_u8()),
)
}
pub fn key_down(&self, key: Key) -> Result<()> {
self.key(key, Action::Press)
}
pub fn key_up(&self, key: Key) -> Result<()> {
self.key(key, Action::SoftRelease)
}
pub fn key_force_release(&self, key: Key) -> Result<()> {
self.key(key, Action::ForceRelease)
}
}