TIOVX User Guide
tivx_queue.h
Go to the documentation of this file.
1 /*
2 *
3 * Copyright (c) 2017 Texas Instruments Incorporated
4 *
5 * All rights reserved not granted herein.
6 *
7 * Limited License.
8 *
9 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
10 * license under copyrights and patents it now or hereafter owns or controls to make,
11 * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
12 * terms herein. With respect to the foregoing patent license, such license is granted
13 * solely to the extent that any such patent is necessary to Utilize the software alone.
14 * The patent license shall not apply to any combinations which include this software,
15 * other than combinations with devices manufactured by or for TI ("TI Devices").
16 * No hardware patent is licensed hereunder.
17 *
18 * Redistributions must preserve existing copyright notices and reproduce this license
19 * (including the above copyright notice and the disclaimer and (if applicable) source
20 * code license limitations below) in the documentation and/or other materials provided
21 * with the distribution
22 *
23 * Redistribution and use in binary form, without modification, are permitted provided
24 * that the following conditions are met:
25 *
26 * * No reverse engineering, decompilation, or disassembly of this software is
27 * permitted with respect to any software provided in binary form.
28 *
29 * * any redistribution and use are licensed by TI for use only with TI Devices.
30 *
31 * * Nothing shall obligate TI to provide you with source code for the software
32 * licensed and provided to you in object code.
33 *
34 * If software source code is provided to you, modification and redistribution of the
35 * source code are permitted provided that the following conditions are met:
36 *
37 * * any redistribution and use of the source code, including any resulting derivative
38 * works, are licensed by TI for use only with TI Devices.
39 *
40 * * any redistribution and use of any object code compiled from the source code
41 * and any resulting derivative works, are licensed by TI for use only with TI Devices.
42 *
43 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
44 *
45 * may be used to endorse or promote products derived from this software without
46 * specific prior written permission.
47 *
48 * DISCLAIMER.
49 *
50 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
51 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53 * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
54 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
55 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
57 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
58 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
59 * OF THE POSSIBILITY OF SUCH DAMAGE.
60 *
61 */
62 
63 
64 
65 #ifndef TIVX_QUEUE_H_
66 #define TIVX_QUEUE_H_
67 
68 #include <TI/tivx_event.h>
69 #include <TI/tivx_mutex.h>
70 
71 #ifdef __cplusplus
72 extern "C" {
73 #endif
74 
86 #define TIVX_QUEUE_FLAG_BLOCK_ON_PUT (0x00000001u)
87 
94 #define TIVX_QUEUE_FLAG_BLOCK_ON_GET (0x00000002u)
95 
96 
97 
103 typedef struct _tivx_queue_t {
104 
105  uint32_t cur_rd;
108  uint32_t cur_wr;
111  uint32_t count;
114  uint32_t max_ele;
117  uintptr_t *queue;
129  void *context;
132  uint32_t flags;
141 } tivx_queue;
142 
155 vx_status tivxQueueCreate(tivx_queue *queue, uint32_t max_elements, uintptr_t *queue_memory, uint32_t flags);
156 
167 
181 vx_status tivxQueuePut(tivx_queue *queue, uintptr_t data, uint32_t timeout);
182 
196 vx_status tivxQueueGet(tivx_queue *queue, uintptr_t *data, uint32_t timeout);
197 
208 vx_status tivxQueuePeek(const tivx_queue *queue, uintptr_t *data);
209 
219 vx_bool tivxQueueIsEmpty(const tivx_queue *queue);
220 
221 #ifdef __cplusplus
222 }
223 #endif
224 
225 #endif
vx_bool
struct tivx_vx_event_t * tivx_event
Typedef for a event.
Definition: tivx_event.h:100
struct tivx_vx_mutex_t * tivx_mutex
Typedef for a mutex.
Definition: tivx_mutex.h:82
vx_status tivxQueueCreate(tivx_queue *queue, uint32_t max_elements, uintptr_t *queue_memory, uint32_t flags)
Create a queue.
void * context
Definition: tivx_queue.h:129
vx_bool tivxQueueIsEmpty(const tivx_queue *queue)
Check if queue is empty.
tivx_event block_wr
Definition: tivx_queue.h:123
volatile vx_bool blockedOnPut
Definition: tivx_queue.h:138
Typedef for a queue.
Definition: tivx_queue.h:103
vx_enum vx_status
vx_status tivxQueueDelete(tivx_queue *queue)
Delete a queue.
volatile vx_bool blockedOnGet
Definition: tivx_queue.h:135
Interface to Event APIs.
uint32_t max_ele
Definition: tivx_queue.h:114
uint32_t cur_rd
Definition: tivx_queue.h:105
vx_status tivxQueuePeek(const tivx_queue *queue, uintptr_t *data)
Peek an element from the queue but dont extract it.
uintptr_t * queue
Definition: tivx_queue.h:117
Interface to Mutex APIs.
uint32_t count
Definition: tivx_queue.h:111
tivx_event block_rd
Definition: tivx_queue.h:120
uint32_t cur_wr
Definition: tivx_queue.h:108
uint32_t flags
Definition: tivx_queue.h:132
vx_status tivxQueueGet(tivx_queue *queue, uintptr_t *data, uint32_t timeout)
Extract a element from the queue.
vx_status tivxQueuePut(tivx_queue *queue, uintptr_t data, uint32_t timeout)
Add a element into the queue.
tivx_mutex lock
Definition: tivx_queue.h:126