RKTK API Docs RKTK Home Repo

rktk_drivers_common/usb/
mod.rs

1//! USB reporter implementation using [`embassy_usb`].
2
3use core::sync::atomic::AtomicBool;
4
5mod builder;
6#[cfg(feature = "defmt-usb")]
7mod defmt_logger;
8mod driver;
9mod handler;
10mod raw_hid;
11mod rrp;
12mod task;
13
14#[cfg(feature = "usb-remote-wakeup")]
15type RemoteWakeupSignal = rktk::utils::Signal<()>;
16type ReadySignal = rktk::utils::Signal<()>;
17
18static POWERED_SIGNAL: rktk::utils::Signal<()> = rktk::utils::Signal::new();
19
20static SUSPENDED: AtomicBool = AtomicBool::new(false);
21
22pub use builder::CommonUsbReporterBuilder;
23/// Re-export of underlying embassy-usb driver's config type
24pub use embassy_usb::Config as UsbDriverConfig;
25
26/// Options for the [`CommonUsbReporterDriverBuilder`].
27pub struct CommonUsbDriverConfig<D: embassy_usb::driver::Driver<'static>> {
28    /// embassy-usb driver instance.
29    pub driver: D,
30    /// Config for underlying embassy-usb driver.
31    pub driver_config: UsbDriverConfig<'static>,
32    /// USB Poll interval for mouse in ms.
33    pub mouse_poll_interval: u8,
34    /// USB Poll interval for keyboard in ms.
35    pub keyboard_poll_interval: u8,
36    /// If this is set to true, defmt-usb logger waits for DTR signal before log output.
37    /// This allows you to view logs recorded before the logger client is started.
38    #[cfg(feature = "defmt-usb")]
39    pub defmt_usb_use_dtr: bool,
40}
41
42impl<D: embassy_usb::driver::Driver<'static>> CommonUsbDriverConfig<D> {
43    /// Create usb options for the driver with default options.
44    ///
45    /// * `driver`: embassy-usb driver instance
46    /// * `vid`: USB vendor ID
47    /// * `pid`: USB product ID
48    pub fn new(driver: D, mut driver_config: UsbDriverConfig<'static>) -> Self {
49        driver_config.supports_remote_wakeup = cfg!(feature = "usb-remote-wakeup");
50        Self {
51            driver_config,
52            mouse_poll_interval: 1,
53            keyboard_poll_interval: 1,
54            driver,
55            #[cfg(feature = "defmt-usb")]
56            defmt_usb_use_dtr: true,
57        }
58    }
59}