Queue

Struct Queue 

Source
pub struct Queue(/* private fields */);
Expand description

A FIFO queue for byte-based message passing.

Provides a thread-safe queue implementation for sending and receiving raw byte slices between threads. Supports both blocking and ISR-safe operations.

§Examples

§Basic queue usage

use osal_rs::os::{Queue, QueueFn};
use core::time::Duration;
 
// Create a queue with 10 slots, each 32 bytes
let queue = Queue::new(10, 32).unwrap();
 
// Send data
let data = [1u8, 2, 3, 4];
queue.post_with_to_tick(&data, Duration::from_millis(100)).unwrap();
 
// Receive data
let mut buffer = [0u8; 4];
queue.fetch_with_to_tick(&mut buffer, Duration::from_millis(100)).unwrap();
assert_eq!(buffer, [1, 2, 3, 4]);

§Producer-consumer pattern

use osal_rs::os::{Queue, QueueFn, Thread};
use alloc::sync::Arc;
use core::time::Duration;
 
let queue = Arc::new(Queue::new(5, 4).unwrap());
let queue_clone = queue.clone();
 
// Consumer thread
let consumer = Thread::new("consumer", 2048, 5, move || {
    let mut buffer = [0u8; 4];
    loop {
        if queue_clone.fetch(&mut buffer, 1000).is_ok() {
            println!("Received: {:?}", buffer);
        }
    }
}).unwrap();
 
consumer.start().unwrap();
 
// Producer
let data = [0xAA, 0xBB, 0xCC, 0xDD];
queue.post(&data, 1000).unwrap();

Implementations§

Source§

impl Queue

Source

pub fn new(size: UBaseType, message_size: UBaseType) -> Result<Self>

Creates a new queue.

§Parameters
  • size - Maximum number of messages the queue can hold
  • message_size - Size in bytes of each message
§Returns
  • Ok(Self) - Successfully created queue
  • Err(Error) - Creation failed (insufficient memory, etc.)
§Examples
use osal_rs::os::{Queue, QueueFn};
 
// Queue for 5 messages of 16 bytes each
let queue = Queue::new(5, 16).unwrap();
Source

pub fn fetch_with_to_tick( &self, buffer: &mut [u8], time: impl ToTick, ) -> Result<()>

Source

pub fn post_with_to_tick(&self, item: &[u8], time: impl ToTick) -> Result<()>

Trait Implementations§

Source§

impl Debug for Queue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for Queue

Source§

type Target = *const c_void

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Display for Queue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for Queue

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl Queue for Queue

Source§

fn fetch(&self, buffer: &mut [u8], time: TickType) -> Result<()>

Fetches a message from the queue (blocking). Read more
Source§

fn fetch_from_isr(&self, buffer: &mut [u8]) -> Result<()>

Fetches a message from ISR context (non-blocking). Read more
Source§

fn post(&self, item: &[u8], time: TickType) -> Result<()>

Posts a message to the queue (blocking). Read more
Source§

fn post_from_isr(&self, item: &[u8]) -> Result<()>

Posts a message from ISR context (non-blocking). Read more
Source§

fn delete(&mut self)

Deletes the queue and frees its resources. Read more
Source§

impl Send for Queue

Source§

impl Sync for Queue

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.