From 369d963dd6ece2fe73d5abd2696f3dc1e40a5358 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Sat, 27 Apr 2024 22:14:54 -0400 Subject: [PATCH] Don't require UsbBus to be Sync. If the UsbBus is not Sync, it can still be used to make a UsbDevice, but that UsbDevice will not be Sync. This is quite limiting (as it mostly means that the USB device can't be accessed from interrupt contexts), but it is entirely safe from the Rust safety perspective. --- CHANGELOG.md | 1 + src/bus.rs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5d86e4..e0183a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. * [breaking] The control pipe is now provided in the `UsbDeviceBuilder` API to allow for user-provided control pipes. This makes it so that control pipes have configurable sizing. +* Don't require UsbBus to be Sync. If a UsbBus is not Sync, it can still be used to make a UsbDevice, but that UsbDevice will not be Sync (ensuring soundness). ## [0.3.2] - 2024-03-06 diff --git a/src/bus.rs b/src/bus.rs index 398b192..5c6af03 100644 --- a/src/bus.rs +++ b/src/bus.rs @@ -17,7 +17,7 @@ use portable_atomic::{AtomicPtr, Ordering}; /// take place before [`enable`](UsbBus::enable) is called. After the bus is enabled, in practice /// most access won't mutate the object itself but only endpoint-specific registers and buffers, the /// access to which is mostly arbitrated by endpoint handles. -pub trait UsbBus: Sync + Sized { +pub trait UsbBus: Sized { /// Allocates an endpoint and specified endpoint parameters. This method is called by the device /// and class implementations to allocate endpoints, and can only be called before /// [`enable`](UsbBus::enable) is called.