Add xRingbufferCanRead, xRingbufferCanWrite

Add function xRingbufferCanRead & xRingbufferCanWrite
to be able use queue sets. Without it is not possible
to check to which ringbuffer returned semaphore belongs.
This commit is contained in:
Ing. Jaroslav Safka 2018-03-02 23:17:32 +01:00 committed by bot
parent 7a6e367cd9
commit 32e838ddb6
2 changed files with 66 additions and 21 deletions

View File

@ -297,6 +297,33 @@ BaseType_t xRingbufferAddToQueueSetRead(RingbufHandle_t ringbuf, QueueSetHandle_
*/
BaseType_t xRingbufferAddToQueueSetWrite(RingbufHandle_t ringbuf, QueueSetHandle_t xQueueSet);
/**
* @brief Check if the selected queue set member is the ringbuffer's read semaphore
*
* This API checks if queue set member returned from xQueueSelectFromSet
* is the read semaphore of this ring buffer. If so, this indicates the ring buffer
* has items waiting to be read.
*
* @param ringbuf Ring buffer which should be checked
* @param member Member returned from xQueueSelectFromSet
*
* @return pdTRUE when semaphore belongs to ringbuffer, pdFALSE otherwise.
*/
BaseType_t xRingbufferCanRead(RingbufHandle_t ringbuf, QueueSetMemberHandle_t member);
/**
* @brief Check if the selected queue set member is the ringbuffer's write semaphore
*
* This API checks if queue set member returned from xQueueSelectFromSet
* is the write semaphore of this ring buffer. If so, this indicates the ring buffer
* has items waiting for write.
*
* @param ringbuf Ring buffer which should be checked
* @param member Member returned from xQueueSelectFromSet
*
* @return pdTRUE when semaphore belongs to ringbuffer, pdFALSE otherwise.
*/
BaseType_t xRingbufferCanWrite(RingbufHandle_t ringbuf, QueueSetMemberHandle_t member);
/**
* @brief Remove the ringbuffer from a queue set.

View File

@ -409,6 +409,24 @@ static void returnItemToRingbufBytebuf(ringbuf_t *rb, void *item) {
//Free the read memory.
rb->free_ptr=rb->read_ptr;
}
/*
Check if the selected queue set member is the ringbuffer's read semaphore
*/
BaseType_t xRingbufferCanRead(RingbufHandle_t ringbuf, QueueSetMemberHandle_t member)
{
ringbuf_t *rb=(ringbuf_t *)ringbuf;
configASSERT(rb);
return (rb->items_buffered_sem == member)? pdTRUE : pdFALSE;
}
/*
Check if the selected queue set member is the ringbuffer's write semaphore
*/
BaseType_t xRingbufferCanWrite(RingbufHandle_t ringbuf, QueueSetMemberHandle_t member)
{
ringbuf_t *rb=(ringbuf_t *)ringbuf;
configASSERT(rb);
return (rb->free_space_sem == member)? pdTRUE : pdFALSE;
}
void xRingbufferPrintInfo(RingbufHandle_t ringbuf)
{