From a9e4071913ef1ce32cb4a1581d5683ad56627ec2 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Mon, 18 Feb 2019 14:06:09 +0000 Subject: hid: Add HID and Report descriptors HID implementations must provide a HID and a Report descriptor. This patch adds these descriptors. The Report descriptor is copied from the Nitrokey Pro. As the control_in implementation in usb-device only handles GET_DESCRIPTOR requests on the device level, we have to change the control_in method in HidClass to handle GET_DESCRIPTOR on interface level (required for the Report descriptor). --- src/device.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/device.rs') diff --git a/src/device.rs b/src/device.rs index 31f4293..f71caf0 100644 --- a/src/device.rs +++ b/src/device.rs @@ -9,6 +9,14 @@ use crate::hid::{HidDevice, Protocol, Subclass}; const VID_CLAY_LOGIC: u16 = 0x20a0; const PID_NITROKEY_PRO: u16 = 0x4108; +const REPORT_DESCRIPTOR: &[u8] = &[ + 0x05, 0x01, 0x09, 0x06, 0xA1, 0x01, 0x05, 0x07, 0x19, 0xE0, 0x29, 0xE7, 0x15, 0x00, 0x25, 0x01, + 0x75, 0x01, 0x95, 0x08, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x03, 0x95, 0x05, 0x75, 0x01, + 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x03, 0x95, 0x06, + 0x75, 0x08, 0x15, 0x00, 0x25, 0x65, 0x05, 0x07, 0x19, 0x00, 0x29, 0x65, 0x81, 0x00, 0x09, 0x03, + 0x75, 0x08, 0x95, 0x40, 0xB1, 0x02, 0xC0, +]; + pub struct Nitrokey {} impl Nitrokey { @@ -25,6 +33,10 @@ impl HidDevice for Nitrokey { fn protocol(&self) -> Protocol { Protocol::Keyboard } + + fn report_descriptor(&self) -> &[u8] { + REPORT_DESCRIPTOR + } } pub fn create_usb_device(alloc: &UsbBusAllocator) -> UsbDevice<'_, B> { -- cgit v1.2.1