diff options
Diffstat (limited to 'src/hid.rs')
-rw-r--r-- | src/hid.rs | 28 |
1 files changed, 14 insertions, 14 deletions
@@ -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)?; |