nrf-softdevice

Crates

0.1.0

Versions

s140

Flavors

Trait Packet

Source
pub trait Packet: Sized {
    const MTU: usize;

    // Required methods
    fn allocate() -> Option<NonNull<u8>>;
    fn into_raw_parts(self) -> (NonNull<u8>, usize);
    unsafe fn from_raw_parts(ptr: NonNull<u8>, len: usize) -> Self;
}
Expand description

A Packet is a byte buffer for packet data. Similar to a Vec<u8> it has a length and a capacity. The capacity however is the fixed value MTU.

You need to implement this trait to give the L2CAP driver a method to allocate and free the space for the packets sent and received on a channel.

Required Associated Constants§

Source

const MTU: usize

The maximum size a packet can have.

Required Methods§

Source

fn allocate() -> Option<NonNull<u8>>

Allocate a new buffer with space for MTU bytes. Return None when the allocation can’t be fulfilled.

This function is called by the L2CAP driver when it needs space to receive a packet into. It will later call from_raw_parts with the buffer and the amount of bytes it has received.

Source

fn into_raw_parts(self) -> (NonNull<u8>, usize)

Take ownership of the packet buffer. Returns a pointer to the buffer and the number of bytes in the buffer.

To free the memory the driver will call from_raw_parts later and drop the value.

Source

unsafe fn from_raw_parts(ptr: NonNull<u8>, len: usize) -> Self

Construct a Packet from a pointer to a buffer and the number of bytes written to the buffer.

SAFETY: ptr must be a pointer previously returned by either allocate or ìnto_raw_parts. len must be the number of bytes in the buffer and must not be larger than MTU.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§