Eric Wu / Mbed 2 deprecated WifiRobot

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

xqueue.h File Reference

xqueue.h File Reference

Definition and prototypes for xqueue data structure. More...

Go to the source code of this file.

Data Structures

struct  xqueue_t
 xqueue_t structure: queue with arbitrary length. More...

Functions

void xqueue_init (xqueue_t *const queue, uint8_t *const dataBuffer, const size_t size)
 Initialize a queue.
size_t xqueue_count (const xqueue_t *const queue)
 Number of used elements in the queue.
bool xqueue_empty (const xqueue_t *const queue)
 Whether or not the queue is empty.
bool xqueue_full (const xqueue_t *const queue)
 Whether or not the queue is full.
size_t xqueue_space (const xqueue_t *const queue)
 Number of free elements in the queue.
uint8_t xqueue_front (const xqueue_t *const queue)
 Front element of the queue.
uint8_t xqueue_back (const xqueue_t *const queue)
 Return the back (most recently added) element of the queue.
uint8_t xqueue_at (const xqueue_t *const queue, const size_t index)
 Index an element of the queue.
void xqueue_clear (xqueue_t *const queue)
 Clears a queue; retains buffer address and maximum size.
uint8_t xqueue_push (xqueue_t *const queue, const uint8_t value)
 Push a single element on to a queue.
void xqueue_push16 (xqueue_t *const queue, const uint16_t value)
 Push a 16-bit number to the queue (2 elements)
void xqueue_push32 (xqueue_t *const queue, const uint32_t value)
 Push a 32-bit number to the queue (4 elements)
void xqueue_push_buffer (xqueue_t *const queue, const uint8_t *values, const size_t nvalues)
 Push a stream on to a queue (faster than push_string)
void xqueue_push_string (xqueue_t *const queue, const unsigned char *str)
 Push a (null-terminated) string on to a queue.
uint8_t xqueue_pop (xqueue_t *const queue)
 Pop an element from a queue.
uint16_t xqueue_pop16 (xqueue_t *const queue)
 Pop 16 bits (two elements) from a queue.
uint32_t xqueue_pop32 (xqueue_t *const queue)
 Pop 32 bits (four elements) from a queue.
void xqueue_pop_buffer (xqueue_t *const queue, uint8_t *values, const size_t nvalues)
 Pop a sequence of elements from a queue.
void xqueue_drop (xqueue_t *const queue)
 Pop an element from a queue; do not return value (fast)
void xqueue_drop_many (xqueue_t *const queue, size_t nvalues)
 Pop many elements from a queue (fast)
uint8_t xqueue_checksum (const xqueue_t *const queue, size_t nvalues, const size_t nAdvance)
 Checksum of n elements currently in the queue.

Detailed Description

Definition and prototypes for xqueue data structure.

xqueue is designed for use in communication systems and concurrent environments where two processes may access the queue, though exclusively one will read and one will write. Read and write counts are tracked separately for this reason.

xqueues are initialized with the address of a buffer and its size, which must be a power of two. This is to allow for simple circular access to the buffer via masking, instead using a costly modulo operator.

Author:
Jeff C. Jensen
Date:
2013-12-09 Copyright (C) 2013, Jeff C. Jensen, Edward A. Lee, and Sanjit A. Seshia. This software accompanies An Introductory Lab in Embedded and Cyber-Physical Systems and is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License. See http://leeseshia.org/lab.

Definition in file xqueue.h.


Function Documentation

uint8_t xqueue_at ( const xqueue_t *const   queue,
const size_t  index 
)

Index an element of the queue.

Returns:
Indexed element of the queue
Parameters:
[in]queueTarget queue
[in]indexElement index

Definition at line 41 of file xqueue.cpp.

uint8_t xqueue_back ( const xqueue_t *const   queue )

Return the back (most recently added) element of the queue.

Returns:
Back element of the queue
Parameters:
[in]queueTarget queue

Definition at line 37 of file xqueue.cpp.

uint8_t xqueue_checksum ( const xqueue_t *const   queue,
size_t  nvalues,
const size_t  nAdvance 
)

Checksum of n elements currently in the queue.

Returns:
8-bit checksum of n front elements of the queue, queue[fromCount] to queue[fromCount + nvalues]
Parameters:
[in]queueTarget queue
[in]nvaluesNumber of values over which to sum
[in]nAdvanceNumber of elements to advance before calculating checksum

Definition at line 135 of file xqueue.cpp.

void xqueue_clear ( xqueue_t *const   queue )

Clears a queue; retains buffer address and maximum size.

Parameters:
[in,out]queueTarget queue

