From 103a86574ba22d6930952087138ff633aa408076 Mon Sep 17 00:00:00 2001 From: Wilfried Chauveau Date: Sat, 13 Apr 2024 11:31:40 +0100 Subject: [PATCH] Update to usb-device 0.3 (#138) * Update to usb-device 0.3 * Update docs example to use multi language strings --------- Co-authored-by: Daniel Kenyon-Jones --- Cargo.toml | 2 +- src/device/mod.rs | 7 ++++--- src/interface.rs | 5 +++-- src/lib.rs | 9 ++++++--- src/usb_class.rs | 3 ++- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6199f58..b671dfb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ documentation = "https://docs.rs/usbd-human-interface-device" license = "MIT" [dependencies] -usb-device = "0.2" +usb-device = "0.3" log = { version = "0.4", optional = true } defmt = { version = "0.3", optional = true } packed_struct = { version = "0.10", default-features = false } diff --git a/src/device/mod.rs b/src/device/mod.rs index 002e5d8..88a2e17 100644 --- a/src/device/mod.rs +++ b/src/device/mod.rs @@ -5,6 +5,7 @@ use crate::UsbHidError; use frunk::{HCons, HNil, ToMut}; #[allow(clippy::wildcard_imports)] use usb_device::class_prelude::*; +use usb_device::descriptor::lang_id::LangID; pub mod consumer; pub mod fido; @@ -25,7 +26,7 @@ pub trait DeviceHList<'a>: ToMut<'a> { fn get(&mut self, id: u8) -> Option<&mut dyn InterfaceClass<'a>>; fn reset(&mut self); fn write_descriptors(&mut self, writer: &mut DescriptorWriter) -> usb_device::Result<()>; - fn get_string(&mut self, index: StringIndex, lang_id: u16) -> Option<&'a str>; + fn get_string(&mut self, index: StringIndex, lang_id: LangID) -> Option<&'a str>; fn tick(&mut self) -> Result<(), UsbHidError>; } @@ -40,7 +41,7 @@ impl<'a> DeviceHList<'a> for HNil { Ok(()) } - fn get_string(&mut self, _: StringIndex, _: u16) -> Option<&'a str> { + fn get_string(&mut self, _: StringIndex, _: LangID) -> Option<&'a str> { None } @@ -69,7 +70,7 @@ impl<'a, Head: DeviceClass<'a> + 'a, Tail: DeviceHList<'a>> DeviceHList<'a> for self.tail.write_descriptors(writer) } - fn get_string(&mut self, index: StringIndex, lang_id: u16) -> Option<&'a str> { + fn get_string(&mut self, index: StringIndex, lang_id: LangID) -> Option<&'a str> { let s = self.head.interface().get_string(index, lang_id); if s.is_some() { s diff --git a/src/interface.rs b/src/interface.rs index fda1044..938634d 100644 --- a/src/interface.rs +++ b/src/interface.rs @@ -18,6 +18,7 @@ use usb_device::bus::{StringIndex, UsbBus, UsbBusAllocator}; #[allow(clippy::wildcard_imports)] use usb_device::class_prelude::*; use usb_device::class_prelude::{DescriptorWriter, InterfaceNumber}; +use usb_device::descriptor::lang_id::LangID; use usb_device::UsbError; #[derive(Debug, PackedStruct)] @@ -65,7 +66,7 @@ pub trait InterfaceClass<'a> { fn report_descriptor(&self) -> ReportDescriptor<'_>; fn id(&self) -> InterfaceNumber; fn write_descriptors(&self, writer: &mut DescriptorWriter) -> usb_device::Result<()>; - fn get_string(&self, index: StringIndex, _lang_id: u16) -> Option<&'a str>; + fn get_string(&self, index: StringIndex, _lang_id: LangID) -> Option<&'a str>; fn reset(&mut self); fn set_report(&mut self, data: &[u8]) -> usb_device::Result<()>; fn get_report(&self, data: &mut [u8]) -> usb_device::Result; @@ -467,7 +468,7 @@ where Ok(()) } - fn get_string(&self, index: StringIndex, _lang_id: u16) -> Option<&'a str> { + fn get_string(&self, index: StringIndex, _lang_id: LangID) -> Option<&'a str> { self.description_index .filter(|&i| i == index) .and(self.config.description) diff --git a/src/lib.rs b/src/lib.rs index a050e92..42cf957 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -102,9 +102,12 @@ //! .build(&usb_alloc); //! //! let mut usb_dev = UsbDeviceBuilder::new(&usb_alloc, UsbVidPid(0x1209, 0x0001)) -//! .manufacturer("usbd-human-interface-device") -//! .product("NKRO Keyboard") -//! .serial_number("TEST") +//! .strings(&[ +//! StringDescriptors::new(LangID::EN) +//! .manufacturer("usbd-human-interface-device") +//! .product("NKRO Keyboard") +//! .serial_number("TEST")] +//! ).unwrap() //! .build(); //! //! let mut tick_timer = timer.count_down(); diff --git a/src/usb_class.rs b/src/usb_class.rs index 27c9ea9..27f8305 100644 --- a/src/usb_class.rs +++ b/src/usb_class.rs @@ -12,6 +12,7 @@ use frunk::{HCons, HNil, ToMut}; #[allow(clippy::wildcard_imports)] use usb_device::class_prelude::*; use usb_device::control::{Recipient, Request}; +use usb_device::descriptor::lang_id::LangID; use usb_device::{control::RequestType, Result}; pub mod prelude { @@ -191,7 +192,7 @@ where Ok(()) } - fn get_string(&self, index: StringIndex, lang_id: u16) -> Option<&str> { + fn get_string(&self, index: StringIndex, lang_id: LangID) -> Option<&str> { self.devices.borrow_mut().get_string(index, lang_id) }