aboutsummaryrefslogtreecommitdiff
path: root/src/device.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-02-18 14:06:09 +0000
committerRobin Krahl <robin.krahl@ireas.org>2019-02-18 15:31:05 +0100
commita9e4071913ef1ce32cb4a1581d5683ad56627ec2 (patch)
treee75cc76b6fdaae931a3c6e0ebbfa7ded5212f56b /src/device.rs
parentccbbf657743eb656f4e49b0204092b4450ffa7ba (diff)
downloadntw-a9e4071913ef1ce32cb4a1581d5683ad56627ec2.tar.gz
ntw-a9e4071913ef1ce32cb4a1581d5683ad56627ec2.tar.bz2
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).
Diffstat (limited to 'src/device.rs')
-rw-r--r--src/device.rs12
1 files changed, 12 insertions, 0 deletions
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<B: UsbBus>(alloc: &UsbBusAllocator<B>) -> UsbDevice<'_, B> {