18 #ifndef _AVRIO_QUEUE_H_ 19 # define _AVRIO_QUEUE_H_ 21 # include <avrio/defs.h> 22 # include <avrio/mutex.h> 162 struct xQueue *pxSrcQueue,
size_t xLength);
173 uint8_t * pucBytes,
size_t xLength);
266 # if defined(__DOXYGEN__) 280 # define QUEUE_DECLARE(xVarName, xBufferSize) 289 # define QUEUE_STATIC_DECLARE(xVarName, xBufferSize) 348 # include "avrio-config.h" 355 uint8_t *
volatile pxIn;
356 uint8_t *
volatile pxOut;
357 volatile bool isEmpty;
358 volatile bool isFull;
367 #define QUEUE_MUTEX_INITIALIZER (MUTEX_INITIALIZER & ~QUEUE_LOCK_EMPTY) 370 # define QUEUE_DECLARE(__name,__size) \ 371 uint8_t __name ## Buffer[__size]; \ 372 xQueue __name = { .pxFirst = __name ## Buffer, \ 373 .pxLast = __name ## Buffer + __size - 1, \ 374 .pxIn = __name ## Buffer, \ 375 .pxOut = __name ## Buffer, \ 378 .xLock = MUTEX_INITIALIZER } 381 # define QUEUE_STATIC_DECLARE(__name,__size) \ 382 static uint8_t __name ## Buffer[__size]; \ 383 static xQueue __name = { .pxFirst = __name ## Buffer, \ 384 .pxLast = __name ## Buffer + __size - 1, \ 385 .pxIn = __name ## Buffer, \ 386 .pxOut = __name ## Buffer, \ 389 .xLock = MUTEX_INITIALIZER } 406 struct xQueue *pxSrcQueue) {
422 memcpy (pxDst, pxSrc,
sizeof(
xQueue));
438 QUEUE_LOCK_RD = 0x01,
439 QUEUE_LOCK_WR = 0x02,
440 QUEUE_LOCK_FULL = 0x04,
441 QUEUE_LOCK_EMPTY = 0x08,
442 QUEUE_LOCK_FREE = QUEUE_LOCK_RD | QUEUE_LOCK_WR,
443 QUEUE_LOCK_ALL = QUEUE_LOCK_RD | QUEUE_LOCK_WR | QUEUE_LOCK_FULL
448 vQueueUnlock (
struct xQueue *q,
456 vQueueLock (
struct xQueue *q, uint8_t ucMask) {
463 vQueueUntilLocked (
struct xQueue *q, uint8_t ucMask) {
470 xQueueTryLock (
struct xQueue *q,
477 INLINE
void vQueueWaitUntilIsFull (
struct xQueue * q) {
479 vQueueUntilLocked (q, QUEUE_LOCK_FULL);
483 INLINE
void vQueueWaitUntilIsEmpty (
struct xQueue * q) {
485 vQueueUntilLocked (q, QUEUE_LOCK_EMPTY);
void vQueuePush(struct xQueue *pxQueue, uint8_t ucByte)
Empile un octet.
uint16_t usQueueReadWord(struct xQueue *pxQueue, size_t xIndex)
Lecture d'un mot de 16 bits (sans dépiler)
struct xQueue * pxQueueNew(size_t xBufferSize)
Crée et initialise une pile en mémoire dynamique.
size_t xQueuePullBytes(struct xQueue *pxQueue, uint8_t *pucBytes, size_t xLength)
Dépile des octets.
uint16_t usQueuePullWord(struct xQueue *pxQueue)
Dépile un mot de 16 bits.
bool xQueueIsFull(struct xQueue *pxQueue)
Teste si la pile est vide.
volatile uint8_t xMutex
Type mutex.
int8_t xMutexTryLockBit(xMutex *pxMutex, uint8_t ucMask)
Variante non bloquante de vMutexLockBit()
uint8_t ucQueueRead(struct xQueue *pxQueue, size_t xIndex)
Lecture d'un octet (sans le dépiler)
void vMutexUnlockBit(xMutex *pxMutex, uint8_t ucMask)
void vQueuePushWord(struct xQueue *pxQueue, uint16_t usWord)
Empile un mot de 16 bits.
size_t xQueuePushQueue(struct xQueue *pxDstQueue, struct xQueue *pxSrcQueue)
Empile une pile dans une autre.
void vQueueDrop(struct xQueue *pxQueue)
Détruit un octet.
void vQueueDelete(struct xQueue *pxQueue)
Détruit une pile créée avec xQueueNew()
size_t xQueueLength(struct xQueue *pxQueue)
Renvoie le nombre d'octets empilés.
void vMutexUntilBitUnlocked(xMutex *pxMutex, uint8_t ucMask)
Attend tant qu'un ou plusieurs bits d'un mutex sont verrouillés (P)
void vQueueCopy(struct xQueue *pxDst, const struct xQueue *pxSrc)
Copie d'une pile sur une autre.
size_t xQueueSize(struct xQueue *pxQueue)
Renvoie la longueur de la pile.
size_t xQueuePullAll(struct xQueue *pxQueue, uint8_t *pucBytes)
Dépile tous les octets.
void vQueueFlush(struct xQueue *pxQueue)
Vide la pile.
void vQueueSetBuffer(struct xQueue *pxQueue, uint8_t *pucBuffer, size_t xBufferSize)
Initialise la pile avec le buffer.
bool xQueueIsEmpty(struct xQueue *pxQueue)
Teste si la pile est vide.
void vQueueDropBytes(struct xQueue *pxQueue, size_t xLength)
Détruit plusieurs octets.
size_t xQueueSizeOf(struct xQueue *pxQueue)
Renvoie la taille mémoire d'une pile.
size_t xQueuePushBytesOfQueue(struct xQueue *pxDstQueue, struct xQueue *pxSrcQueue, size_t xLength)
Empile des octets d'une pile dans une autre.
uint8_t ucQueuePull(struct xQueue *pxQueue)
Dépile un octet.
size_t xQueuePushBytes(struct xQueue *pxQueue, const uint8_t *pucBytes, size_t xLength)
Empile une suite d'octets.
int iQueueCompare(struct xQueue *pxQueue1, struct xQueue *pxQueue2)
Compare le contenu de deux piles d'octets.
size_t xQueueFree(struct xQueue *pxQueue)
Renvoie le nombre d'octets disponibles.
const char * pcQueuePushString(struct xQueue *pxQueue, const char *pcString)
Empile une chaîne d'octets à zéro terminal.
void vMutexLockBit(xMutex *pxMutex, uint8_t ucMask)
Attend jusqu'à ce qu'un ou plusieurs bits d'un mutex soit libres et les verrouillent (P) ...