RKTK API Docs RKTK Home Repo

rktk/drivers/interface/
reporter.rs

1use usbd_hid::descriptor::{KeyboardReport, MediaKeyboardReport, MouseReport};
2
3pub trait ReporterDriver {
4    type Error: super::Error;
5
6    async fn wait_ready(&self) {}
7
8    /// Read a keyboard report from the device and return leds data.
9    async fn recv_keyboard_report(&self) -> Result<u8, Self::Error> {
10        let _: () = core::future::pending().await;
11        unreachable!()
12    }
13
14    fn try_send_keyboard_report(&self, _report: KeyboardReport) -> Result<(), Self::Error>;
15
16    fn try_send_media_keyboard_report(
17        &self,
18        _report: MediaKeyboardReport,
19    ) -> Result<(), Self::Error>;
20    fn try_send_mouse_report(&self, _report: MouseReport) -> Result<(), Self::Error>;
21
22    async fn send_rrp_data(&self, _data: &[u8]) -> Result<(), Self::Error>;
23    async fn recv_rrp_data(&self, _buf: &mut [u8]) -> Result<usize, Self::Error> {
24        let _: () = core::future::pending().await;
25        unreachable!()
26    }
27
28    async fn send_raw_hid_data(&self, _data: &[u8]) -> Result<(), Self::Error> {
29        Ok(())
30    }
31    async fn recv_raw_hid_data(&self, _buf: &mut [u8]) -> Result<usize, Self::Error> {
32        let _: () = core::future::pending().await;
33        unreachable!()
34    }
35
36    /// Wake up the device.
37    /// This is used to wake up the device from suspend mode.
38    ///
39    /// # Returns
40    /// - `Ok(true)`: Woke up signal sent successfully.
41    /// - `Ok(false)`: The device is already awake.
42    /// - `Err(_)`: Failed to send the wake up signal or not supported.
43    fn wakeup(&self) -> Result<bool, Self::Error>;
44}
45
46#[derive(Debug, Clone, Copy, PartialEq, Eq)]
47#[cfg_attr(feature = "defmt", derive(defmt::Format))]
48pub enum Output {
49    Usb,
50    Ble,
51}
52
53super::generate_builder!(ReporterDriver);