Commit Graph

6565 Commits

Author SHA1 Message Date
2cfe2439c9 Refactor: Impl From for SampleTime and Resolution 2022-10-26 17:07:58 -05:00
7b38b95e10 Refactor: Factor out Resolution 2022-10-26 17:07:58 -05:00
5142674786 Fix pre-existing SampleTime typos 2022-10-26 17:07:50 -05:00
a5b1d2237f Refactor: Factor out SampleTime 2022-10-26 17:06:44 -05:00
61560e740d time: add missing cargo manifest fields. embassy-time-v0.1.0 2022-10-26 22:18:10 +02:00
d2246ae693 Release embassy-sync, embassy-time v0.1.0 embassy-sync-v0.1.0 2022-10-26 22:13:27 +02:00
7f499f3edc Merge #1024
1024: stm32/adc: Remove voltage and temperature conversions r=Dirbaio a=GrantM11235

The current conversion utilities are confusing and a bit of a footgun. (Two out of the three examples got it wrong! They didn't measure vref at all, so all the conversions are completely wrong if vcca isn't 3.3v)

I think we should eventually have some sort of conversion utilities in the HAL, but for now I think it is best to just remove it and let the users do their own math.

cc `@chemicstry` 

Co-authored-by: Grant Miller <GrantM11235@gmail.com>
2022-10-26 19:44:06 +00:00
01e23bf9dd Merge #1025
1025: Implement I2C timeouts, second attempt r=Dirbaio a=chemicstry

This is an alterrnative to #1022 as discussed there.

Timeouts are implemented using suggested `check_timeout: impl Fn() -> Result<(), Error>` function, which does not depend on `embassy-time` by default and is a noop for regular I2C.

This also adds `time` feature like in `embassy-nrf` to enable `embassy-time` dependencies. While at it, I also gated some other peripherals that depend on `embassy-time`, notably `usb` and (partially) `subghz`.

`TimeoutI2c` is currently only implemented for i2cv1, because i2cv2 has additional complications:
- Async methods still use a lot of busy waiting code in between DMA transfers, so simple `with_timeout()` will not work and it will have to use both types of timeouts. It could probably be rewritten to replace busy waits with IRQs, but that's outside the scope of this PR.
- I2C definition `I2c<'d, T, TXDMA, RXDMA>` is different from i2cv1 `I2c<'d, T>` making it hard to share single `TimeoutI2c` wrapper. A couple of options here:
  - Duplicate `TimeoutI2c` code
  - Add dummy `TXDMA`, `RXDMA` types to i2cv1 considering that in the future it should also support DMA

Co-authored-by: chemicstry <chemicstry@gmail.com>
2022-10-26 19:34:43 +00:00
e5097a8866 Merge #959
959: Generic, executor-agnostic queue implementation r=ivmarkov a=ivmarkov

Hopefully relatively well documented.

Implementation relies on a fixed-size `SortedLinkedList` from `heapless`. (By default, for up to 128 timer schedules, but we can lower this number to - say - 64.)

As discussed earlier, on queue overflow, the `WakerRegistration` approach is utilized, whereas the waker that is ordered first in the queue is awoken to make room for the incoming one (which might be the waker that would be awoken after all!). Wakers are compared with `Waker::will_wake`, so the queue should actually not fill up that easily, if at all.

I've left provisions for the user to manually instantiate the queue using a dedicated macro - `generic_queue!` so that users willing to adjust the queue size, or users (like me) who have to use the queue in a complex "on-top-of-RTOS-but-the-timer-driver-calling-back-from-ISR" scenario can customize the mutex that protects the queue.

The one thing I'm not completely happy with is the need to call `{ embassy_time::queue::initialize() }` early on before any futures using embassy-time are polled, which is currently on the shoulders of the user. I'm open to any ideas where we can get rid of this and do it on the first call to `_embassy_time_schedule_wake`, without introducing very complex combinations of critical sections, atomics and whatnot.




Co-authored-by: ivmarkov <ivan.markov@gmail.com>
Co-authored-by: Dario Nieuwenhuis <dirbaio@dirbaio.net>
2022-10-26 19:14:12 +00:00
f9da6271ce time/generic_queue: use Vec instead of SortedLinkedList 2022-10-26 21:00:50 +02:00
4976cbbe60 time/generic-queue: ensure queue goes in .bss instead of .data 2022-10-26 20:02:58 +02:00
9b86de770b Merge #1031
1031: stm32: Add support for read_until_idle on UART - rebase r=Dirbaio a=Dirbaio

`@guillaume-michel` I rebased #1011 for you and then noticed you don't have the "allowed maintainers to push" option so I had to open a new PR. 

bors r+