Definition at line 45 of file xqueue.cpp.

size_t xqueue_count ( const xqueue_t *const   queue )

Number of used elements in the queue.

Returns:
number of elements in the queue
Parameters:
[in]queueTarget queue

Definition at line 17 of file xqueue.cpp.

void xqueue_drop ( xqueue_t *const   queue )

Pop an element from a queue; do not return value (fast)

Parameters:
[in,out]queueTarget queue

Definition at line 123 of file xqueue.cpp.

void xqueue_drop_many ( xqueue_t *const   queue,
size_t  nvalues 
)

Pop many elements from a queue (fast)

Parameters:
[in,out]queueTarget queue
[in]nvaluesNumber of elements to pop

Definition at line 128 of file xqueue.cpp.

bool xqueue_empty ( const xqueue_t *const   queue )

Whether or not the queue is empty.

Returns:
Queue is empty?
Parameters:
[in]queueTarget queue

Definition at line 21 of file xqueue.cpp.

uint8_t xqueue_front ( const xqueue_t *const   queue )

Front element of the queue.

Returns:
Front element of the queue
Parameters:
[in]queueTarget queue

Definition at line 33 of file xqueue.cpp.

bool xqueue_full ( const xqueue_t *const   queue )

Whether or not the queue is full.

Returns:
Queue is full?
Parameters:
[in]queueTarget queue

Definition at line 25 of file xqueue.cpp.

void xqueue_init ( xqueue_t *const   queue,
uint8_t *const   dataBuffer,
const size_t  size 
)

Initialize a queue.

Parameters:
[out]queueQueue struct to initialize
[out]dataBufferRaw buffer to which queue will attach
[in]sizeSize of the raw buffer

Definition at line 7 of file xqueue.cpp.

uint8_t xqueue_pop ( xqueue_t *const   queue )

Pop an element from a queue.

Returns:
Front (removed) element of the queue
Parameters:
[in,out]queueTarget queue

Definition at line 99 of file xqueue.cpp.

uint16_t xqueue_pop16 ( xqueue_t *const   queue )

Pop 16 bits (two elements) from a queue.

Returns:
Packed 16-bit integer containing front two (removed) elements of the queue.
Parameters:
[in,out]queueTarget queue

Definition at line 106 of file xqueue.cpp.

uint32_t xqueue_pop32 ( xqueue_t *const   queue )

Pop 32 bits (four elements) from a queue.

Returns:
Packed 32-bit integer containing front four (removed) elements of the queue.
Parameters:
[in,out]queueTarget queue

Definition at line 110 of file xqueue.cpp.

void xqueue_pop_buffer ( xqueue_t *const   queue,
uint8_t *  values,
const size_t  nvalues 
)

Pop a sequence of elements from a queue.

Parameters:
[in,out]queueTarget queue
[out]valuesStream to fill with values
[in]nvaluesNumber of elements to pop

Definition at line 114 of file xqueue.cpp.

uint8_t xqueue_push ( xqueue_t *const   queue,
const uint8_t  value 
)

Push a single element on to a queue.

Returns:
Value pushed
Parameters:
[in,out]queueTarget queue
[in]valuebyte to add to queue

Definition at line 52 of file xqueue.cpp.

void xqueue_push16 ( xqueue_t *const   queue,
const uint16_t  value 
)

Push a 16-bit number to the queue (2 elements)

Parameters:
[in,out]queueTarget queue
[in]valueElement to push

Definition at line 62 of file xqueue.cpp.

void xqueue_push32 ( xqueue_t *const   queue,
const uint32_t  value 
)

Push a 32-bit number to the queue (4 elements)

Parameters:
[in,out]queueTarget queue
[in]valueElement to push

Definition at line 67 of file xqueue.cpp.

void xqueue_push_buffer ( xqueue_t *const   queue,
const uint8_t *  values,
const size_t  nvalues 
)

Push a stream on to a queue (faster than push_string)

Parameters:
[in,out]queueTarget queue
[in]valuesStream to push to queue
[in]nvaluesNumber of elements to push

Definition at line 74 of file xqueue.cpp.

void xqueue_push_string ( xqueue_t *const   queue,
const unsigned char *  str 
)

Push a (null-terminated) string on to a queue.

Parameters:
[in,out]queueTarget queue
[in]strString to push to queue (NULL element is not pushed)

Definition at line 88 of file xqueue.cpp.

size_t xqueue_space ( const xqueue_t *const   queue )

Number of free elements in the queue.

Returns:
number of free elements in the queue
Parameters:
[in]queueTarget queue

Definition at line 29 of file xqueue.cpp.