From ef83e007f110af0c1c9dd3874fc0b84f982960c9 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Thu, 22 Mar 2018 08:25:37 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11834 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- os/lib/include/chpipes.h | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'os/lib/include/chpipes.h') diff --git a/os/lib/include/chpipes.h b/os/lib/include/chpipes.h index 197aa9199..9e91614c4 100644 --- a/os/lib/include/chpipes.h +++ b/os/lib/include/chpipes.h @@ -60,6 +60,11 @@ typedef struct { bool reset; /**< @brief True if in reset state. */ threads_queue_t qw; /**< @brief Queued writers. */ threads_queue_t qr; /**< @brief Queued readers. */ +#if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__) + mutex_t mtx; /**< @brief Heap access mutex. */ +#else + semaphore_t sem; /**< @brief Heap access semaphore. */ +#endif } pipe_t; /*===========================================================================*/ @@ -75,6 +80,19 @@ typedef struct { * @param[in] buffer pointer to the pipe buffer array of @p uint8_t * @param[in] size number of @p uint8_t elements in the buffer array */ +#if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__) +#define _PIPE_DATA(name, buffer, size) { \ + (uint8_t *)(buffer), \ + (uint8_t *)(buffer) + size, \ + (uint8_t *)(buffer), \ + (uint8_t *)(buffer), \ + (size_t)0, \ + false, \ + _THREADS_QUEUE_DATA(name.qw), \ + _THREADS_QUEUE_DATA(name.qr), \ + _MUTEX_DATA(name.mtx), \ +} +#else /* CH_CFG_USE_MUTEXES == FALSE */ #define _PIPE_DATA(name, buffer, size) { \ (uint8_t *)(buffer), \ (uint8_t *)(buffer) + size, \ @@ -84,7 +102,9 @@ typedef struct { false, \ _THREADS_QUEUE_DATA(name.qw), \ _THREADS_QUEUE_DATA(name.qr), \ + _SEMAPHORE_DATA(name.sem, (cnt_t)1), \ } +#endif /* CH_CFG_USE_MUTEXES == FALSE */ /** * @brief Static pipe initializer. @@ -107,17 +127,10 @@ extern "C" { #endif void chPipeObjectInit(pipe_t *pp, uint8_t *buf, size_t n); void chPipeReset(pipe_t *pp); - void chPipeResetI(pipe_t *pp); - size_t chPipeReadI(pipe_t *pp, uint8_t *bp, size_t n); - size_t chPipeReadTimeoutS(pipe_t *pp, uint8_t *bp, + size_t chPipeWriteTimeout(pipe_t *pp, const uint8_t *bp, size_t n, sysinterval_t timeout); size_t chPipeReadTimeout(pipe_t *pp, uint8_t *bp, size_t n, sysinterval_t timeout); - size_t chPipeWriteI(pipe_t *pp, const uint8_t *bp, size_t n); - size_t chPipeWriteTimeoutS(pipe_t *pp, const uint8_t *bp, - size_t n, sysinterval_t timeout); - size_t chPipeWriteTimeout(pipe_t *pp, const uint8_t *bp, - size_t n, sysinterval_t timeout); #ifdef __cplusplus } #endif -- cgit v1.2.3