Skip to content

Commit 7c6a88f

Browse files
committed
usb: set the interface handler in InterfaceBuilder.
1 parent 092c2b7 commit 7c6a88f

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

embassy-usb-hid/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ fn build<'d, D: Driver<'d>>(
112112
let len = config.report_descriptor.len();
113113

114114
let mut func = builder.function(USB_CLASS_HID, USB_SUBCLASS_NONE, USB_PROTOCOL_NONE);
115-
let mut iface = func.interface(Some(control));
115+
let mut iface = func.interface();
116+
iface.handler(control);
116117
let mut alt = iface.alt_setting(USB_CLASS_HID, USB_SUBCLASS_NONE, USB_PROTOCOL_NONE);
117118

118119
// HID descriptor
@@ -438,7 +439,7 @@ impl<'d> ControlHandler for Control<'d> {
438439
self.out_report_offset.store(0, Ordering::Release);
439440
}
440441

441-
fn get_descriptor<'a>(&'a mut self, req: Request, buf: &'a mut [u8]) -> InResponse<'a> {
442+
fn get_descriptor<'a>(&'a mut self, req: Request, _buf: &'a mut [u8]) -> InResponse<'a> {
442443
match (req.value >> 8) as u8 {
443444
HID_DESC_DESCTYPE_HID_REPORT => InResponse::Accepted(self.report_descriptor),
444445
HID_DESC_DESCTYPE_HID => InResponse::Accepted(&self.hid_descriptor),

embassy-usb-serial/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ impl<'d, D: Driver<'d>> CdcAcmClass<'d, D> {
178178
let mut func = builder.function(USB_CLASS_CDC, CDC_SUBCLASS_ACM, CDC_PROTOCOL_NONE);
179179

180180
// Control interface
181-
let mut iface = func.interface(Some(control));
181+
let mut iface = func.interface();
182+
iface.handler(control);
182183
let comm_if = iface.interface_number();
183184
let data_if = u8::from(comm_if) + 1;
184185
let mut alt = iface.alt_setting(USB_CLASS_CDC, CDC_SUBCLASS_ACM, CDC_PROTOCOL_NONE);
@@ -218,7 +219,7 @@ impl<'d, D: Driver<'d>> CdcAcmClass<'d, D> {
218219
let comm_ep = alt.endpoint_interrupt_in(8, 255);
219220

220221
// Data interface
221-
let mut iface = func.interface(None);
222+
let mut iface = func.interface();
222223
let data_if = iface.interface_number();
223224
let mut alt = iface.alt_setting(USB_CLASS_CDC_DATA, 0x00, CDC_PROTOCOL_NONE);
224225
let read_ep = alt.endpoint_bulk_out(max_packet_size);

embassy-usb/src/builder.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,17 +267,14 @@ impl<'a, 'd, D: Driver<'d>> FunctionBuilder<'a, 'd, D> {
267267
/// Add an interface to the function.
268268
///
269269
/// Interface numbers are guaranteed to be allocated consecutively, starting from 0.
270-
pub fn interface(
271-
&mut self,
272-
handler: Option<&'d mut dyn ControlHandler>,
273-
) -> InterfaceBuilder<'_, 'd, D> {
270+
pub fn interface(&mut self) -> InterfaceBuilder<'_, 'd, D> {
274271
if let Some(i) = self.iface_count_index {
275272
self.builder.config_descriptor.buf[i] += 1;
276273
}
277274

278275
let number = self.builder.interfaces.len() as _;
279276
let iface = Interface {
280-
handler,
277+
handler: None,
281278
current_alt_setting: 0,
282279
num_alt_settings: 0,
283280
};
@@ -307,6 +304,10 @@ impl<'a, 'd, D: Driver<'d>> InterfaceBuilder<'a, 'd, D> {
307304
self.interface_number
308305
}
309306

307+
pub fn handler(&mut self, handler: &'d mut dyn ControlHandler) {
308+
self.builder.interfaces[self.interface_number.0 as usize].handler = Some(handler);
309+
}
310+
310311
/// Add an alternate setting to the interface and write its descriptor.
311312
///
312313
/// Alternate setting numbers are guaranteed to be allocated consecutively, starting from 0.

0 commit comments

Comments
 (0)