aboutsummaryrefslogtreecommitdiffstats
path: root/os/lib/include/chpipes.h
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2018-03-22 08:25:37 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2018-03-22 08:25:37 +0000
commitef83e007f110af0c1c9dd3874fc0b84f982960c9 (patch)
tree21878527850578ba7eba81b60d4ba4767045bdca /os/lib/include/chpipes.h
parenta28b3e44ca453a85740bd9bdb23b95bd3d4c4f6b (diff)
downloadChibiOS-ef83e007f110af0c1c9dd3874fc0b84f982960c9.tar.gz
ChibiOS-ef83e007f110af0c1c9dd3874fc0b84f982960c9.tar.bz2
ChibiOS-ef83e007f110af0c1c9dd3874fc0b84f982960c9.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11834 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os/lib/include/chpipes.h')
-rw-r--r--os/lib/include/chpipes.h29
1 files changed, 21 insertions, 8 deletions
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