Struct embassy_sync::channel::Channel

source ·
pub struct Channel<M, T, const N: usize>
where M: RawMutex,
{ /* private fields */ }
Expand description

A bounded channel for communicating between asynchronous tasks with backpressure.

The channel will buffer up to the provided number of messages. Once the buffer is full, attempts to send new messages will wait until a message is received from the channel.

All data sent will become available in the same order as it was sent.

Implementations§

source§

impl<M, T, const N: usize> Channel<M, T, N>
where M: RawMutex,

source

pub const fn new() -> Self

Establish a new bounded channel. For example, to create one with a NoopMutex:

use embassy_sync::channel::Channel;
use embassy_sync::blocking_mutex::raw::NoopRawMutex;

// Declare a bounded channel of 3 u32s.
let mut channel = Channel::<NoopRawMutex, u32, 3>::new();
source

pub fn poll_receive(&self, cx: &mut Context<'_>) -> Poll<T>

Poll the channel for the next message

source

pub fn poll_ready_to_receive(&self, cx: &mut Context<'_>) -> Poll<()>

Allows a poll_fn to poll until the channel is ready to receive

source

pub fn poll_ready_to_send(&self, cx: &mut Context<'_>) -> Poll<()>

Allows a poll_fn to poll until the channel is ready to send

source

pub fn sender(&self) -> Sender<'_, M, T, N>

Get a sender for this channel.

source

pub fn receiver(&self) -> Receiver<'_, M, T, N>

Get a receiver for this channel.

source

pub fn dyn_sender(&self) -> DynamicSender<'_, T>

Get a sender for this channel using dynamic dispatch.

source

pub fn dyn_receiver(&self) -> DynamicReceiver<'_, T>

Get a receiver for this channel using dynamic dispatch.

source

pub fn send(&self, message: T) -> SendFuture<'_, M, T, N>

Send a value, waiting until there is capacity.

Sending completes when the value has been pushed to the channel’s queue. This doesn’t mean the value has been received yet.

source

pub fn try_send(&self, message: T) -> Result<(), TrySendError<T>>

Attempt to immediately send a message.

This method differs from send by returning immediately if the channel’s buffer is full, instead of waiting.

§Errors

If the channel capacity has been reached, i.e., the channel has n buffered values where n is the argument passed to Channel, then an error is returned.

source

pub fn receive(&self) -> ReceiveFuture<'_, M, T, N>

Receive the next value.

If there are no messages in the channel’s buffer, this method will wait until a message is sent.

source

pub fn ready_to_receive(&self) -> ReceiveReadyFuture<'_, M, T, N>

Is a value ready to be received in the channel

If there are no messages in the channel’s buffer, this method will wait until there is at least one

source

pub fn try_receive(&self) -> Result<T, TryReceiveError>

Attempt to immediately receive a message.

This method will either receive a message from the channel immediately or return an error if the channel is empty.

source

pub const fn capacity(&self) -> usize

Returns the maximum number of elements the channel can hold.

source

pub fn free_capacity(&self) -> usize

Returns the free capacity of the channel.

This is equivalent to capacity() - len()

source

pub fn clear(&self)

Clears all elements in the channel.

source

pub fn len(&self) -> usize

Returns the number of elements currently in the channel.

source

pub fn is_empty(&self) -> bool

Returns whether the channel is empty.

source

pub fn is_full(&self) -> bool

Returns whether the channel is full.

Auto Trait Implementations§

§

impl<M, T, const N: usize> !Freeze for Channel<M, T, N>

§

impl<M, T, const N: usize> !RefUnwindSafe for Channel<M, T, N>

§

impl<M, T, const N: usize> Send for Channel<M, T, N>
where M: Send, T: Send,

§

impl<M, T, const N: usize> Sync for Channel<M, T, N>
where M: Sync, T: Send,

§

impl<M, T, const N: usize> Unpin for Channel<M, T, N>
where M: Unpin, T: Unpin,

§

impl<M, T, const N: usize> UnwindSafe for Channel<M, T, N>
where M: UnwindSafe, T: UnwindSafe,

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.