use crossbeam_channel as channel;
use crate::error::Result;
use crate::protocol::constants;
use crate::timed;
use crate::types::ButtonMask;
use super::Device;
impl Device {
pub fn enable_button_stream(&self) -> Result<()> {
timed!("enable_button_stream", self.exec(constants::CMD_BUTTONS_ON))
}
pub fn disable_button_stream(&self) -> Result<()> {
timed!(
"disable_button_stream",
self.exec(constants::CMD_BUTTONS_OFF)
)
}
pub fn button_stream_state(&self) -> Result<bool> {
timed!("button_stream_state", {
let value = self.query(constants::CMD_BUTTONS_QUERY)?;
Ok(value.trim() == "1")
})
}
pub fn button_events(&self) -> channel::Receiver<ButtonMask> {
self.transport().subscribe_buttons()
}
}
#[cfg(feature = "async")]
use super::AsyncDevice;
#[cfg(feature = "async")]
impl AsyncDevice {
pub async fn enable_button_stream(&self) -> Result<()> {
timed!(
"enable_button_stream",
self.exec(constants::CMD_BUTTONS_ON).await
)
}
pub async fn disable_button_stream(&self) -> Result<()> {
timed!(
"disable_button_stream",
self.exec(constants::CMD_BUTTONS_OFF).await
)
}
pub async fn button_stream_state(&self) -> Result<bool> {
timed!("button_stream_state", {
let value = self.query(constants::CMD_BUTTONS_QUERY).await?;
Ok(value.trim() == "1")
})
}
pub fn button_events(&self) -> channel::Receiver<ButtonMask> {
self.transport().subscribe_buttons()
}
}