From 3b6423187e643f8d1005d5fca2617a5485bc16b8 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Fri, 19 Jul 2013 09:43:11 +0000 Subject: Started renaming the types to follow the _t convention. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@5988 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chqueues.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'os/kernel/include/chqueues.h') diff --git a/os/kernel/include/chqueues.h b/os/kernel/include/chqueues.h index 507f020d1..0ea68deb8 100644 --- a/os/kernel/include/chqueues.h +++ b/os/kernel/include/chqueues.h @@ -60,7 +60,7 @@ typedef void (*qnotify_t)(GenericQueue *qp); * @ref system_states) and is non-blocking. */ struct GenericQueue { - ThreadsQueue q_waiting; /**< @brief Queue of waiting threads. */ + threads_queue_t q_waiting; /**< @brief Queue of waiting threads. */ size_t q_counter; /**< @brief Resources counter. */ uint8_t *q_buffer; /**< @brief Pointer to the queue buffer.*/ uint8_t *q_top; /**< @brief Pointer to the first location @@ -200,7 +200,7 @@ typedef GenericQueue InputQueue; * @param[in] link application defined pointer */ #define _INPUTQUEUE_DATA(name, buffer, size, inotify, link) { \ - _THREADSQUEUE_DATA(name), \ + _threads_queue_t_DATA(name), \ 0, \ (uint8_t *)(buffer), \ (uint8_t *)(buffer) + (size), \ @@ -317,7 +317,7 @@ typedef GenericQueue OutputQueue; * @param[in] link application defined pointer */ #define _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) { \ - _THREADSQUEUE_DATA(name), \ + _threads_queue_t_DATA(name), \ (size), \ (uint8_t *)(buffer), \ (uint8_t *)(buffer) + (size), \ -- cgit v1.2.3 From 390ed322cb8f40cb9250021cde5f48acb928d291 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 20 Jul 2013 07:24:12 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6001 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chqueues.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'os/kernel/include/chqueues.h') diff --git a/os/kernel/include/chqueues.h b/os/kernel/include/chqueues.h index 0ea68deb8..acb2f8919 100644 --- a/os/kernel/include/chqueues.h +++ b/os/kernel/include/chqueues.h @@ -149,24 +149,24 @@ typedef GenericQueue InputQueue; #define chIQGetEmptyI(iqp) (chQSizeI(iqp) - chQSpaceI(iqp)) /** - * @brief Evaluates to @p TRUE if the specified input queue is empty. + * @brief Evaluates to @p true if the specified input queue is empty. * * @param[in] iqp pointer to an @p InputQueue structure. * @return The queue status. - * @retval FALSE if the queue is not empty. - * @retval TRUE if the queue is empty. + * @retval false if the queue is not empty. + * @retval true if the queue is empty. * * @iclass */ #define chIQIsEmptyI(iqp) ((bool_t)(chQSpaceI(iqp) <= 0)) /** - * @brief Evaluates to @p TRUE if the specified input queue is full. + * @brief Evaluates to @p true if the specified input queue is full. * * @param[in] iqp pointer to an @p InputQueue structure. * @return The queue status. - * @retval FALSE if the queue is not full. - * @retval TRUE if the queue is full. + * @retval false if the queue is not full. + * @retval true if the queue is full. * * @iclass */ @@ -264,12 +264,12 @@ typedef GenericQueue OutputQueue; #define chOQGetEmptyI(oqp) chQSpaceI(oqp) /** - * @brief Evaluates to @p TRUE if the specified output queue is empty. + * @brief Evaluates to @p true if the specified output queue is empty. * * @param[in] oqp pointer to an @p OutputQueue structure. * @return The queue status. - * @retval FALSE if the queue is not empty. - * @retval TRUE if the queue is empty. + * @retval false if the queue is not empty. + * @retval true if the queue is empty. * * @iclass */ @@ -277,12 +277,12 @@ typedef GenericQueue OutputQueue; ((oqp)->q_counter != 0))) /** - * @brief Evaluates to @p TRUE if the specified output queue is full. + * @brief Evaluates to @p true if the specified output queue is full. * * @param[in] oqp pointer to an @p OutputQueue structure. * @return The queue status. - * @retval FALSE if the queue is not full. - * @retval TRUE if the queue is full. + * @retval false if the queue is not full. + * @retval true if the queue is full. * * @iclass */ -- cgit v1.2.3 From 49d71a01abeefa000a4cd7a556052d826b096d49 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 20 Jul 2013 10:12:44 +0000 Subject: Renamed or added prefix to all hernel configuration options. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6010 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chqueues.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'os/kernel/include/chqueues.h') diff --git a/os/kernel/include/chqueues.h b/os/kernel/include/chqueues.h index acb2f8919..8449442c3 100644 --- a/os/kernel/include/chqueues.h +++ b/os/kernel/include/chqueues.h @@ -29,7 +29,7 @@ #ifndef _CHQUEUES_H_ #define _CHQUEUES_H_ -#if CH_USE_QUEUES || defined(__DOXYGEN__) +#if CH_CFG_USE_QUEUES || defined(__DOXYGEN__) /** * @name Queue functions returned status value @@ -362,7 +362,8 @@ extern "C" { #ifdef __cplusplus } #endif -#endif /* CH_USE_QUEUES */ + +#endif /* CH_CFG_USE_QUEUES */ #endif /* _CHQUEUES_H_ */ -- cgit v1.2.3 From 7b51712449ffa10f260f60e6968257230fe63f15 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Fri, 9 Aug 2013 13:43:56 +0000 Subject: Updated queues. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6112 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chqueues.h | 373 +++++++++++++++++++++++++------------------ 1 file changed, 217 insertions(+), 156 deletions(-) (limited to 'os/kernel/include/chqueues.h') diff --git a/os/kernel/include/chqueues.h b/os/kernel/include/chqueues.h index 8449442c3..c050285ac 100644 --- a/os/kernel/include/chqueues.h +++ b/os/kernel/include/chqueues.h @@ -31,6 +31,10 @@ #if CH_CFG_USE_QUEUES || defined(__DOXYGEN__) +/*===========================================================================*/ +/* Module constants. */ +/*===========================================================================*/ + /** * @name Queue functions returned status value * @{ @@ -42,13 +46,25 @@ #define Q_FULL -4 /**< @brief Queue full, */ /** @} */ +/*===========================================================================*/ +/* Module pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module data structures and types. */ +/*===========================================================================*/ + /** * @brief Type of a generic I/O queue structure. */ -typedef struct GenericQueue GenericQueue; +typedef struct io_queue io_queue_t; /** @brief Queue notification callback type.*/ -typedef void (*qnotify_t)(GenericQueue *qp); +typedef void (*qnotify_t)(io_queue_t *qp); /** * @brief Generic I/O queue structure. @@ -59,7 +75,7 @@ typedef void (*qnotify_t)(GenericQueue *qp); * lock zone (see I-Locked and S-Locked states in * @ref system_states) and is non-blocking. */ -struct GenericQueue { +struct io_queue { threads_queue_t q_waiting; /**< @brief Queue of waiting threads. */ size_t q_counter; /**< @brief Resources counter. */ uint8_t *q_buffer; /**< @brief Pointer to the queue buffer.*/ @@ -71,6 +87,108 @@ struct GenericQueue { void *q_link; /**< @brief Application defined field. */ }; +/** + * @extends io_queue_t + * + * @brief Type of an input queue structure. + * @details This structure represents a generic asymmetrical input queue. + * Writing to the queue is non-blocking and can be performed from + * interrupt handlers or from within a kernel lock zone (see + * I-Locked and S-Locked states in @ref system_states). + * Reading the queue can be a blocking operation and is supposed to + * be performed by a system thread. + */ +typedef io_queue_t input_queue_t; + +/** + * @extends io_queue_t + * + * @brief Type of an output queue structure. + * @details This structure represents a generic asymmetrical output queue. + * Reading from the queue is non-blocking and can be performed from + * interrupt handlers or from within a kernel lock zone (see + * I-Locked and S-Locked states in @ref system_states). + * Writing the queue can be a blocking operation and is supposed to + * be performed by a system thread. + */ +typedef io_queue_t output_queue_t; + +/*===========================================================================*/ +/* Module macros. */ +/*===========================================================================*/ + +/** + * @brief Data part of a static input queue initializer. + * @details This macro should be used when statically initializing an + * input queue that is part of a bigger structure. + * + * @param[in] name the name of the input queue variable + * @param[in] buffer pointer to the queue buffer area + * @param[in] size size of the queue buffer area + * @param[in] inotify input notification callback pointer + * @param[in] link application defined pointer + */ +#define _INPUTQUEUE_DATA(name, buffer, size, inotify, link) { \ + _threads_queue_t_DATA(name), \ + 0, \ + (uint8_t *)(buffer), \ + (uint8_t *)(buffer) + (size), \ + (uint8_t *)(buffer), \ + (uint8_t *)(buffer), \ + (inotify), \ + (link) \ +} + +/** + * @brief Static input queue initializer. + * @details Statically initialized input queues require no explicit + * initialization using @p chIQInit(). + * + * @param[in] name the name of the input queue variable + * @param[in] buffer pointer to the queue buffer area + * @param[in] size size of the queue buffer area + * @param[in] inotify input notification callback pointer + * @param[in] link application defined pointer + */ +#define INPUTQUEUE_DECL(name, buffer, size, inotify, link) \ + input_queue_t name = _INPUTQUEUE_DATA(name, buffer, size, inotify, link) + +/** + * @brief Data part of a static output queue initializer. + * @details This macro should be used when statically initializing an + * output queue that is part of a bigger structure. + * + * @param[in] name the name of the output queue variable + * @param[in] buffer pointer to the queue buffer area + * @param[in] size size of the queue buffer area + * @param[in] onotify output notification callback pointer + * @param[in] link application defined pointer + */ +#define _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) { \ + _threads_queue_t_DATA(name), \ + (size), \ + (uint8_t *)(buffer), \ + (uint8_t *)(buffer) + (size), \ + (uint8_t *)(buffer), \ + (uint8_t *)(buffer), \ + (onotify), \ + (link) \ +} + +/** + * @brief Static output queue initializer. + * @details Statically initialized output queues require no explicit + * initialization using @p chOQInit(). + * + * @param[in] name the name of the output queue variable + * @param[in] buffer pointer to the queue buffer area + * @param[in] size size of the queue buffer area + * @param[in] onotify output notification callback pointer + * @param[in] link application defined pointer + */ +#define OUTPUTQUEUE_DECL(name, buffer, size, onotify, link) \ + output_queue_t name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) + /** * @name Macro Functions * @{ @@ -78,7 +196,7 @@ struct GenericQueue { /** * @brief Returns the queue's buffer size. * - * @param[in] qp pointer to a @p GenericQueue structure. + * @param[in] qp pointer to a @p io_queue_t structure. * @return The buffer size. * * @iclass @@ -90,7 +208,7 @@ struct GenericQueue { * @details Returns the used space if used on an input queue or the empty * space if used on an output queue. * - * @param[in] qp pointer to a @p GenericQueue structure. + * @param[in] qp pointer to a @p io_queue_t structure. * @return The buffer space. * * @iclass @@ -99,79 +217,110 @@ struct GenericQueue { /** * @brief Returns the queue application-defined link. - * @note This function can be called in any context. * - * @param[in] qp pointer to a @p GenericQueue structure. + * @param[in] qp pointer to a @p io_queue_t structure. * @return The application-defined link. * - * @special + * @xclass */ -#define chQGetLink(qp) ((qp)->q_link) +#define chQGetLinkX(qp) ((qp)->q_link) /** @} */ -/** - * @extends GenericQueue - * - * @brief Type of an input queue structure. - * @details This structure represents a generic asymmetrical input queue. - * Writing to the queue is non-blocking and can be performed from - * interrupt handlers or from within a kernel lock zone (see - * I-Locked and S-Locked states in @ref system_states). - * Reading the queue can be a blocking operation and is supposed to - * be performed by a system thread. - */ -typedef GenericQueue InputQueue; +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void chIQObjectInit(input_queue_t *iqp, uint8_t *bp, size_t size, + qnotify_t infy, void *link); + void chIQResetI(input_queue_t *iqp); + msg_t chIQPutI(input_queue_t *iqp, uint8_t b); + msg_t chIQGetTimeout(input_queue_t *iqp, systime_t time); + size_t chIQReadTimeout(input_queue_t *iqp, uint8_t *bp, + size_t n, systime_t time); + + void chOQObjectInit(output_queue_t *oqp, uint8_t *bp, size_t size, + qnotify_t onfy, void *link); + void chOQResetI(output_queue_t *oqp); + msg_t chOQPutTimeout(output_queue_t *oqp, uint8_t b, systime_t time); + msg_t chOQGetI(output_queue_t *oqp); + size_t chOQWriteTimeout(output_queue_t *oqp, const uint8_t *bp, + size_t n, systime_t time); +#ifdef __cplusplus +} +#endif + +/*===========================================================================*/ +/* Module inline functions. */ +/*===========================================================================*/ -/** - * @name Macro Functions - * @{ - */ /** * @brief Returns the filled space into an input queue. * - * @param[in] iqp pointer to an @p InputQueue structure + * @param[in] iqp pointer to an @p input_queue_t structure * @return The number of full bytes in the queue. * @retval 0 if the queue is empty. * * @iclass */ -#define chIQGetFullI(iqp) chQSpaceI(iqp) +static inline size_t chIQGetFullI(input_queue_t *iqp) { + + chDbgCheckClassI(); + + return (size_t)chQSpaceI(iqp); +} /** * @brief Returns the empty space into an input queue. * - * @param[in] iqp pointer to an @p InputQueue structure + * @param[in] iqp pointer to an @p input_queue_t structure * @return The number of empty bytes in the queue. * @retval 0 if the queue is full. * * @iclass */ -#define chIQGetEmptyI(iqp) (chQSizeI(iqp) - chQSpaceI(iqp)) +static inline size_t chIQGetEmptyI(input_queue_t *iqp) { + + chDbgCheckClassI(); + + return (size_t)(chQSizeI(iqp) - chQSpaceI(iqp)); +} /** * @brief Evaluates to @p true if the specified input queue is empty. * - * @param[in] iqp pointer to an @p InputQueue structure. + * @param[in] iqp pointer to an @p input_queue_t structure. * @return The queue status. * @retval false if the queue is not empty. * @retval true if the queue is empty. * * @iclass */ -#define chIQIsEmptyI(iqp) ((bool_t)(chQSpaceI(iqp) <= 0)) +static inline bool chIQIsEmptyI(input_queue_t *iqp) { + + chDbgCheckClassI(); + + return (bool)(chQSpaceI(iqp) <= 0); +} /** * @brief Evaluates to @p true if the specified input queue is full. * - * @param[in] iqp pointer to an @p InputQueue structure. + * @param[in] iqp pointer to an @p input_queue_t structure. * @return The queue status. * @retval false if the queue is not full. * @retval true if the queue is full. * * @iclass */ -#define chIQIsFullI(iqp) ((bool_t)(((iqp)->q_wrptr == (iqp)->q_rdptr) && \ - ((iqp)->q_counter != 0))) +static inline bool chIQIsFullI(input_queue_t *iqp) { + + chDbgCheckClassI(); + + return (bool)((iqp->q_wrptr == iqp->q_rdptr) && (iqp->q_counter != 0)); +} /** * @brief Input queue read. @@ -179,114 +328,82 @@ typedef GenericQueue InputQueue; * is empty then the calling thread is suspended until a byte arrives * in the queue. * - * @param[in] iqp pointer to an @p InputQueue structure + * @param[in] iqp pointer to an @p input_queue_t structure * @return A byte value from the queue. * @retval Q_RESET if the queue has been reset. * * @api */ -#define chIQGet(iqp) chIQGetTimeout(iqp, TIME_INFINITE) -/** @} */ +static inline msg_t chIQGet(input_queue_t *iqp) { -/** - * @brief Data part of a static input queue initializer. - * @details This macro should be used when statically initializing an - * input queue that is part of a bigger structure. - * - * @param[in] name the name of the input queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] inotify input notification callback pointer - * @param[in] link application defined pointer - */ -#define _INPUTQUEUE_DATA(name, buffer, size, inotify, link) { \ - _threads_queue_t_DATA(name), \ - 0, \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer) + (size), \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer), \ - (inotify), \ - (link) \ + return chIQGetTimeout(iqp, TIME_INFINITE); } -/** - * @brief Static input queue initializer. - * @details Statically initialized input queues require no explicit - * initialization using @p chIQInit(). - * - * @param[in] name the name of the input queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] inotify input notification callback pointer - * @param[in] link application defined pointer - */ -#define INPUTQUEUE_DECL(name, buffer, size, inotify, link) \ - InputQueue name = _INPUTQUEUE_DATA(name, buffer, size, inotify, link) - -/** - * @extends GenericQueue - * - * @brief Type of an output queue structure. - * @details This structure represents a generic asymmetrical output queue. - * Reading from the queue is non-blocking and can be performed from - * interrupt handlers or from within a kernel lock zone (see - * I-Locked and S-Locked states in @ref system_states). - * Writing the queue can be a blocking operation and is supposed to - * be performed by a system thread. - */ -typedef GenericQueue OutputQueue; - -/** - * @name Macro Functions - * @{ - */ /** * @brief Returns the filled space into an output queue. * - * @param[in] oqp pointer to an @p OutputQueue structure + * @param[in] oqp pointer to an @p output_queue_t structure * @return The number of full bytes in the queue. * @retval 0 if the queue is empty. * * @iclass */ -#define chOQGetFullI(oqp) (chQSizeI(oqp) - chQSpaceI(oqp)) +static inline size_t chOQGetFullI(output_queue_t *oqp) { + + chDbgCheckClassI(); + + return (size_t)(chQSizeI(oqp) - chQSpaceI(oqp)); +} /** * @brief Returns the empty space into an output queue. * - * @param[in] oqp pointer to an @p OutputQueue structure + * @param[in] oqp pointer to an @p output_queue_t structure * @return The number of empty bytes in the queue. * @retval 0 if the queue is full. * * @iclass */ -#define chOQGetEmptyI(oqp) chQSpaceI(oqp) +static inline size_t chOQGetEmptyI(output_queue_t *oqp) { + + chDbgCheckClassI(); + + return (size_t)chQSpaceI(oqp); +} /** * @brief Evaluates to @p true if the specified output queue is empty. * - * @param[in] oqp pointer to an @p OutputQueue structure. + * @param[in] oqp pointer to an @p output_queue_t structure. * @return The queue status. * @retval false if the queue is not empty. * @retval true if the queue is empty. * * @iclass */ -#define chOQIsEmptyI(oqp) ((bool_t)(((oqp)->q_wrptr == (oqp)->q_rdptr) && \ - ((oqp)->q_counter != 0))) +static inline bool chOQIsEmptyI(output_queue_t *oqp) { + + chDbgCheckClassI(); + + return (bool)((oqp->q_wrptr == oqp->q_rdptr) && (oqp->q_counter != 0)); +} /** * @brief Evaluates to @p true if the specified output queue is full. * - * @param[in] oqp pointer to an @p OutputQueue structure. + * @param[in] oqp pointer to an @p output_queue_t structure. * @return The queue status. * @retval false if the queue is not full. * @retval true if the queue is full. * * @iclass */ -#define chOQIsFullI(oqp) ((bool_t)(chQSpaceI(oqp) <= 0)) +static inline bool chOQIsFullI(output_queue_t *oqp) { + + chDbgCheckClassI(); + + return (bool)(chQSpaceI(oqp) <= 0); +} /** * @brief Output queue write. @@ -294,7 +411,7 @@ typedef GenericQueue OutputQueue; * is full then the calling thread is suspended until there is space * in the queue. * - * @param[in] oqp pointer to an @p OutputQueue structure + * @param[in] oqp pointer to an @p output_queue_t structure * @param[in] b the byte value to be written in the queue * @return The operation status. * @retval Q_OK if the operation succeeded. @@ -302,66 +419,10 @@ typedef GenericQueue OutputQueue; * * @api */ -#define chOQPut(oqp, b) chOQPutTimeout(oqp, b, TIME_INFINITE) - /** @} */ - -/** - * @brief Data part of a static output queue initializer. - * @details This macro should be used when statically initializing an - * output queue that is part of a bigger structure. - * - * @param[in] name the name of the output queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] onotify output notification callback pointer - * @param[in] link application defined pointer - */ -#define _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) { \ - _threads_queue_t_DATA(name), \ - (size), \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer) + (size), \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer), \ - (onotify), \ - (link) \ -} - -/** - * @brief Static output queue initializer. - * @details Statically initialized output queues require no explicit - * initialization using @p chOQInit(). - * - * @param[in] name the name of the output queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] onotify output notification callback pointer - * @param[in] link application defined pointer - */ -#define OUTPUTQUEUE_DECL(name, buffer, size, onotify, link) \ - OutputQueue name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) - -#ifdef __cplusplus -extern "C" { -#endif - void chIQInit(InputQueue *iqp, uint8_t *bp, size_t size, qnotify_t infy, - void *link); - void chIQResetI(InputQueue *iqp); - msg_t chIQPutI(InputQueue *iqp, uint8_t b); - msg_t chIQGetTimeout(InputQueue *iqp, systime_t time); - size_t chIQReadTimeout(InputQueue *iqp, uint8_t *bp, - size_t n, systime_t time); +static inline msg_t chOQPut(output_queue_t *oqp, uint8_t b) { - void chOQInit(OutputQueue *oqp, uint8_t *bp, size_t size, qnotify_t onfy, - void *link); - void chOQResetI(OutputQueue *oqp); - msg_t chOQPutTimeout(OutputQueue *oqp, uint8_t b, systime_t time); - msg_t chOQGetI(OutputQueue *oqp); - size_t chOQWriteTimeout(OutputQueue *oqp, const uint8_t *bp, - size_t n, systime_t time); -#ifdef __cplusplus + return chOQPutTimeout(oqp, b, TIME_INFINITE); } -#endif #endif /* CH_CFG_USE_QUEUES */ -- cgit v1.2.3 From a1435e018bfc9919cb76b1356509ecc883767fb4 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 10 Aug 2013 14:51:16 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6123 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chqueues.h | 431 ------------------------------------------- 1 file changed, 431 deletions(-) delete mode 100644 os/kernel/include/chqueues.h (limited to 'os/kernel/include/chqueues.h') diff --git a/os/kernel/include/chqueues.h b/os/kernel/include/chqueues.h deleted file mode 100644 index c050285ac..000000000 --- a/os/kernel/include/chqueues.h +++ /dev/null @@ -1,431 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010, - 2011,2012,2013 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -/** - * @file chqueues.h - * @brief I/O Queues macros and structures. - * - * @addtogroup io_queues - * @{ - */ - -#ifndef _CHQUEUES_H_ -#define _CHQUEUES_H_ - -#if CH_CFG_USE_QUEUES || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Module constants. */ -/*===========================================================================*/ - -/** - * @name Queue functions returned status value - * @{ - */ -#define Q_OK RDY_OK /**< @brief Operation successful. */ -#define Q_TIMEOUT RDY_TIMEOUT /**< @brief Timeout condition. */ -#define Q_RESET RDY_RESET /**< @brief Queue has been reset. */ -#define Q_EMPTY -3 /**< @brief Queue empty. */ -#define Q_FULL -4 /**< @brief Queue full, */ -/** @} */ - -/*===========================================================================*/ -/* Module pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Module data structures and types. */ -/*===========================================================================*/ - -/** - * @brief Type of a generic I/O queue structure. - */ -typedef struct io_queue io_queue_t; - -/** @brief Queue notification callback type.*/ -typedef void (*qnotify_t)(io_queue_t *qp); - -/** - * @brief Generic I/O queue structure. - * @details This structure represents a generic Input or Output asymmetrical - * queue. The queue is asymmetrical because one end is meant to be - * accessed from a thread context, and thus can be blocking, the other - * end is accessible from interrupt handlers or from within a kernel - * lock zone (see I-Locked and S-Locked states in - * @ref system_states) and is non-blocking. - */ -struct io_queue { - threads_queue_t q_waiting; /**< @brief Queue of waiting threads. */ - size_t q_counter; /**< @brief Resources counter. */ - uint8_t *q_buffer; /**< @brief Pointer to the queue buffer.*/ - uint8_t *q_top; /**< @brief Pointer to the first location - after the buffer. */ - uint8_t *q_wrptr; /**< @brief Write pointer. */ - uint8_t *q_rdptr; /**< @brief Read pointer. */ - qnotify_t q_notify; /**< @brief Data notification callback. */ - void *q_link; /**< @brief Application defined field. */ -}; - -/** - * @extends io_queue_t - * - * @brief Type of an input queue structure. - * @details This structure represents a generic asymmetrical input queue. - * Writing to the queue is non-blocking and can be performed from - * interrupt handlers or from within a kernel lock zone (see - * I-Locked and S-Locked states in @ref system_states). - * Reading the queue can be a blocking operation and is supposed to - * be performed by a system thread. - */ -typedef io_queue_t input_queue_t; - -/** - * @extends io_queue_t - * - * @brief Type of an output queue structure. - * @details This structure represents a generic asymmetrical output queue. - * Reading from the queue is non-blocking and can be performed from - * interrupt handlers or from within a kernel lock zone (see - * I-Locked and S-Locked states in @ref system_states). - * Writing the queue can be a blocking operation and is supposed to - * be performed by a system thread. - */ -typedef io_queue_t output_queue_t; - -/*===========================================================================*/ -/* Module macros. */ -/*===========================================================================*/ - -/** - * @brief Data part of a static input queue initializer. - * @details This macro should be used when statically initializing an - * input queue that is part of a bigger structure. - * - * @param[in] name the name of the input queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] inotify input notification callback pointer - * @param[in] link application defined pointer - */ -#define _INPUTQUEUE_DATA(name, buffer, size, inotify, link) { \ - _threads_queue_t_DATA(name), \ - 0, \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer) + (size), \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer), \ - (inotify), \ - (link) \ -} - -/** - * @brief Static input queue initializer. - * @details Statically initialized input queues require no explicit - * initialization using @p chIQInit(). - * - * @param[in] name the name of the input queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] inotify input notification callback pointer - * @param[in] link application defined pointer - */ -#define INPUTQUEUE_DECL(name, buffer, size, inotify, link) \ - input_queue_t name = _INPUTQUEUE_DATA(name, buffer, size, inotify, link) - -/** - * @brief Data part of a static output queue initializer. - * @details This macro should be used when statically initializing an - * output queue that is part of a bigger structure. - * - * @param[in] name the name of the output queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] onotify output notification callback pointer - * @param[in] link application defined pointer - */ -#define _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) { \ - _threads_queue_t_DATA(name), \ - (size), \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer) + (size), \ - (uint8_t *)(buffer), \ - (uint8_t *)(buffer), \ - (onotify), \ - (link) \ -} - -/** - * @brief Static output queue initializer. - * @details Statically initialized output queues require no explicit - * initialization using @p chOQInit(). - * - * @param[in] name the name of the output queue variable - * @param[in] buffer pointer to the queue buffer area - * @param[in] size size of the queue buffer area - * @param[in] onotify output notification callback pointer - * @param[in] link application defined pointer - */ -#define OUTPUTQUEUE_DECL(name, buffer, size, onotify, link) \ - output_queue_t name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) - -/** - * @name Macro Functions - * @{ - */ -/** - * @brief Returns the queue's buffer size. - * - * @param[in] qp pointer to a @p io_queue_t structure. - * @return The buffer size. - * - * @iclass - */ -#define chQSizeI(qp) ((size_t)((qp)->q_top - (qp)->q_buffer)) - -/** - * @brief Queue space. - * @details Returns the used space if used on an input queue or the empty - * space if used on an output queue. - * - * @param[in] qp pointer to a @p io_queue_t structure. - * @return The buffer space. - * - * @iclass - */ -#define chQSpaceI(qp) ((qp)->q_counter) - -/** - * @brief Returns the queue application-defined link. - * - * @param[in] qp pointer to a @p io_queue_t structure. - * @return The application-defined link. - * - * @xclass - */ -#define chQGetLinkX(qp) ((qp)->q_link) -/** @} */ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - void chIQObjectInit(input_queue_t *iqp, uint8_t *bp, size_t size, - qnotify_t infy, void *link); - void chIQResetI(input_queue_t *iqp); - msg_t chIQPutI(input_queue_t *iqp, uint8_t b); - msg_t chIQGetTimeout(input_queue_t *iqp, systime_t time); - size_t chIQReadTimeout(input_queue_t *iqp, uint8_t *bp, - size_t n, systime_t time); - - void chOQObjectInit(output_queue_t *oqp, uint8_t *bp, size_t size, - qnotify_t onfy, void *link); - void chOQResetI(output_queue_t *oqp); - msg_t chOQPutTimeout(output_queue_t *oqp, uint8_t b, systime_t time); - msg_t chOQGetI(output_queue_t *oqp); - size_t chOQWriteTimeout(output_queue_t *oqp, const uint8_t *bp, - size_t n, systime_t time); -#ifdef __cplusplus -} -#endif - -/*===========================================================================*/ -/* Module inline functions. */ -/*===========================================================================*/ - -/** - * @brief Returns the filled space into an input queue. - * - * @param[in] iqp pointer to an @p input_queue_t structure - * @return The number of full bytes in the queue. - * @retval 0 if the queue is empty. - * - * @iclass - */ -static inline size_t chIQGetFullI(input_queue_t *iqp) { - - chDbgCheckClassI(); - - return (size_t)chQSpaceI(iqp); -} - -/** - * @brief Returns the empty space into an input queue. - * - * @param[in] iqp pointer to an @p input_queue_t structure - * @return The number of empty bytes in the queue. - * @retval 0 if the queue is full. - * - * @iclass - */ -static inline size_t chIQGetEmptyI(input_queue_t *iqp) { - - chDbgCheckClassI(); - - return (size_t)(chQSizeI(iqp) - chQSpaceI(iqp)); -} - -/** - * @brief Evaluates to @p true if the specified input queue is empty. - * - * @param[in] iqp pointer to an @p input_queue_t structure. - * @return The queue status. - * @retval false if the queue is not empty. - * @retval true if the queue is empty. - * - * @iclass - */ -static inline bool chIQIsEmptyI(input_queue_t *iqp) { - - chDbgCheckClassI(); - - return (bool)(chQSpaceI(iqp) <= 0); -} - -/** - * @brief Evaluates to @p true if the specified input queue is full. - * - * @param[in] iqp pointer to an @p input_queue_t structure. - * @return The queue status. - * @retval false if the queue is not full. - * @retval true if the queue is full. - * - * @iclass - */ -static inline bool chIQIsFullI(input_queue_t *iqp) { - - chDbgCheckClassI(); - - return (bool)((iqp->q_wrptr == iqp->q_rdptr) && (iqp->q_counter != 0)); -} - -/** - * @brief Input queue read. - * @details This function reads a byte value from an input queue. If the queue - * is empty then the calling thread is suspended until a byte arrives - * in the queue. - * - * @param[in] iqp pointer to an @p input_queue_t structure - * @return A byte value from the queue. - * @retval Q_RESET if the queue has been reset. - * - * @api - */ -static inline msg_t chIQGet(input_queue_t *iqp) { - - return chIQGetTimeout(iqp, TIME_INFINITE); -} - -/** - * @brief Returns the filled space into an output queue. - * - * @param[in] oqp pointer to an @p output_queue_t structure - * @return The number of full bytes in the queue. - * @retval 0 if the queue is empty. - * - * @iclass - */ -static inline size_t chOQGetFullI(output_queue_t *oqp) { - - chDbgCheckClassI(); - - return (size_t)(chQSizeI(oqp) - chQSpaceI(oqp)); -} - -/** - * @brief Returns the empty space into an output queue. - * - * @param[in] oqp pointer to an @p output_queue_t structure - * @return The number of empty bytes in the queue. - * @retval 0 if the queue is full. - * - * @iclass - */ -static inline size_t chOQGetEmptyI(output_queue_t *oqp) { - - chDbgCheckClassI(); - - return (size_t)chQSpaceI(oqp); -} - -/** - * @brief Evaluates to @p true if the specified output queue is empty. - * - * @param[in] oqp pointer to an @p output_queue_t structure. - * @return The queue status. - * @retval false if the queue is not empty. - * @retval true if the queue is empty. - * - * @iclass - */ -static inline bool chOQIsEmptyI(output_queue_t *oqp) { - - chDbgCheckClassI(); - - return (bool)((oqp->q_wrptr == oqp->q_rdptr) && (oqp->q_counter != 0)); -} - -/** - * @brief Evaluates to @p true if the specified output queue is full. - * - * @param[in] oqp pointer to an @p output_queue_t structure. - * @return The queue status. - * @retval false if the queue is not full. - * @retval true if the queue is full. - * - * @iclass - */ -static inline bool chOQIsFullI(output_queue_t *oqp) { - - chDbgCheckClassI(); - - return (bool)(chQSpaceI(oqp) <= 0); -} - -/** - * @brief Output queue write. - * @details This function writes a byte value to an output queue. If the queue - * is full then the calling thread is suspended until there is space - * in the queue. - * - * @param[in] oqp pointer to an @p output_queue_t structure - * @param[in] b the byte value to be written in the queue - * @return The operation status. - * @retval Q_OK if the operation succeeded. - * @retval Q_RESET if the queue has been reset. - * - * @api - */ -static inline msg_t chOQPut(output_queue_t *oqp, uint8_t b) { - - return chOQPutTimeout(oqp, b, TIME_INFINITE); -} - -#endif /* CH_CFG_USE_QUEUES */ - -#endif /* _CHQUEUES_H_ */ - -/** @} */ -- cgit v1.2.3