medius 1.4.0

Host control library for the medius transparent mouse passthrough box
Documentation
use crate::error::Result;
use crate::protocol::FrameType;
use crate::protocol::command::button_payload;
use crate::types::{Button, ButtonAction};

use super::Device;

impl Device {
    /// `BUTTON` — set an injection override for one button.
    pub fn button(&self, button: Button, action: ButtonAction) -> Result<()> {
        self.link.desired().lock().apply(button, action);
        self.link.send(
            FrameType::Button,
            &button_payload(button.as_id(), action.as_u8()),
        )
    }

    /// Press (hold down) a button.
    pub fn press(&self, button: Button) -> Result<()> {
        self.button(button, ButtonAction::Press)
    }

    /// Soft-release a button — clears our injected press; a physical hold is left intact.
    pub fn soft_release(&self, button: Button) -> Result<()> {
        self.button(button, ButtonAction::SoftRelease)
    }

    /// Force-release a button — forces the bit clear, masking a physical hold too.
    pub fn force_release(&self, button: Button) -> Result<()> {
        self.button(button, ButtonAction::ForceRelease)
    }

    /// `RESET` — return to pure passthrough immediately.
    pub fn reset(&self) -> Result<()> {
        self.link.desired().lock().clear();
        self.link.send(FrameType::Reset, &[])
    }
}