Add DeviceStateHandler, DeviceCommand channel, and remote wakeup support

This commit is contained in:
alexmoon
2022-04-10 15:41:51 -04:00
parent 2217de24c0
commit f5656e3544
11 changed files with 472 additions and 110 deletions

View File

@ -11,6 +11,7 @@ use core::mem::MaybeUninit;
use core::ops::Range;
use core::sync::atomic::{AtomicUsize, Ordering};
use embassy::blocking_mutex::raw::RawMutex;
use embassy::time::Duration;
use embassy_usb::driver::EndpointOut;
use embassy_usb::{
@ -88,8 +89,8 @@ impl<'d, D: Driver<'d>, const IN_N: usize> HidClass<'d, D, (), IN_N> {
/// high performance uses, and a value of 255 is good for best-effort usecases.
///
/// This allocates an IN endpoint only.
pub fn new<const OUT_N: usize>(
builder: &mut UsbDeviceBuilder<'d, D>,
pub fn new<M: RawMutex, const OUT_N: usize>(
builder: &mut UsbDeviceBuilder<'d, D, M>,
state: &'d mut State<'d, IN_N, OUT_N>,
report_descriptor: &'static [u8],
request_handler: Option<&'d dyn RequestHandler>,
@ -132,8 +133,8 @@ impl<'d, D: Driver<'d>, const IN_N: usize, const OUT_N: usize>
/// high performance uses, and a value of 255 is good for best-effort usecases.
///
/// This allocates two endpoints (IN and OUT).
pub fn with_output_ep(
builder: &mut UsbDeviceBuilder<'d, D>,
pub fn with_output_ep<M: RawMutex>(
builder: &mut UsbDeviceBuilder<'d, D, M>,
state: &'d mut State<'d, IN_N, OUT_N>,
report_descriptor: &'static [u8],
request_handler: Option<&'d dyn RequestHandler>,
@ -392,9 +393,9 @@ impl<'a> Control<'a> {
}
}
fn build<'d, D: Driver<'d>>(
fn build<'d, D: Driver<'d>, M: RawMutex>(
&'d mut self,
builder: &mut UsbDeviceBuilder<'d, D>,
builder: &mut UsbDeviceBuilder<'d, D, M>,
ep_out: Option<&D::EndpointOut>,
ep_in: &D::EndpointIn,
) {