From d094e348c5d1a3785289c69c5185bbaca1257de8 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 11 Jun 2012 16:54:35 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4266 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/include/chqueues.h | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'os/kernel/include') diff --git a/os/kernel/include/chqueues.h b/os/kernel/include/chqueues.h index b15cd70b0..b16a19609 100644 --- a/os/kernel/include/chqueues.h +++ b/os/kernel/include/chqueues.h @@ -68,6 +68,7 @@ struct GenericQueue { 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. */ }; /** @@ -95,6 +96,17 @@ struct GenericQueue { * @iclass */ #define chQSpaceI(qp) ((qp)->q_counter) + +/** + * @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. + * @return The application-defined link. + * + * @special + */ +#define chQGetLink(qp) ((qp)->q_link) /** @} */ /** @@ -185,15 +197,17 @@ typedef GenericQueue InputQueue; * @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) { \ +#define _INPUTQUEUE_DATA(name, buffer, size, inotify, link) { \ _THREADSQUEUE_DATA(name), \ 0, \ (uint8_t *)(buffer), \ (uint8_t *)(buffer) + (size), \ (uint8_t *)(buffer), \ (uint8_t *)(buffer), \ - inotify \ + (inotify), \ + (link) \ } /** @@ -205,9 +219,10 @@ typedef GenericQueue InputQueue; * @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) \ - InputQueue name = _INPUTQUEUE_DATA(name, buffer, size, inotify) +#define INPUTQUEUE_DECL(name, buffer, size, inotify, link) \ + InputQueue name = _INPUTQUEUE_DATA(name, buffer, size, inotify, link) /** * @extends GenericQueue @@ -299,15 +314,17 @@ typedef GenericQueue OutputQueue; * @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) { \ +#define _OUTPUTQUEUE_DATA(name, buffer, size, onotify, link) { \ _THREADSQUEUE_DATA(name), \ (size), \ (uint8_t *)(buffer), \ (uint8_t *)(buffer) + (size), \ (uint8_t *)(buffer), \ (uint8_t *)(buffer), \ - onotify \ + (onotify), \ + (link) \ } /** @@ -319,21 +336,24 @@ typedef GenericQueue OutputQueue; * @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) \ - OutputQueue name = _OUTPUTQUEUE_DATA(name, buffer, size, onotify) +#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 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); - void chOQInit(OutputQueue *oqp, uint8_t *bp, size_t size, qnotify_t onfy); + 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); -- cgit v1.2.3