use crate::error::Result;
use crate::protocol::FrameType;
use crate::protocol::command::inject_payload;
use crate::types::{Action, Usage};
use super::Device;
impl Device {
pub fn inject(&self, usage: impl Into<Usage>, action: Action) -> Result<()> {
let u = usage.into();
self.link.desired().lock().apply(u, action);
let (class, id) = u.class_id();
self.link.send(
FrameType::Inject,
&inject_payload(class, id, action.as_u8()),
)
}
pub fn press(&self, usage: impl Into<Usage>) -> Result<()> {
self.inject(usage, Action::Press)
}
pub fn release(&self, usage: impl Into<Usage>) -> Result<()> {
self.inject(usage, Action::SoftRelease)
}
pub fn force_release(&self, usage: impl Into<Usage>) -> Result<()> {
self.inject(usage, Action::ForceRelease)
}
pub fn reset(&self) -> Result<()> {
self.link.desired().lock().clear();
self.link.catch_disconnect_all();
self.link.send(FrameType::Reset, &[])
}
}