Mark some dependencies as unstable (#2668)

* Mark some dependencies as unstable

* Fix docs

* Pass unstable to doctests

* Document the unstable feature
This commit is contained in:
Dániel Buga 2024-12-04 10:58:41 +01:00 committed by GitHub
parent a189eff517
commit 91d7f23982
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 147 additions and 26 deletions

View File

@ -25,17 +25,17 @@ defmt = { version = "0.3.8", optional = true }
delegate = "0.13.1" delegate = "0.13.1"
digest = { version = "0.10.7", default-features = false, optional = true } digest = { version = "0.10.7", default-features = false, optional = true }
document-features = "0.2.10" document-features = "0.2.10"
embassy-embedded-hal = "0.2.0" embassy-embedded-hal = { version = "0.2.0", optional = true }
embassy-futures = "0.1.1" embassy-futures = "0.1.1"
embassy-sync = "0.6.1" embassy-sync = "0.6.1"
embassy-usb-driver = { version = "0.1.0", optional = true } embassy-usb-driver = { version = "0.1.0", optional = true }
embassy-usb-synopsys-otg = { version = "0.1.0", optional = true } embassy-usb-synopsys-otg = { version = "0.1.0", optional = true }
embedded-can = "0.4.1" embedded-can = { version = "0.4.1", optional = true }
embedded-hal = "1.0.0" embedded-hal = "1.0.0"
embedded-hal-async = "1.0.0" embedded-hal-async = "1.0.0"
embedded-hal-nb = "1.0.0" embedded-hal-nb = "1.0.0"
embedded-io = "0.6.1" embedded-io = { version = "0.6.1", optional = true }
embedded-io-async = "0.6.1" embedded-io-async = { version = "0.6.1", optional = true }
enumset = "1.1.5" enumset = "1.1.5"
esp-build = { version = "0.1.0", path = "../esp-build" } esp-build = { version = "0.1.0", path = "../esp-build" }
esp-synopsys-usb-otg = { version = "0.4.2", optional = true, features = ["fs", "esp32sx"] } esp-synopsys-usb-otg = { version = "0.4.2", optional = true, features = ["fs", "esp32sx"] }
@ -153,8 +153,18 @@ octal-psram = []
# This feature is intended for testing; you probably don't want to enable it: # This feature is intended for testing; you probably don't want to enable it:
ci = ["defmt", "bluetooth"] ci = ["defmt", "bluetooth"]
# Enables APIs that are not stable and thus come with no stability guarantees. #! ### Unstable APIs
unstable = [] #! Unstable APIs are drivers and features that are not yet ready for general use.
#! They may be incomplete, have bugs, or be subject to change without notice.
#! Unstable APIs are not covered by semver guarantees.
## Enables APIs that are not stable and thus come with no stability guarantees.
unstable = [
"dep:embassy-embedded-hal",
"dep:embedded-can",
"dep:embedded-io",
"dep:embedded-io-async",
]
[lints.clippy] [lints.clippy]
mixed_attributes_style = "allow" mixed_attributes_style = "allow"

View File

@ -44,6 +44,7 @@ use core::{
task::{Context, Poll}, task::{Context, Poll},
}; };
#[cfg(any(doc, feature = "unstable"))]
use embassy_embedded_hal::SetConfig; use embassy_embedded_hal::SetConfig;
use embedded_hal::i2c::Operation as EhalOperation; use embedded_hal::i2c::Operation as EhalOperation;
use fugit::HertzU32; use fugit::HertzU32;
@ -280,6 +281,8 @@ pub struct I2c<'d, DM: Mode, T = AnyI2c> {
guard: PeripheralGuard, guard: PeripheralGuard,
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T: Instance, DM: Mode> SetConfig for I2c<'_, DM, T> { impl<T: Instance, DM: Mode> SetConfig for I2c<'_, DM, T> {
type Config = Config; type Config = Config;
type ConfigError = ConfigError; type ConfigError = ConfigError;

View File

@ -61,6 +61,7 @@
use core::marker::PhantomData; use core::marker::PhantomData;
pub use dma::*; pub use dma::*;
#[cfg(any(doc, feature = "unstable"))]
use embassy_embedded_hal::SetConfig; use embassy_embedded_hal::SetConfig;
#[cfg(gdma)] #[cfg(gdma)]
use enumset::EnumSet; use enumset::EnumSet;
@ -648,6 +649,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M, T> SetConfig for Spi<'_, M, T> impl<M, T> SetConfig for Spi<'_, M, T>
where where
T: Instance, T: Instance,
@ -1168,6 +1171,8 @@ mod dma {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M, T> SetConfig for SpiDma<'_, M, T> impl<M, T> SetConfig for SpiDma<'_, M, T>
where where
T: Instance, T: Instance,
@ -1797,6 +1802,8 @@ mod dma {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M, T> SetConfig for SpiDmaBus<'_, M, T> impl<M, T> SetConfig for SpiDmaBus<'_, M, T>
where where
T: Instance, T: Instance,

View File

@ -25,14 +25,12 @@
//! //!
//! ```rust, no_run //! ```rust, no_run
#![doc = crate::before_snippet!()] #![doc = crate::before_snippet!()]
//! # use embedded_can::Id;
//! # use esp_hal::twai; //! # use esp_hal::twai;
//! # use esp_hal::twai::filter; //! # use esp_hal::twai::filter;
//! # use esp_hal::twai::filter::SingleStandardFilter; //! # use esp_hal::twai::filter::SingleStandardFilter;
//! # use esp_hal::twai::TwaiConfiguration; //! # use esp_hal::twai::TwaiConfiguration;
//! # use esp_hal::twai::BaudRate; //! # use esp_hal::twai::BaudRate;
//! # use esp_hal::twai::TwaiMode; //! # use esp_hal::twai::TwaiMode;
//! # use embedded_can::Frame;
//! # use nb::block; //! # use nb::block;
//! // Use GPIO pins 2 and 3 to connect to the respective pins on the TWAI //! // Use GPIO pins 2 and 3 to connect to the respective pins on the TWAI
//! // transceiver. //! // transceiver.
@ -75,7 +73,6 @@
//! ### Self-testing (self reception of transmitted messages) //! ### Self-testing (self reception of transmitted messages)
//! ```rust, no_run //! ```rust, no_run
#![doc = crate::before_snippet!()] #![doc = crate::before_snippet!()]
//! # use embedded_can::Id;
//! # use esp_hal::twai; //! # use esp_hal::twai;
//! # use esp_hal::twai::filter; //! # use esp_hal::twai::filter;
//! # use esp_hal::twai::filter::SingleStandardFilter; //! # use esp_hal::twai::filter::SingleStandardFilter;
@ -84,7 +81,6 @@
//! # use esp_hal::twai::EspTwaiFrame; //! # use esp_hal::twai::EspTwaiFrame;
//! # use esp_hal::twai::StandardId; //! # use esp_hal::twai::StandardId;
//! # use esp_hal::twai::TwaiMode; //! # use esp_hal::twai::TwaiMode;
//! # use embedded_can::Frame;
//! # use nb::block; //! # use nb::block;
//! // Use GPIO pins 2 and 3 to connect to the respective pins on the TWAI //! // Use GPIO pins 2 and 3 to connect to the respective pins on the TWAI
//! // transceiver. //! // transceiver.
@ -205,6 +201,8 @@ impl_display! {
Other => "A different error occurred. The original error may contain more information", Other => "A different error occurred. The original error may contain more information",
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl From<ErrorKind> for embedded_can::ErrorKind { impl From<ErrorKind> for embedded_can::ErrorKind {
fn from(value: ErrorKind) -> Self { fn from(value: ErrorKind) -> Self {
match value { match value {
@ -219,6 +217,8 @@ impl From<ErrorKind> for embedded_can::ErrorKind {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_can::Error for ErrorKind { impl embedded_can::Error for ErrorKind {
fn kind(&self) -> embedded_can::ErrorKind { fn kind(&self) -> embedded_can::ErrorKind {
(*self).into() (*self).into()
@ -280,12 +280,16 @@ impl StandardId {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl From<StandardId> for embedded_can::StandardId { impl From<StandardId> for embedded_can::StandardId {
fn from(value: StandardId) -> Self { fn from(value: StandardId) -> Self {
embedded_can::StandardId::new(value.as_raw()).unwrap() embedded_can::StandardId::new(value.as_raw()).unwrap()
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl From<embedded_can::StandardId> for StandardId { impl From<embedded_can::StandardId> for StandardId {
fn from(value: embedded_can::StandardId) -> Self { fn from(value: embedded_can::StandardId) -> Self {
StandardId::new(value.as_raw()).unwrap() StandardId::new(value.as_raw()).unwrap()
@ -340,12 +344,16 @@ impl ExtendedId {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl From<ExtendedId> for embedded_can::ExtendedId { impl From<ExtendedId> for embedded_can::ExtendedId {
fn from(value: ExtendedId) -> Self { fn from(value: ExtendedId) -> Self {
embedded_can::ExtendedId::new(value.0).unwrap() embedded_can::ExtendedId::new(value.0).unwrap()
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl From<embedded_can::ExtendedId> for ExtendedId { impl From<embedded_can::ExtendedId> for ExtendedId {
fn from(value: embedded_can::ExtendedId) -> Self { fn from(value: embedded_can::ExtendedId) -> Self {
ExtendedId::new(value.as_raw()).unwrap() ExtendedId::new(value.as_raw()).unwrap()
@ -376,6 +384,8 @@ impl From<ExtendedId> for Id {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl From<Id> for embedded_can::Id { impl From<Id> for embedded_can::Id {
fn from(value: Id) -> Self { fn from(value: Id) -> Self {
match value { match value {
@ -385,6 +395,8 @@ impl From<Id> for embedded_can::Id {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl From<embedded_can::Id> for Id { impl From<embedded_can::Id> for Id {
fn from(value: embedded_can::Id) -> Self { fn from(value: embedded_can::Id) -> Self {
match value { match value {
@ -394,7 +406,7 @@ impl From<embedded_can::Id> for Id {
} }
} }
/// Structure backing the `embedded_can::Frame` trait. /// A TWAI Frame.
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))] #[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct EspTwaiFrame { pub struct EspTwaiFrame {
@ -486,6 +498,8 @@ impl EspTwaiFrame {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_can::Frame for EspTwaiFrame { impl embedded_can::Frame for EspTwaiFrame {
fn new(id: impl Into<embedded_can::Id>, data: &[u8]) -> Option<Self> { fn new(id: impl Into<embedded_can::Id>, data: &[u8]) -> Option<Self> {
Self::new(id.into(), data) Self::new(id.into(), data)
@ -1276,6 +1290,8 @@ pub enum EspTwaiError {
EmbeddedHAL(ErrorKind), EmbeddedHAL(ErrorKind),
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_can::Error for EspTwaiError { impl embedded_can::Error for EspTwaiError {
fn kind(&self) -> embedded_can::ErrorKind { fn kind(&self) -> embedded_can::ErrorKind {
if let Self::EmbeddedHAL(kind) = self { if let Self::EmbeddedHAL(kind) = self {
@ -1318,6 +1334,7 @@ unsafe fn copy_to_data_register(dest: *mut u32, src: &[u8]) {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
impl<DM, T> embedded_can::nb::Can for Twai<'_, DM, T> impl<DM, T> embedded_can::nb::Can for Twai<'_, DM, T>
where where
T: Instance, T: Instance,

View File

@ -226,6 +226,7 @@
use core::{marker::PhantomData, sync::atomic::Ordering, task::Poll}; use core::{marker::PhantomData, sync::atomic::Ordering, task::Poll};
#[cfg(any(doc, feature = "unstable"))]
use embassy_embedded_hal::SetConfig; use embassy_embedded_hal::SetConfig;
use enumset::{EnumSet, EnumSetType}; use enumset::{EnumSet, EnumSetType};
use portable_atomic::AtomicBool; use portable_atomic::AtomicBool;
@ -292,6 +293,8 @@ impl embedded_hal_nb::serial::Error for Error {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_io::Error for Error { impl embedded_io::Error for Error {
fn kind(&self) -> embedded_io::ErrorKind { fn kind(&self) -> embedded_io::ErrorKind {
embedded_io::ErrorKind::Other embedded_io::ErrorKind::Other
@ -622,6 +625,8 @@ pub enum ConfigError {
UnsupportedFifoThreshold, UnsupportedFifoThreshold,
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M, T> SetConfig for Uart<'_, M, T> impl<M, T> SetConfig for Uart<'_, M, T>
where where
T: Instance, T: Instance,
@ -635,6 +640,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M, T> SetConfig for UartRx<'_, M, T> impl<M, T> SetConfig for UartRx<'_, M, T>
where where
T: Instance, T: Instance,
@ -648,6 +655,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M, T> SetConfig for UartTx<'_, M, T> impl<M, T> SetConfig for UartTx<'_, M, T>
where where
T: Instance, T: Instance,
@ -1460,18 +1469,26 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::ErrorType for Uart<'_, M, T> { impl<T, M> embedded_io::ErrorType for Uart<'_, M, T> {
type Error = Error; type Error = Error;
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::ErrorType for UartTx<'_, M, T> { impl<T, M> embedded_io::ErrorType for UartTx<'_, M, T> {
type Error = Error; type Error = Error;
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::ErrorType for UartRx<'_, M, T> { impl<T, M> embedded_io::ErrorType for UartRx<'_, M, T> {
type Error = Error; type Error = Error;
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::Read for Uart<'_, M, T> impl<T, M> embedded_io::Read for Uart<'_, M, T>
where where
T: Instance, T: Instance,
@ -1482,6 +1499,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::Read for UartRx<'_, M, T> impl<T, M> embedded_io::Read for UartRx<'_, M, T>
where where
T: Instance, T: Instance,
@ -1500,6 +1519,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::ReadReady for Uart<'_, M, T> impl<T, M> embedded_io::ReadReady for Uart<'_, M, T>
where where
T: Instance, T: Instance,
@ -1510,6 +1531,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::ReadReady for UartRx<'_, M, T> impl<T, M> embedded_io::ReadReady for UartRx<'_, M, T>
where where
T: Instance, T: Instance,
@ -1520,6 +1543,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::Write for Uart<'_, M, T> impl<T, M> embedded_io::Write for Uart<'_, M, T>
where where
T: Instance, T: Instance,
@ -1534,6 +1559,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T, M> embedded_io::Write for UartTx<'_, M, T> impl<T, M> embedded_io::Write for UartTx<'_, M, T>
where where
T: Instance, T: Instance,
@ -1891,6 +1918,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T> embedded_io_async::Read for Uart<'_, Async, T> impl<T> embedded_io_async::Read for Uart<'_, Async, T>
where where
T: Instance, T: Instance,
@ -1903,6 +1932,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T> embedded_io_async::Read for UartRx<'_, Async, T> impl<T> embedded_io_async::Read for UartRx<'_, Async, T>
where where
T: Instance, T: Instance,
@ -1915,6 +1946,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T> embedded_io_async::Write for Uart<'_, Async, T> impl<T> embedded_io_async::Write for Uart<'_, Async, T>
where where
T: Instance, T: Instance,
@ -1928,6 +1961,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<T> embedded_io_async::Write for UartTx<'_, Async, T> impl<T> embedded_io_async::Write for UartTx<'_, Async, T>
where where
T: Instance, T: Instance,

View File

@ -32,8 +32,8 @@
//! The USB Serial/JTAG driver implements a number of third-party traits, with //! The USB Serial/JTAG driver implements a number of third-party traits, with
//! the intention of making the HAL inter-compatible with various device drivers //! the intention of making the HAL inter-compatible with various device drivers
//! from the community. This includes, but is not limited to, the [embedded-hal] //! from the community. This includes, but is not limited to, the [embedded-hal]
//! and [embedded-io] blocking traits, and the [embedded-hal-async] and //! and [embedded-io] blocking traits, and the [embedded-hal-async]
//! [embedded-io-async] asynchronous traits. //! and [embedded-io-async] asynchronous traits.
//! //!
//! In addition to the interfaces provided by these traits, native APIs are also //! In addition to the interfaces provided by these traits, native APIs are also
//! available. See the examples below for more information on how to interact //! available. See the examples below for more information on how to interact
@ -126,7 +126,10 @@
//! [embedded-hal-async]: https://docs.rs/embedded-hal-async/latest/embedded_hal_async/ //! [embedded-hal-async]: https://docs.rs/embedded-hal-async/latest/embedded_hal_async/
//! [embedded-io-async]: https://docs.rs/embedded-io-async/latest/embedded_io_async/ //! [embedded-io-async]: https://docs.rs/embedded-io-async/latest/embedded_io_async/
use core::{convert::Infallible, marker::PhantomData, task::Poll}; #[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
use core::task::Poll;
use core::{convert::Infallible, marker::PhantomData};
use procmacros::handler; use procmacros::handler;
@ -604,6 +607,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M> embedded_io::ErrorType for UsbSerialJtag<'_, M> impl<M> embedded_io::ErrorType for UsbSerialJtag<'_, M>
where where
M: Mode, M: Mode,
@ -611,6 +616,8 @@ where
type Error = Error; type Error = Error;
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M> embedded_io::ErrorType for UsbSerialJtagTx<'_, M> impl<M> embedded_io::ErrorType for UsbSerialJtagTx<'_, M>
where where
M: Mode, M: Mode,
@ -618,6 +625,8 @@ where
type Error = Error; type Error = Error;
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M> embedded_io::ErrorType for UsbSerialJtagRx<'_, M> impl<M> embedded_io::ErrorType for UsbSerialJtagRx<'_, M>
where where
M: Mode, M: Mode,
@ -625,6 +634,8 @@ where
type Error = Error; type Error = Error;
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M> embedded_io::Read for UsbSerialJtag<'_, M> impl<M> embedded_io::Read for UsbSerialJtag<'_, M>
where where
M: Mode, M: Mode,
@ -634,6 +645,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M> embedded_io::Read for UsbSerialJtagRx<'_, M> impl<M> embedded_io::Read for UsbSerialJtagRx<'_, M>
where where
M: Mode, M: Mode,
@ -648,6 +661,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M> embedded_io::Write for UsbSerialJtag<'_, M> impl<M> embedded_io::Write for UsbSerialJtag<'_, M>
where where
M: Mode, M: Mode,
@ -661,6 +676,8 @@ where
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<M> embedded_io::Write for UsbSerialJtagTx<'_, M> impl<M> embedded_io::Write for UsbSerialJtagTx<'_, M>
where where
M: Mode, M: Mode,
@ -680,11 +697,15 @@ where
static WAKER_TX: AtomicWaker = AtomicWaker::new(); static WAKER_TX: AtomicWaker = AtomicWaker::new();
static WAKER_RX: AtomicWaker = AtomicWaker::new(); static WAKER_RX: AtomicWaker = AtomicWaker::new();
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
#[must_use = "futures do nothing unless you `.await` or poll them"] #[must_use = "futures do nothing unless you `.await` or poll them"]
struct UsbSerialJtagWriteFuture<'d> { struct UsbSerialJtagWriteFuture<'d> {
_peripheral: PeripheralRef<'d, USB_DEVICE>, _peripheral: PeripheralRef<'d, USB_DEVICE>,
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<'d> UsbSerialJtagWriteFuture<'d> { impl<'d> UsbSerialJtagWriteFuture<'d> {
fn new(_peripheral: impl Peripheral<P = USB_DEVICE> + 'd) -> Self { fn new(_peripheral: impl Peripheral<P = USB_DEVICE> + 'd) -> Self {
crate::into_ref!(_peripheral); crate::into_ref!(_peripheral);
@ -706,6 +727,8 @@ impl<'d> UsbSerialJtagWriteFuture<'d> {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl core::future::Future for UsbSerialJtagWriteFuture<'_> { impl core::future::Future for UsbSerialJtagWriteFuture<'_> {
type Output = (); type Output = ();
@ -723,10 +746,14 @@ impl core::future::Future for UsbSerialJtagWriteFuture<'_> {
} }
#[must_use = "futures do nothing unless you `.await` or poll them"] #[must_use = "futures do nothing unless you `.await` or poll them"]
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
struct UsbSerialJtagReadFuture<'d> { struct UsbSerialJtagReadFuture<'d> {
_peripheral: PeripheralRef<'d, USB_DEVICE>, _peripheral: PeripheralRef<'d, USB_DEVICE>,
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl<'d> UsbSerialJtagReadFuture<'d> { impl<'d> UsbSerialJtagReadFuture<'d> {
fn new(_peripheral: impl Peripheral<P = USB_DEVICE> + 'd) -> Self { fn new(_peripheral: impl Peripheral<P = USB_DEVICE> + 'd) -> Self {
crate::into_ref!(_peripheral); crate::into_ref!(_peripheral);
@ -748,6 +775,8 @@ impl<'d> UsbSerialJtagReadFuture<'d> {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl core::future::Future for UsbSerialJtagReadFuture<'_> { impl core::future::Future for UsbSerialJtagReadFuture<'_> {
type Output = (); type Output = ();
@ -783,6 +812,8 @@ impl<'d> UsbSerialJtag<'d, Async> {
} }
impl UsbSerialJtagTx<'_, Async> { impl UsbSerialJtagTx<'_, Async> {
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
async fn write_bytes_async(&mut self, words: &[u8]) -> Result<(), Error> { async fn write_bytes_async(&mut self, words: &[u8]) -> Result<(), Error> {
let reg_block = USB_DEVICE::register_block(); let reg_block = USB_DEVICE::register_block();
@ -800,6 +831,8 @@ impl UsbSerialJtagTx<'_, Async> {
Ok(()) Ok(())
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
async fn flush_tx_async(&mut self) -> Result<(), Error> { async fn flush_tx_async(&mut self) -> Result<(), Error> {
if USB_DEVICE::register_block() if USB_DEVICE::register_block()
.jfifo_st() .jfifo_st()
@ -815,6 +848,8 @@ impl UsbSerialJtagTx<'_, Async> {
} }
impl UsbSerialJtagRx<'_, Async> { impl UsbSerialJtagRx<'_, Async> {
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
async fn read_bytes_async(&mut self, buf: &mut [u8]) -> Result<usize, Error> { async fn read_bytes_async(&mut self, buf: &mut [u8]) -> Result<usize, Error> {
if buf.is_empty() { if buf.is_empty() {
return Ok(0); return Ok(0);
@ -830,6 +865,8 @@ impl UsbSerialJtagRx<'_, Async> {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_io_async::Write for UsbSerialJtag<'_, Async> { impl embedded_io_async::Write for UsbSerialJtag<'_, Async> {
async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> { async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
embedded_io_async::Write::write(&mut self.tx, buf).await embedded_io_async::Write::write(&mut self.tx, buf).await
@ -840,6 +877,8 @@ impl embedded_io_async::Write for UsbSerialJtag<'_, Async> {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_io_async::Write for UsbSerialJtagTx<'_, Async> { impl embedded_io_async::Write for UsbSerialJtagTx<'_, Async> {
async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> { async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
self.write_bytes_async(buf).await?; self.write_bytes_async(buf).await?;
@ -852,12 +891,16 @@ impl embedded_io_async::Write for UsbSerialJtagTx<'_, Async> {
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_io_async::Read for UsbSerialJtag<'_, Async> { impl embedded_io_async::Read for UsbSerialJtag<'_, Async> {
async fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> { async fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> {
embedded_io_async::Read::read(&mut self.rx, buf).await embedded_io_async::Read::read(&mut self.rx, buf).await
} }
} }
#[cfg(any(doc, feature = "unstable"))]
#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))]
impl embedded_io_async::Read for UsbSerialJtagRx<'_, Async> { impl embedded_io_async::Read for UsbSerialJtagRx<'_, Async> {
async fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> { async fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> {
self.read_bytes_async(buf).await self.read_bytes_async(buf).await

View File

@ -4,7 +4,7 @@
//! writing to and reading from UART. //! writing to and reading from UART.
//% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3 //% CHIPS: esp32 esp32c2 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: embassy embassy-generic-timers //% FEATURES: embassy embassy-generic-timers esp-hal/unstable
#![no_std] #![no_std]
#![no_main] #![no_main]

View File

@ -3,7 +3,7 @@
//! Most dev-kits use a USB-UART-bridge - in that case you won't see any output. //! Most dev-kits use a USB-UART-bridge - in that case you won't see any output.
//% CHIPS: esp32c3 esp32c6 esp32h2 esp32s3 //% CHIPS: esp32c3 esp32c6 esp32h2 esp32s3
//% FEATURES: embassy embassy-generic-timers //% FEATURES: embassy embassy-generic-timers esp-hal/unstable
#![no_std] #![no_std]
#![no_main] #![no_main]

View File

@ -157,13 +157,19 @@ pub fn build_documentation(workspace: &Path, package: Package, chip: Chip) -> Re
fn apply_feature_rules(package: &Package, config: &Config) -> Vec<String> { fn apply_feature_rules(package: &Package, config: &Config) -> Vec<String> {
let chip_name = &config.name(); let chip_name = &config.name();
match (package, chip_name.as_str()) {
(Package::EspHal, "esp32") => vec!["quad-psram".to_owned(), "ci".to_owned()],
(Package::EspHal, "esp32s2") => vec!["quad-psram".to_owned(), "ci".to_owned()],
(Package::EspHal, "esp32s3") => vec!["quad-psram".to_owned(), "ci".to_owned()],
(Package::EspHal, _) => vec!["ci".to_owned()],
(Package::EspWifi, _) => {
let mut features = vec![]; let mut features = vec![];
match package {
Package::EspHal => {
features.push("unstable".to_owned());
features.push("ci".to_owned());
match chip_name.as_str() {
"esp32" => features.push("quad-psram".to_owned()),
"esp32s2" => features.push("quad-psram".to_owned()),
"esp32s3" => features.push("quad-psram".to_owned()),
_ => {}
};
}
Package::EspWifi => {
if config.contains("wifi") { if config.contains("wifi") {
features.push("wifi".to_owned()); features.push("wifi".to_owned());
features.push("esp-now".to_owned()); features.push("esp-now".to_owned());
@ -178,11 +184,11 @@ fn apply_feature_rules(package: &Package, config: &Config) -> Vec<String> {
if config.contains("wifi") && config.contains("ble") { if config.contains("wifi") && config.contains("ble") {
features.push("coex".to_owned()); features.push("coex".to_owned());
} }
}
_ => {}
}
features features
} }
_ => vec![],
}
}
/// Load all examples at the given path, and parse their metadata. /// Load all examples at the given path, and parse their metadata.
pub fn load_examples(path: &Path, action: CargoAction) -> Result<Vec<Metadata>> { pub fn load_examples(path: &Path, action: CargoAction) -> Result<Vec<Metadata>> {

View File

@ -870,7 +870,7 @@ fn run_doc_tests(workspace: &Path, args: ExampleArgs) -> Result<()> {
// Determine the appropriate build target, and cargo features for the given // Determine the appropriate build target, and cargo features for the given
// package and chip: // package and chip:
let target = target_triple(args.package, &chip)?; let target = target_triple(args.package, &chip)?;
let features = vec![chip.to_string()]; let features = vec![chip.to_string(), "unstable".to_string()];
// We need `nightly` for building the doc tests, unfortunately: // We need `nightly` for building the doc tests, unfortunately:
let toolchain = if chip.is_xtensa() { "esp" } else { "nightly" }; let toolchain = if chip.is_xtensa() { "esp" } else { "nightly" };