ChibiOS/RT  6.0.3
Collaboration diagram for Pipes:

Detailed Description

Macros

#define _PIPE_DATA(name, buffer, size)
 Data part of a static pipe initializer. More...
 
#define PIPE_DECL(name, buffer, size)   pipe_t name = _PIPE_DATA(name, buffer, size)
 Static pipe initializer. More...
 

Data Structures

struct  pipe_t
 Structure representing a pipe object. More...
 

Functions

static size_t pipe_write (pipe_t *pp, const uint8_t *bp, size_t n)
 Non-blocking pipe write. More...
 
static size_t pipe_read (pipe_t *pp, uint8_t *bp, size_t n)
 Non-blocking pipe read. More...
 
void chPipeObjectInit (pipe_t *pp, uint8_t *buf, size_t n)
 Initializes a mailbox_t object. More...
 
void chPipeReset (pipe_t *pp)
 Resets a pipe_t object. More...
 
size_t chPipeWriteTimeout (pipe_t *pp, const uint8_t *bp, size_t n, sysinterval_t timeout)
 Pipe write with timeout. More...
 
size_t chPipeReadTimeout (pipe_t *pp, uint8_t *bp, size_t n, sysinterval_t timeout)
 Pipe read with timeout. More...
 
static size_t chPipeGetSize (const pipe_t *pp)
 Returns the pipe buffer size as number of bytes. More...
 
static size_t chPipeGetUsedCount (const pipe_t *pp)
 Returns the number of used byte slots into a pipe. More...
 
static size_t chPipeGetFreeCount (const pipe_t *pp)
 Returns the number of free byte slots into a pipe. More...
 
static void chPipeResume (pipe_t *pp)
 Terminates the reset state. More...
 

Macro Definition Documentation

#define _PIPE_DATA (   name,
  buffer,
  size 
)
Value:
{ \
(uint8_t *)(buffer), \
(uint8_t *)(buffer) + size, \
(uint8_t *)(buffer), \
(uint8_t *)(buffer), \
(size_t)0, \
false, \
NULL, \
NULL, \
_MUTEX_DATA(name.cmtx), \
_MUTEX_DATA(name.wmtx), \
_MUTEX_DATA(name.rmtx), \
}
#define _MUTEX_DATA(name)
Data part of a static mutex initializer.
Definition: chmtx.h:81

Data part of a static pipe initializer.

This macro should be used when statically initializing a pipe that is part of a bigger structure.

Parameters
[in]namethe name of the pipe variable
[in]bufferpointer to the pipe buffer array of uint8_t
[in]sizenumber of uint8_t elements in the buffer array

Definition at line 88 of file chpipes.h.

#define PIPE_DECL (   name,
  buffer,
  size 
)    pipe_t name = _PIPE_DATA(name, buffer, size)

Static pipe initializer.

Statically initialized pipes require no explicit initialization using chPipeObjectInit().

Parameters
[in]namethe name of the pipe variable
[in]bufferpointer to the pipe buffer array of uint8_t
[in]sizenumber of uint8_t elements in the buffer array

Definition at line 126 of file chpipes.h.

Function Documentation

static size_t pipe_write ( pipe_t pp,
const uint8_t *  bp,
size_t  n 
)
static

Non-blocking pipe write.

The function writes data from a buffer to a pipe. The operation completes when the specified amount of data has been transferred or when the pipe buffer has been filled.

Parameters
[in]ppthe pointer to an initialized pipe_t object
[in]bppointer to the data buffer
[in]nthe maximum amount of data to be transferred, the value 0 is reserved
Returns
The number of bytes effectively transferred.
Function Class:
Not an API, this function is for internal use only.

Definition at line 105 of file chpipes.c.

References pipe_t::buffer, chPipeGetFreeCount(), pipe_t::cnt, pipe_t::top, and pipe_t::wrptr.

Referenced by chPipeWriteTimeout().

Here is the call graph for this function:

static size_t pipe_read ( pipe_t pp,
uint8_t *  bp,
size_t  n 
)
static

Non-blocking pipe read.

The function reads data from a pipe into a buffer. The operation completes when the specified amount of data has been transferred or when the pipe buffer has been emptied.

Parameters
[in]ppthe pointer to an initialized pipe_t object
[out]bppointer to the data buffer
[in]nthe maximum amount of data to be transferred, the value 0 is reserved
Returns
The number of bytes effectively transferred.
Function Class:
Not an API, this function is for internal use only.

Definition at line 156 of file chpipes.c.

References pipe_t::buffer, chPipeGetUsedCount(), pipe_t::cnt, pipe_t::rdptr, and pipe_t::top.

Referenced by chPipeReadTimeout().

Here is the call graph for this function:

void chPipeObjectInit ( pipe_t pp,
uint8_t *  buf,
size_t  n 
)

