// Copyright 2019 Robin Krahl // SPDX-License-Identifier: GPL-3.0-or-later use usb_device::bus::{UsbBus, UsbBusAllocator}; use usb_device::device::{UsbDevice, UsbDeviceBuilder, UsbVidPid}; 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 { pub fn new() -> Self { Nitrokey {} } } impl HidDevice for Nitrokey { fn subclass(&self) -> Subclass { Subclass::BootInterface } fn protocol(&self) -> Protocol { Protocol::Keyboard } fn report_descriptor(&self) -> &[u8] { REPORT_DESCRIPTOR } } pub fn create_usb_device(alloc: &UsbBusAllocator) -> UsbDevice<'_, B> { UsbDeviceBuilder::new(alloc, UsbVidPid(VID_CLAY_LOGIC, PID_NITROKEY_PRO)) .manufacturer("Nitrokey/ntw") .product("Nitrokey Pro/ntw") .serial_number("?") .build() }