From ccbbf657743eb656f4e49b0204092b4450ffa7ba Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Mon, 18 Feb 2019 12:07:26 +0000 Subject: Add HidDevice trait for device-specific information MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The HID USB class needs device-specific information – currently, the subclass and the protocol of the device, but also the report descriptors and request handlers once we support these functions. Therefore, this patch introduces the HidDevice trait that provides this data. It also adds a Nitrokey struct that implements this trait for the Nitrokey Pro device. --- src/hid.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'src/hid.rs') 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 HidClass<'_, B> { - pub fn new( - alloc: &UsbBusAllocator, - subclass: Subclass, - protocol: Protocol, - ) -> HidClass<'_, B> { +impl HidClass<'_, B, D> { + pub fn new(device: D, alloc: &UsbBusAllocator) -> HidClass<'_, B, D> { HidClass { + device, interface: alloc.interface(), endpoint_interrupt_in: alloc.interrupt(8, 10), expect_interrupt_in_complete: false, - subclass, - protocol, } } } -impl UsbClass for HidClass<'_, B> { +impl UsbClass for HidClass<'_, B, D> { fn poll(&mut self) {} fn reset(&mut self) { @@ -61,8 +61,8 @@ impl UsbClass 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)?; -- cgit v1.2.1