Co-authored-by: Guillaume MICHEL <guillaume@squaremind.io>
2022-10-26 17:16:15 +00:00
9cac649fcf stm32: Add support for read_until_idle on UART 2022-10-26 19:06:18 +02:00
ff76fde299 Merge pull request #1030 from embassy-rs/update-nightly
Update Rust nightly.
2022-10-26 18:41:23 +02:00
560eecdb73 Remove the _embassy_time_schedule_wake magic 2022-10-26 18:05:27 +03:00
ac6995f9e6 Fix a bug identified during code review 2022-10-26 17:48:22 +03:00
eeb072d9cb Update Rust nightly. 2022-10-26 16:47:29 +02:00
1669e39565 Buffer data to be written to flash in ram if it does not already reside in ram 2022-10-26 15:02:39 +02:00
80e58426fc Add flash example & flash HIL test 2022-10-26 12:24:04 +02:00
1b249ca72d Merge #987
987: (embassy-stm32): uart flowcontrol r=Dirbaio a=MathiasKoch

Add RTS & CTS flow control to stm32 UARTs

Co-authored-by: Mathias <mk@blackbird.online>
2022-10-26 10:18:44 +00:00
66611a80ca Introduce shared new_inner for uart instantiation 2022-10-26 11:51:37 +02:00
d1eee52625 Merge branch 'master' of https://github.com/embassy-rs/embassy into embassy-stm32/uart-flowcontrol 2022-10-26 11:47:00 +02:00
71cc6833e1 Merge #1029
1029: Update nrf pacs r=Dirbaio a=diondokter



Co-authored-by: Dion Dokter <dion@tweedegolf.com>
2022-10-26 09:35:44 +00:00
0c9ec8dc36 Update usb 2022-10-26 10:39:29 +02:00
ea868920e6 Update nrf pacs 2022-10-26 09:13:26 +02:00
7a6732adcf Improve examples 2022-10-24 15:27:12 -05:00
52c03cf0a4 Add more docs 2022-10-24 22:48:40 +03:00
ac61e0ee9f fmt 2022-10-24 22:39:13 +03:00
33f75419e5 Unify i2cv1 definition with i2cv2 2022-10-24 22:34:10 +03:00
6062978d58 Remove weird async timeouts 2022-10-24 22:22:20 +03:00
ca8afacfd0 Implement TimeoutI2c for i2cv2 2022-10-24 22:11:15 +03:00
9ad7e85288 Merge branch 'i2c_timeout2_v2' into i2c_timeout2 2022-10-24 21:50:29 +03:00
ad0eb3f4bd Implement flash padding to 256 under assumption that all QSPI NOR flashes are MultiwriteNorFlashes 2022-10-24 12:17:22 +02:00
8d809c96ec Merge branch 'master' of https://github.com/embassy-rs/embassy into embassy-rp/flash 2022-10-24 12:14:26 +02:00
9b209ffe1c Add docs 2022-10-24 12:39:47 +03:00
5f02bee388 Gate TimeoutI2c behind i2cv1 2022-10-24 12:34:55 +03:00
1bed02296c i2cv2 timeouts 2022-10-24 12:33:17 +03:00
516f4ce946 Fix embassy-time wasm build and fix a bug in wasm time driver 2022-10-24 12:15:53 +03:00
545cc9326b stm32/adc: Remove voltage and temperature conversions 2022-10-24 04:00:29 -05:00
d99841fea9 Implement time feature 2022-10-24 11:38:15 +03:00
e3cf4255c6 Help compiler with type inference 2022-10-24 11:31:54 +03:00
4ce4131f8b Implement i2cv1 timeout 2022-10-24 11:30:04 +03:00
f78c706b89 Address review feedback 2022-10-24 11:10:59 +03:00
4d5550070f Change time Driver contract to never fire the alarm synchronously 2022-10-24 09:17:43 +03:00
53608a87ac Address feedback after code review 2022-10-24 08:21:35 +03:00
ba6e452cc5 Documentation and initial testing framework
Add mock waker

First simple test

Tests & documentation
2022-10-24 08:21:31 +03:00
c2404ee8ca Initial generic timer queue impl 2022-10-24 08:20:29 +03:00
ce1cba761c Merge #855
855: PDM microphone support for nrf r=Dirbaio a=pbert519

PDM microphones have a long startup phase, therefore the driver samples continuously and only switches the target buffer if the user requests sampling.

Co-authored-by: pbert <pbert@posteo.net>
2022-10-21 21:03:51 +00:00
495ca6108c Merge #1020
1020: Fix mistaken EP_IN_WAKERS r=Dirbaio a=mkj

I'm not totally certain, but this looks like a typo?

Co-authored-by: Matt Johnston <matt@ucc.asn.au>
2022-10-21 20:43:14 +00:00
73d06dd67b Merge #1021
1021: rp usb: wait for accept() completion r=Dirbaio a=mkj

This fixes failures when `defmt` feature isn't enabled (timing related). 

Co-authored-by: Matt Johnston <matt@ucc.asn.au>
2022-10-21 19:48:49 +00:00