* Support for all async executors
* Make all Notifiucation primitives a public API
* Address a small typo
* Address a small typo
* Fix CI
* Tighten the notify APIs by not taking 0s
* Fix CI
* Fix changelog
* Fix changelog
* Fix the examples
* edge-executor support moved to edge-executor
* wake-from-isr feature for edge-executor
* Fix CI
* Bugfixing
* Clippy
* Upgrade to e-hal 1.0-rc1
* e-hal is no longer alpha
* Fix for ESP IDF < 5
* Unite all delay impls in a single module
* Model delays between transactions
* SPI: Make queueing it a bit more readable
* SPI: Plug delays
* Shorten the threshold for the Delay provider
* Clippy
* Fix the examples
* SPI: Detect last transaction in the presence of delays
* SPI: Introduce CsPin
* SPI: Introduce CsPin
* SPI: Mark delays with TODO
* Clippy
* SPI: Rename CsPin to CsCtl
* Transfer_transaction not necessary
* Hacky async TWAI driver
* Async TWAI: Custom priority and pin to core
* Async TWAI: Proper configuration of alerts
* Do not refer to esp-idf-sys as it is not an explicit dependency anymore
* Continuous mode ADC
* GPIO: Switch to the common notification; remove alloc req for async
* (WIP) async SPI
* Notification callbacks in async SPI
* SPI: Lower the code repetition
* Fix the build
* I2S pre-async simplification
* Async methods for I2S
* SPI: Wait for the transaction to complete on drop
* More flexibility in PinDriver::wait_for
* Remove the gargantuan mutex for now
* Arrays supported as ADC channels
* Fix timeouts
* ADC: measurement shape
* Fix the dependencies
* Fix CI
* ADC: cont config
* ADC: better atten API; fix delays
* ADC: Raw handle access
* I2S: Make config more symmetric with the other drivers
* I2S: Remove unnecessary generics
* Improve the semantics of read/write vrt partial r/w
* Review feedback
* Clippy
* Shorten static array initializers
* Do not glob-import all of esp-idf-sys
* SPI: make notifications non-static
* SPI: Remove the async fetch() hack; extend async support
* Fix the CI
* SPI: Restore WriteIter impl
* Bugfix: tx/rx handles mismatch
* I2S: Utility methods to write the whole buffer
* I2S Bugfix: wrong translation to native format
* More ergonomic API for TickType
* unsubscribe during reset will fail if ISR service is not enabled yet
* Typo
* Same defaults
* No need for unsafe here
Co-authored-by: Dominic Fischer <14130965+Dominaezzz@users.noreply.github.com>
* Assert that ESP_ERR_TIMEOUT should never happen
* Safe variant of completion
* ADC: wrong timeout conversion
* Proof of posession of i2s0/spi3 for esp32/esp32s2
* write_async only available on ESP IDF 5+
* Option to transmute the adc buffer to pcm
* ADC: only expose PCM conversion where it is possible (esp32/esp32s2)
* ADC: Fix channel chaining
* ADC: fix the CI
* ADC: Nullify everything
* ADC: as_pcm32 for riscv and esp32s3
* ADC: as_pcm32 for riscv and esp32s3
* ADC: read_raw
* I2S: Proper driver shutdown
* ADC: Fix clippy and compile errors on ESP-IDF 4
* Compat with ESP-IDF master
---------
Co-authored-by: Dominic Fischer <14130965+Dominaezzz@users.noreply.github.com>
* Refactor Rgb struct
Moves hsv convertion into
an associated function and further
implements From<Rgb> for u32.
* Update rmt_neopixel.rs
* Replace if-else with pattern matching
* embedded-hal::delay no longer returns Error
* embedded_hal::digital add generic GpioError
* spi: init work: from closure to Operation pattern
* first full implementation
* i2c: remove iter fn droped by e-hal master
* make ci work by temp. refere to e-hal master
* more ci fix
* make clippy happy
* more ci fighting
* gpio: cursed repair of ulp_processor
* fmt
* spi: repair example + get rid of generic's
* dep: change to new e-hal release
* fix e-hal 0.2 comp & fix bus
* fmt
* clippy
* remove debug artifacts
* test ci with e-hal-nb-alpha.1
* e-hal-nb to alpha.2
* modified comments
* impl e-hal delay to general purpose provider
* use embedded_hal_error macro for riscv-ulp-hal
* typo
* impl pwm alpha10
* fixed wrong return error on async gpio
* duplicated impl error macro for ulp
* WIP - PCNT implementation for idf v4
* use from core not std
pass pins as PeripheralRef
store PinDriver in PcntPin
* try a allocate/deallocate stratagy for PCNT UNITS (like esp-idf v5)
* update pcnt example
* WIP - PCNT implementation for idf v4
* use from core not std
pass pins as PeripheralRef
store PinDriver in PcntPin
* try a allocate/deallocate stratagy for PCNT UNITS (like esp-idf v5)
* update pcnt example
* use Arc/Mutex for PcntPin so Pnct can be Send
* update pcnt encoder example
* add partial esp-idf 5 pulse_cnt support (no watches/events)
requires update in esp-idf-sys to choose implementation
uses pcnt on esp-idf 4
uses pulse_cnt by default on esp-idf 5
* fix pcnt compilation on esp-idf 4
* implement interrupt service
* added some documentation
* fix subscribe - trampoline did not work with captured values.
update example to support either
* no need to initialize logging in example
* use esp_idf_sys::*
* Implement From not Into
* switch from bitflags to enumset
* typo
* switch #[doc] to /// style
* gate uses of Box with alloc feature and use alloc::boxed::Box
* rename to PcntDriver and make Pcnt Peripherals
* use `impl Peripheral<P = impl InputPin>` instead of `AnyInputPin`
* small cleanup
* rename config() -> channel_config()
implement defaults on PcntChannelConfig
* some cleanup on idf v5 pulse_ctr
* no need for PcntChanConfig, just use flags
* use comment style documentation not `#[doc=""]`
* small tweak to pnct example
* review fixes (the easy ones)
* added deps for the pcnt example (dev-dependencies)
* cargo fmt
* pub const fn new for PcntChanFlags
* pub const fn new for PcntUnitFlags
* fix compilation for esp-idf 4
* pass in all pins in PcntDriver::new
use PinIndex to specify pins to a channel
* remove unused lifetime
* use a simple macro to convert Option<> pin to a pin number
* cargo fmt
* remove V5 for now
fix #cfg's for when/where pcnt is available
* fix #cfg's for when/where pcnt is available
* fix #cfg's for when/where pcnt is available
* gate access to ISR_HANDLERS in drop with `alloc`
no need for `not(feature = "riscv-ulp-hal")` as pcnt is not included for `riscv-ulp-hal`
* cargo fmt / clippy
* stub out the pcnt example on an unsuported device
* - drop esp-idf-svc from dev-deps (compile error on esp-idf 5)
- use println!() instead of log::info!() in pcnt example
* fix ocnt example compile for riscv32imc-esp-espidf
---------
Co-authored-by: Chris Liebman <chris.l@taboola.com>
* Correct endianness of RMT signal
Bits were sent reversed, which worked for 0xff but not at smaller values to dim the LED. Also added rainbow example using a hsv function.
* cargo fmt
* Removed logger and fixed delays
* fix: #180 Remove redundant info in LedcDriver::new
This is an implementation of one of the possible solutions to the issue.
Signed-off-by: Raphael Höser <raphael@hoeser.info>
* Remove speed_mode method from LedcTimerDriver as it's not needed.
* Fix rustfmt issues
Signed-off-by: Raphael Höser <raphael@hoeser.info>
* overhaul UART to support single wire trasimitters/receivers
* add missing methods for uart transmitter/receiver
* fix `uart_config_t`'s `source_clk` being part of a union in `esp-idf v4.x`
* add `esp32c2`'s `PLL F40M` `APB` clock
* revert `uart_wait_tx_done` to timeout of 0
* fix incorrect order in `uart_driver_install`, `rx_buffer` shou always exceed `UART_FIFO_SIZE`
* Refactor `Owner` enum
* Fix double drop on `into_split`
* Add missing `count` methods for the UART drivers, change their return to be able to fit the maximum allowed value, don't run `drop` on temporary internal borrows, update example
* Add RMT receiver
* Changed line 891 to rmt_item32_t,
Changed line 835 to carrier_rm
* rmt.rs - changed line 891 to rmt_item32_t
rmt.rs - changed line 835 to carrier_rm
* Changed rmt channel implementation
* wrong rx_config_t field name
* More cleanup from rebase
* Fix cargo fmt check errors
* guess #1 to fix errors
* Try to fix clippy error
* Can't use log change to println
Change gpio pins for esp32-c3
* old update to esp-idf-hal newer one coming
* Fix format errors
* Update TxRmtDriver and RxRmtDriver
* Fix compile errors
* fix rmt_morse_code.rs error
* Fix format failure
* Fix more errors
* Fix examples
* Change PulsePair durationX type
- use u16 instead of PulseTicks
Co-authored-by: enelson1001 <ednelson5080@gmail>
* initial draft
* working alternative without using i32 id's
* EspSpiDevice + SpiDriverMaster / no global statics
* start splitting implementation in spi & spi_pool
* impl SpiDevice for EspSpiDevice
* spi2_pool draft (spi with software based cs)
* pre master fetch up
* Driver accepts Optional DMA channel + fetch master
* replaced: std with core, mutex with hal's cs
* replaced HashMap with Array
* merged spi2 into spi
* clean up
* replace std with core
* updated loopback example, spi takes dma directly
* moved criticalsection guard out of spi to spi_pool
* added paragraph to the release.md
* rm fn to add / rm device from bus or update config
* rm stored config from EspSpiDevice
* fmt'd
* grammer + changelog update
* implements inverted chipselect for spi.rs #119
* device with optional cs + guarded soft_cs wrapper
* fmt'd
* add pre / post cs delay functionality for wrapper
* no bus.finish for dev with no cs. partial fix#99
* spi driver renaming
* updated naming + locking with &mut SpiDeviceDriver
* updated naming + locking with &mut SpiDeviceDriver
* clean up
* updated CHANGELOG