aboutsummaryrefslogtreecommitdiff
path: root/src/hid.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/hid.rs')
-rw-r--r--src/hid.rs28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/hid.rs b/src/hid.rs
index 9de68d6..0bb8a11 100644
--- a/src/hid.rs
+++ b/src/hid.rs
@@ -26,31 +26,31 @@ enum_u8! {
}
}
-pub struct HidClass<'a, B: UsbBus> {
+pub trait HidDevice {
+ fn subclass(&self) -> Subclass;
+
+ fn protocol(&self) -> Protocol;
+}
+
+pub struct HidClass<'a, B: UsbBus, D: HidDevice> {
+ device: D,
interface: InterfaceNumber,
endpoint_interrupt_in: EndpointIn<'a, B>,
expect_interrupt_in_complete: bool,
- subclass: Subclass,
- protocol: Protocol,
}
-impl<B: UsbBus> HidClass<'_, B> {
- pub fn new(
- alloc: &UsbBusAllocator<B>,
- subclass: Subclass,
- protocol: Protocol,
- ) -> HidClass<'_, B> {
+impl<B: UsbBus, D: HidDevice> HidClass<'_, B, D> {
+ pub fn new(device: D, alloc: &UsbBusAllocator<B>) -> HidClass<'_, B, D> {
HidClass {
+ device,
interface: alloc.interface(),
endpoint_interrupt_in: alloc.interrupt(8, 10),
expect_interrupt_in_complete: false,
- subclass,
- protocol,
}
}
}
-impl<B: UsbBus> UsbClass<B> for HidClass<'_, B> {
+impl<B: UsbBus, D: HidDevice> UsbClass<B> for HidClass<'_, B, D> {
fn poll(&mut self) {}
fn reset(&mut self) {
@@ -61,8 +61,8 @@ impl<B: UsbBus> UsbClass<B> for HidClass<'_, B> {
writer.interface(
self.interface,
INTERFACE_CLASS_HID,
- self.subclass.into(),
- self.protocol.into(),
+ self.device.subclass().into(),
+ self.device.protocol().into(),
)?;
writer.endpoint(&self.endpoint_interrupt_in)?;