* Read EP1_CONF_REG to get UART FIFO status in UsbSerialJtagTx::flush_tx_async
If the USB_SERIAL_JTAG_SERIAL_IN bit is 1, UART Tx FIFO is not full.
This makes flush_tx_async read the same bits as flush_tx_nb and the blocking flush_tx.
* Add change of UsbSerialJtag's async function to CHANGELOG
* Apply suggestion from @bugadani
---------
Co-authored-by: Dániel Buga <bugadani@gmail.com>
* Refactor `os_adapter` into directory module
* Clean up Cargo manifest a bit
* Add and improve documentation for `wifi` module
* Address review comment
* Split wifi feature into wifi-ap, wifi-sta and wifi-eap
* changelog
* Revert most of the changes, keep wifi and wifi-eap features only
* wifi-eap is unstable, include this feature into CI tests and documentation
* More consistent naming of interrupt-related functions
* MG entry
* changelog
* use correct package for MG
* fix hil
* other drivers
* address review comments
* s/esp-radio-preempt-baremetal/esp-preempt/g
esp-preempt will hopefully one day be more useful than just a scheduler
for esp-radio, therefore I've removed the radio prefix for that future
goal. I also felt that baremetal didn't really add much other than
noise, so I've removed that postfix too.
* fix xtask
* remove test code
* fixups
* Tweak I2C timeout defaults and stability
* Add some logs
* Set signal levels before releasing GPIOs
* Use a single option for the pins
* Don't use the hardware to detect idle state, stop when device releases SDA
* RMT: Encapsulate STATE accesses
Abstract away the unsafe AtomicU8 <-> RmtState conversion behind a safe
API. (See the code comments next to the `mod state` fore more details.)
This adds a few methods that are presently unused, but will be in future
PRs.
* RMT: remove unnecessary pub(crate) from *_SIGNAL arrays
* add #[inline] to (un)listen_(rx|tx)_interrupt
Ensure that these methods are always inlined (they probably would be
anyway, but better be sure):
- The `event` argument is usually known, which might allow for more
optimizations.
- Ideally, the compiler should be able to optimize away any complexity
that the `EnumSet` might add.
* RMT: inline Rmt::new_internal
given that there's only a single caller since a previous refactoring
* RMT: add test for channel RAM release on Drop
* RMT: macro simplification
- centralize all macros, getting close to a single source of truth for
the channel specification
- use paste! to avoid some repetitive macro arguments
- replace the tt-muncher by simple repeat patterns: This makes the macro
much easier to read. It would be possible to combine the
declare_channels!, declare_rx_channels!, declare_tx_channels! by using
one big complicated tt-muncher, but the cost in readability of the
macro seems excessive
- no need for absolute paths in these macros, we're the only user, and
they're only used at the top level of the module
* RMT: import crate::gpio to shorten paths
we keep the gpio prefix, since a later commit will also use
gpio::interconnect::{InputSignal, OutputSignal}
* AES-DMA work queue backend
Co-authored-by: Dominic Fischer <14130965+Dominaezzz@users.noreply.github.com>
* Clean up manual subslicing
* Don't copy in write_iv
* Add more to why we can use copy_from_nonoverlapping
* Replace buffers with NoBuffer
* Move buffers to backend
* Volatile-ly zero the key
* Make saving state the user's responsibility
* Ensure data is aligned on esp32
* Also make sure the DMA finishes in AesTransfer
* Deduplicate
* Fix paperwork
* Use the handler attribute
* Remove unused method
* Update esp-hal/MIGRATING-1.0.0-rc.0.md
Co-authored-by: Dominic Fischer <14130965+Dominaezzz@users.noreply.github.com>
* Fix build after rebase
* Add empty Final to NoBuffer
* Use the move api internally
* Make () the view type
---------
Co-authored-by: Dominic Fischer <14130965+Dominaezzz@users.noreply.github.com>
* Move all `embassy` examples to `async` and convert to individual projects
* Move all peripheral examples to `peripheral` and convert to individual projects
* Move all interrupt examples to `interrupt` and convert to individual projects
* Move all `ble` examples to `ble` and convert to individual projects
* Move all `esp-now` examples to `esp-now` and convert to individual projects
* Move all Wi-Fi examples to `wifi` and convert to individual projects
* Move all `ieee802154` examples to `ieee802154` and convert to individual projects
* Move all OTA examples to `ota` and convert to individual projects
* Remove files which are no longer required
* Update `xtask` to handle new examples project layout
* Update `examples/README.md`
* Don't hide TOML parsing error in `is_published`
* Update `fmt-packages` subcommand to handle new examples project layout
* Allow instructing work queue to poll immediately
* Don't expose Poll to the users
* Use NonNull as the VTable data pointer
* Fix cancellation
* Don't scan list for cancelled item, add async cancel
* Remove unnecessary poll fn
* Use a different waker registration in WorkItem
* Require that work items and drivers are Send
* Properly complete completed work item
* RMT: make PulseCode a newtype rather than an extension trait on u32
This has several advantages:
- the meaning of `u32` used as pulse code becomes more explicit
- it allows using `PulseCode` methods in `const` context (which is otherwise
not possible because Rust does not presently support associated const
fn in traits).
- it allows providing custom `defmt::Format` and `core::fmt::Debug` impls
for `PulseCode`, greatly helping with debugging
I have taken the liberty to implement `core::fmt::Debug` in a slightly
non-standard way: The most natural implementation would probably use a
struct-style output like
PulseCode { length1: 42, level1: Level::High, length2: 24, level2: Level::Low }
However, that is very lengthy and not really human-readable anymore when
dealing with an array of `PulseCode`s. Thus, this uses the more compact format
PulseCode(H 42, L 24)
This provides `u32: From<PulseCode>` and `PulseCode: From<u32>` impls and
converts rx and tx methods to accept `impl Into<PulseCode>` and
`impl From<PulseCode>`, respectively.
This should help to reduce how much user code needs to change (but replacing
`u32` type annotations with `PulseCode` will be required).
By applying `#[repr(transparent)]` to `struct PulseCode`, it is
guaranteed to match the layout of `u32` such that accessing the hardware
buffer via `*mut PulseCode` pointers is valid.
* RMT: Address review on PulseCode refactor, further refine the interface a bit
- introduce Level::const_from and Level::const_into
- pre-compute a few more shifts and masks (this is unlikely to affect
generated code, since the compiler would have const propagated them
anyway, but it helps to keep the PulseCode impl more readable)
- improve docstrings
- remove PulseCode::empty in favor of PulseCode::default, keep
PulseCode::end_marker for now (but it's not completely clear that this
interface is optimal; see also the FIXME note on adding a variant of
this methods that supports settings levels and length1)
- make PulseCode::new_unchecked pub and shuffle it around in the code so
that it doesn't show up first in the docs
- factor out PulseCode::symbolX methods for internal use in debug
formatting
- sprinkle a few more #[inline] to be totally sure that this really adds
no overhead over having plain u32
- convert methods receivers from &self to self given that PulseCode is
Copy (which probably doesn't matter much since all these methods
should always be inlined)
- remove PulseCode::as_u32() and make the tuple field pub: There's no
safety implication of marking this pub, and field access still
provides a const-compatible way to obtain the wrapped value
* Provide malloc, free and friends in esp-alloc
* Mute warning
* Remove some (now unused) global symbols
* Have a way to opt-out of esp-alloc's malloc,free etc.
* Fixes
* Move some common C functions from esp-radio to esp-rom-sys
* Fix
* Make esp-readio symbols weakly linked
* CHANGELOG.md
* Align MSRV, cleanup visibility
* Init before `assume_init`
* Linker script fixes
* Fix examples
* Remove heapless - esp-radio is alloc
* Fix examples
* Whitespace
* realloc_internal
* Make `__esp_radio_putchar` a no-op if `sys-logs` is not enabled
* Implement a generic work queue
* Implement AES work queue backend with software block modes
* Move tail after enqueueing
* Use NonNull more liberally
* Tweak the queue a bit
* Merge the AES-DMA test into the AES test suite
* Drop AesFlavour
* Document things
* Stop the driver when its handle is dropped
* Fix docs
* Address some correctness concerns