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,
impl<M, T, const N: usize> Channel<M, T, N>where
M: RawMutex,
sourcepub const fn new() -> Self
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();
sourcepub fn poll_receive(&self, cx: &mut Context<'_>) -> Poll<T>
pub fn poll_receive(&self, cx: &mut Context<'_>) -> Poll<T>
Poll the channel for the next message
sourcepub fn poll_ready_to_receive(&self, cx: &mut Context<'_>) -> Poll<()>
pub fn poll_ready_to_receive(&self, cx: &mut Context<'_>) -> Poll<()>
Allows a poll_fn to poll until the channel is ready to receive
sourcepub fn poll_ready_to_send(&self, cx: &mut Context<'_>) -> Poll<()>
pub fn poll_ready_to_send(&self, cx: &mut Context<'_>) -> Poll<()>
Allows a poll_fn to poll until the channel is ready to send
sourcepub fn dyn_sender(&self) -> DynamicSender<'_, T>
pub fn dyn_sender(&self) -> DynamicSender<'_, T>
Get a sender for this channel using dynamic dispatch.
sourcepub fn dyn_receiver(&self) -> DynamicReceiver<'_, T>
pub fn dyn_receiver(&self) -> DynamicReceiver<'_, T>
Get a receiver for this channel using dynamic dispatch.
sourcepub fn send(&self, message: T) -> SendFuture<'_, M, T, N> ⓘ
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.
sourcepub fn try_send(&self, message: T) -> Result<(), TrySendError<T>>
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.
sourcepub fn receive(&self) -> ReceiveFuture<'_, M, T, N> ⓘ
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.
sourcepub fn ready_to_receive(&self) -> ReceiveReadyFuture<'_, M, T, N> ⓘ
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
sourcepub fn try_receive(&self) -> Result<T, TryReceiveError>
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.
sourcepub const fn capacity(&self) -> usize
pub const fn capacity(&self) -> usize
Returns the maximum number of elements the channel can hold.
sourcepub fn free_capacity(&self) -> usize
pub fn free_capacity(&self) -> usize
Returns the free capacity of the channel.
This is equivalent to capacity() - len()