Remove default, reorder generic params

This commit is contained in:
ivmarkov 2022-09-24 12:08:46 +03:00
parent 8536666148
commit c5ce02b30e
4 changed files with 16 additions and 12 deletions

View File

@ -3,7 +3,7 @@ use core::cell::Cell;
use core::future::{poll_fn, Future}; use core::future::{poll_fn, Future};
use core::task::{Context, Poll, Waker}; use core::task::{Context, Poll, Waker};
use crate::blocking_mutex::raw::{CriticalSectionRawMutex, RawMutex}; use crate::blocking_mutex::raw::RawMutex;
use crate::blocking_mutex::Mutex; use crate::blocking_mutex::Mutex;
/// Single-slot signaling primitive. /// Single-slot signaling primitive.
@ -22,19 +22,20 @@ use crate::blocking_mutex::Mutex;
/// ///
/// ``` /// ```
/// use embassy_sync::signal::Signal; /// use embassy_sync::signal::Signal;
/// use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
/// ///
/// enum SomeCommand { /// enum SomeCommand {
/// On, /// On,
/// Off, /// Off,
/// } /// }
/// ///
/// static SOME_SIGNAL: Signal<SomeCommand> = Signal::new(); /// static SOME_SIGNAL: Signal<CriticalSectionRawMutex, SomeCommand> = Signal::new();
/// ``` /// ```
pub struct Signal<T, R = CriticalSectionRawMutex> pub struct Signal<M, T>
where where
R: RawMutex, M: RawMutex,
{ {
state: Mutex<R, Cell<State<T>>>, state: Mutex<M, Cell<State<T>>>,
} }
enum State<T> { enum State<T> {
@ -43,9 +44,9 @@ enum State<T> {
Signaled(T), Signaled(T),
} }
impl<T, R> Signal<T, R> impl<M, T> Signal<M, T>
where where
R: RawMutex, M: RawMutex,
{ {
/// Create a new `Signal`. /// Create a new `Signal`.
pub const fn new() -> Self { pub const fn new() -> Self {
@ -55,9 +56,9 @@ where
} }
} }
impl<R, T: Send> Signal<T, R> impl<M, T: Send> Signal<M, T>
where where
R: RawMutex, M: RawMutex,
{ {
/// Mark this Signal as signaled. /// Mark this Signal as signaled.
pub fn signal(&self, val: T) { pub fn signal(&self, val: T) {

View File

@ -12,6 +12,7 @@ use embassy_futures::select::{select, Either};
use embassy_nrf::gpio::{Input, Pin, Pull}; use embassy_nrf::gpio::{Input, Pin, Pull};
use embassy_nrf::usb::{Driver, PowerUsb}; use embassy_nrf::usb::{Driver, PowerUsb};
use embassy_nrf::{interrupt, pac}; use embassy_nrf::{interrupt, pac};
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
use embassy_sync::signal::Signal; use embassy_sync::signal::Signal;
use embassy_usb::control::OutResponse; use embassy_usb::control::OutResponse;
use embassy_usb::{Builder, Config, DeviceStateHandler}; use embassy_usb::{Builder, Config, DeviceStateHandler};
@ -77,7 +78,7 @@ async fn main(_spawner: Spawner) {
// Build the builder. // Build the builder.
let mut usb = builder.build(); let mut usb = builder.build();
let remote_wakeup: Signal<_> = Signal::new(); let remote_wakeup: Signal<CriticalSectionRawMutex, _> = Signal::new();
// Run the USB device. // Run the USB device.
let usb_fut = async { let usb_fut = async {

View File

@ -4,11 +4,12 @@
use defmt::{info, unwrap}; use defmt::{info, unwrap};
use embassy_executor::Spawner; use embassy_executor::Spawner;
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
use embassy_sync::signal::Signal; use embassy_sync::signal::Signal;
use embassy_time::{Duration, Timer}; use embassy_time::{Duration, Timer};
use {defmt_rtt as _, panic_probe as _}; use {defmt_rtt as _, panic_probe as _};
static SIGNAL: Signal<u32> = Signal::new(); static SIGNAL: Signal<CriticalSectionRawMutex, u32> = Signal::new();
#[embassy_executor::task] #[embassy_executor::task]
async fn my_sending_task() { async fn my_sending_task() {

View File

@ -12,6 +12,7 @@ use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
use embassy_stm32::interrupt; use embassy_stm32::interrupt;
use embassy_stm32::interrupt::{Interrupt, InterruptExt}; use embassy_stm32::interrupt::{Interrupt, InterruptExt};
use embassy_stm32::subghz::*; use embassy_stm32::subghz::*;
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
use embassy_sync::signal::Signal; use embassy_sync::signal::Signal;
use {defmt_rtt as _, panic_probe as _}; use {defmt_rtt as _, panic_probe as _};
@ -64,7 +65,7 @@ async fn main(_spawner: Spawner) {
let button = Input::new(p.PA0, Pull::Up); let button = Input::new(p.PA0, Pull::Up);
let mut pin = ExtiInput::new(button, p.EXTI0); let mut pin = ExtiInput::new(button, p.EXTI0);
static IRQ_SIGNAL: Signal<()> = Signal::new(); static IRQ_SIGNAL: Signal<CriticalSectionRawMutex, ()> = Signal::new();
let radio_irq = interrupt::take!(SUBGHZ_RADIO); let radio_irq = interrupt::take!(SUBGHZ_RADIO);
radio_irq.set_handler(|_| { radio_irq.set_handler(|_| {
IRQ_SIGNAL.signal(()); IRQ_SIGNAL.signal(());