* Add HW and SW flow control option
* Fmt + warnings
* changelog entry
wrong unstable macro
* address reviews
* get away with using 1 pin only
* unnecessary function call
* Address reviews + use "byte" instead of misleading "character" (at_cmd)
* RMT: simplify/avoid a few cfg attributes
* RMT: factor address calculation into new function channel_ram_start()
* RMT: don't repeatedly read *ChannelInternal::memsize()
Moving this into separate variable greatly increases readability of the
code. It also avoids unnecessary repeated volatile reads of the
corresponding register.
* RMT: rework SingleShotTxTransaction offset calculation
This is not a big simplification yet, but will help will help with
simplifying the somewhat obscure `ram_index` calculation.
* RMT: rework SingleShotTxTransaction offset calculation, part 2
This removes the somewhat hard to parse
let ram_index = (((self.index - memsize) / (memsize / 2)) % 2) * (memsize / 2);
calculation, by resorting to the ping-pong method also used by the idf
code.
Importantly, even with the previous code, ram_index cannot in fact assume any
possible in-range value in channel RAM, but only either 0 or memsize / 2
(except at the end of a transaction, when there's no data left).
Thus we can update it via
ram_index = memsize / 2 - ram_index
such that will alternate ("ping-pong") between 0 and memsize / 2.
* RMT: error out on config.memsize == 0
* RMT: fix bogus cfg attributes
This is inside of a #[cfg(any(esp32, esp32s2))] block, so esp32s3 can
never happen: The result of nested cfg attributes was still correct, but
writing it like this doesn't make any sense.
* RMT: remove unnecessary integer literal type annotation
* RMT: remove spurious code from clear_interrupts()
- update() is known to be a no-op here
- For other chips, resetting pointers and setting mem_owner is not done
in clear_interrupts(), but in start_rx. clear_interrupts() is only used in
situations where either the channel was unused before (i.e. should be
stopped), or we explicitly called Self::stop() before. Thus, match
other chips here.
* RMT: clear mem_owner in start_tx
While I haven't seen this happen, it appears to be possible that one of
the subsequent channels (or even the current channel) was used for RX before.
Thus, ensure that mem_owner is set correctly for TX.
* RMT: small refactoring
There should be no functional change, but this should make it even more
obvious that the return value is exactly the number of codes written.
* RMT: in SingleShotTxTransaction, improve error handling
I haven't seen any error here in practise, but it seems that this could
have locked up in the `while !is_threshold_set()` loop before in case of
an error or early stop code in the data.
* RMT: avoid one register access
* RMT: update HIL tests to use wrapping and extended RAM
* RMT: address review regarding data-writing loops
Make the code less startling by performing writes to the hardware in a
more imperative style via the for-loop; slightly refactor slice
splitting.
* RMT: Update changelog
* Group optional dependencies
* Separate version from crate name
* Restore defmt-log mutual exclusivity
* Gate ufmt
* Remove usb-device
* Feature-gate unsable dependencies behind unstable
* S2: assume single core for portable-atomic
* Clean up feature flag docs
* Sack debug
* Fix clippy
* Update examples
* Fix usb-otg feature
* Fix fmt
* Add version to log dep
* Also mark bluetooth private
* Correct changelog/MG
* Clean up esp-hal-embassy
* Clean up ieee802154
* Clean up esp-println
* Move the timestamp function up
* Move info from readme to feature docs
* Clean up esp-storage
* Clean up esp-wifi
* Fix examples
* Add a note for the private features
* Add test case
* Split into files
* Do not clear interrupt status bits in handler
* Document changes
* Refactor gpio tests to test the default interrupt handler by default
* Fix typo
* Extract mk_static
* Write a bit about interrupt handling
* Various fixes
* Test that the future doesn't resolve for a preceding interrupt
* Add multi-core test
* ESP32: handle GPIO interrupt on the listening core
* Fix multi-core edge case
* WIP
* Clean up init_gpio
* Expand docs a bit
* Remove Input/OutputConnection
* Not everything has PCNT and it's not important for the example
* Remove Frozen, enable input when creating the signal
* Hide fields, add getters
* Update MG
* Add force GPIO matrix fns
* Fix formatting
* Mention latency in the docs
* Rename number to gpio_number
* Deduplicate pin setup code
* Reword associated peripheral
* Rename with_inverted_input/output
* Remove link to doc-hidden OutputSignal
* Fix link syntax
* Make sure to enable relevant interrupts
* Fix more
* Make `current_runlevel` public
* Check that interrupts are enabled when initializing
* Try to be more honest in `is_in_isr`
* Adjust log levels
* Really fix ESP32 COEX
* Improve COEX example
* fmt
* CHANGELOG
* CHANGELOG
* Clarify on `esp_bt_controller_config_t`
* Take INTENABLE into account
* Test esp-wifi init fails
* Simplify test code
* Clarify comment
* fmt
* Rename
* Adapt the test
* Revert unrelated changes (esp_bt_controller_config_t)
* Align Xtensa (current_runlevel)
* Additional test
* Change test
* inter-state
* inter-state (2)
* warnings fix
* fix warnings
* fmt + changelogs
* another unsafe extern "C" doode
* real fmt now
* MSRV + format
* Ignore unsafe_op_in_unsafe_fn lint for now in esp-hal and esp-wifi
* msrv + fmt
* ugh....
* get lcd_cam example right
* expr_2021 -> expr experiment
* gagagugu
* reviews
* more unneeded unsafes (help)
* finish esp-hal unsafe cleanup
* each unsafe call is marked separately
fmt
* should be good now (?)
* piece was never an option...
* dumb
* Add stability to config options
* Reject unstable options
* Add note to docs
* Use enum validator in e-h-embassy
* Generate a list for enumerated values
* Don't allow line-wrapping headers
* Center default/allowed values
* Changelog
* Display stability under name
* Remove - from Allowed value when option has no constraints
* Mark more options as unstable
* Include a hint in the unstable error
* Expose CopyDmaChannel
* Add DMA memcpy support to the S2
* whoops, esp32 is a thing
* clear can be a no-op
* sigh
* rust
* enable the DMA channel
* The S2 wants RX first...
* fmt
* Add allocator_api2, AnyMemory
* Implement more allocators
* Document
* Sub PR number
* Fix doc formatting
* Remove redundant checks
* Test failure case in try_reserve
* Fix off-by-one in the allowed range of the spi clock calculations
* Update CHANGELOG
* Add test to verify calculation
* Use actual frequency limits in validation
* Rename variables
---------
Co-authored-by: Dániel Buga <bugadani@gmail.com>
* `SpiDmaBus` no longer adjusts the DMA buffer length for each transfer
* imports
* lint
* chunking is hard
* Also check received bytes
* Do not check descriptors when copying received data
---------
Co-authored-by: Dániel Buga <bugadani@gmail.com>
* Test flip-link
* Add todo
* Rebuild if linker files change
* Let espsegs show .stack
* Try to fix flip_link
* Changelog
* Make SSP configurable
* Substitute config values