Initializes a mailbox_t object.

Parameters
[out]ppthe pointer to the pipe_t structure to be initialized
[in]bufpointer to the pipe buffer as an array of uint8_t
[in]nnumber of elements in the buffer array
Function Class:
Initializer, this function just initializes an object and can be invoked before the kernel is initialized.

Definition at line 207 of file chpipes.c.

References pipe_t::buffer, chDbgCheck, pipe_t::cnt, pipe_t::rdptr, pipe_t::reset, pipe_t::rtr, pipe_t::top, pipe_t::wrptr, and pipe_t::wtr.

Referenced by chFactoryCreatePipe().

void chPipeReset ( pipe_t pp)

Resets a pipe_t object.

All the waiting threads are resumed with status MSG_RESET and the queued data is lost.

Postcondition
The pipe is in reset state, all operations will fail and return MSG_RESET until the mailbox is enabled again using chPipeResumeX().
Parameters
[in]ppthe pointer to an initialized pipe_t object
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 236 of file chpipes.c.

References pipe_t::buffer, chDbgCheck, chSchRescheduleS(), chSysLock(), chSysUnlock(), chThdResumeI(), pipe_t::cnt, MSG_RESET, pipe_t::rdptr, pipe_t::reset, pipe_t::rtr, pipe_t::wrptr, and pipe_t::wtr.

Here is the call graph for this function:

size_t chPipeWriteTimeout ( pipe_t pp,
const uint8_t *  bp,
size_t  n,
sysinterval_t  timeout 
)

Pipe write with timeout.

The function writes data from a buffer to a pipe. The operation completes when the specified amount of data has been transferred or after the specified timeout or if the pipe has been reset.

Parameters
[in]ppthe pointer to an initialized pipe_t object
[in]bppointer to the data buffer
[in]nthe number of bytes to be written, the value 0 is reserved
[in]timeoutthe number of ticks before the operation timeouts, the following special values are allowed:
  • TIME_IMMEDIATE immediate timeout.
  • TIME_INFINITE no timeout.
Returns
The number of bytes effectively transferred. A number lower than n means that a timeout occurred or the pipe went in reset state.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 278 of file chpipes.c.

References chDbgCheck, chSysLock(), chSysUnlock(), chThdResume(), chThdSuspendTimeoutS(), MSG_OK, pipe_write(), pipe_t::reset, pipe_t::rtr, and pipe_t::wtr.

Here is the call graph for this function:

size_t chPipeReadTimeout ( pipe_t pp,
uint8_t *  bp,
size_t  n,
sysinterval_t  timeout 
)

Pipe read with timeout.

The function reads data from a pipe into a buffer. The operation completes when the specified amount of data has been transferred or after the specified timeout or if the pipe has been reset.

Parameters
[in]ppthe pointer to an initialized pipe_t object
[out]bppointer to the data buffer
[in]nthe number of bytes to be read, the value 0 is reserved
[in]timeoutthe number of ticks before the operation timeouts, the following special values are allowed:
  • TIME_IMMEDIATE immediate timeout.
  • TIME_INFINITE no timeout.
Returns
The number of bytes effectively transferred. A number lower than n means that a timeout occurred or the pipe went in reset state.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 343 of file chpipes.c.

References chDbgCheck, chSysLock(), chSysUnlock(), chThdResume(), chThdSuspendTimeoutS(), MSG_OK, pipe_read(), pipe_t::reset, pipe_t::rtr, and pipe_t::wtr.

Here is the call graph for this function:

static size_t chPipeGetSize ( const pipe_t pp)
inlinestatic

Returns the pipe buffer size as number of bytes.

Parameters
[in]ppthe pointer to an initialized pipe_t object
Returns
The size of the pipe.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 158 of file chpipes.h.

References pipe_t::buffer, and pipe_t::top.

Referenced by chPipeGetFreeCount().

static size_t chPipeGetUsedCount ( const pipe_t pp)
inlinestatic

Returns the number of used byte slots into a pipe.

Parameters
[in]ppthe pointer to an initialized pipe_t object
Returns
The number of queued bytes.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 174 of file chpipes.h.

References pipe_t::cnt.

Referenced by chPipeGetFreeCount(), and pipe_read().

static size_t chPipeGetFreeCount ( const pipe_t pp)
inlinestatic

Returns the number of free byte slots into a pipe.

Parameters
[in]ppthe pointer to an initialized pipe_t object
Returns
The number of empty byte slots.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 187 of file chpipes.h.

References chPipeGetSize(), and chPipeGetUsedCount().

Referenced by pipe_write().

Here is the call graph for this function:

static void chPipeResume ( pipe_t pp)
inlinestatic

Terminates the reset state.

Parameters
[in]ppthe pointer to an initialized pipe_t object
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 199 of file chpipes.h.

References pipe_t::reset.