use crate::error::Result;
use crate::protocol::FrameType;
use crate::protocol::command::inject_payload;
use crate::protocol::opcode::INJ_BTN;
use crate::types::{Action, Button};
use super::Device;
impl Device {
pub fn button(&self, button: Button, action: Action) -> Result<()> {
self.link.desired().lock().apply(button, action);
self.link.send(
FrameType::Inject,
&inject_payload(INJ_BTN, button.as_id() as u16, action.as_u8()),
)
}
pub fn press(&self, button: Button) -> Result<()> {
self.button(button, Action::Press)
}
pub fn soft_release(&self, button: Button) -> Result<()> {
self.button(button, Action::SoftRelease)
}
pub fn force_release(&self, button: Button) -> Result<()> {
self.button(button, Action::ForceRelease)
}
pub fn reset(&self) -> Result<()> {
self.link.desired().lock().clear();
self.link.catch_disconnect_all();
self.link.send(FrameType::Reset, &[])
}
}