55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * COPYRIGHT (C) 2018, Real-Thread Information Technology Ltd
 | |
|  * 
 | |
|  * SPDX-License-Identifier: Apache-2.0
 | |
|  *
 | |
|  * Change Logs:
 | |
|  * Date           Author       Notes
 | |
|  * 2013-11-04     Grissiom     add comment
 | |
|  */
 | |
| 
 | |
| #ifndef __PRIO_QUEUE_H__
 | |
| #define __PRIO_QUEUE_H__
 | |
| 
 | |
| #include <rtthread.h>
 | |
| 
 | |
| #define RT_PRIO_QUEUE_PRIO_MAX  32
 | |
| 
 | |
| struct rt_prio_queue_item;
 | |
| 
 | |
| struct rt_prio_queue {
 | |
|     rt_uint32_t bitmap;
 | |
|     struct rt_prio_queue_item *head[RT_PRIO_QUEUE_PRIO_MAX];
 | |
|     struct rt_prio_queue_item *tail[RT_PRIO_QUEUE_PRIO_MAX];
 | |
|     /* push thread suspend on the mempool, not queue */
 | |
|     rt_list_t suspended_pop_list;
 | |
|     rt_size_t item_sz;
 | |
| 
 | |
|     struct rt_mempool pool;
 | |
| };
 | |
| 
 | |
| rt_err_t rt_prio_queue_init(struct rt_prio_queue *que,
 | |
|                             const char *name,
 | |
|                             void *buf,
 | |
|                             rt_size_t bufsz,
 | |
|                             rt_size_t itemsz);
 | |
| void rt_prio_queue_detach(struct rt_prio_queue *que);
 | |
| 
 | |
| rt_err_t rt_prio_queue_push(struct rt_prio_queue *que,
 | |
|                             rt_uint8_t prio,
 | |
|                             void *data,
 | |
|                             rt_int32_t timeout);
 | |
| rt_err_t rt_prio_queue_pop(struct rt_prio_queue *que,
 | |
|                            void *data,
 | |
|                            rt_int32_t timeout);
 | |
| #ifdef RT_USING_HEAP
 | |
| struct rt_prio_queue* rt_prio_queue_create(const char *name,
 | |
|                                            rt_size_t item_nr,
 | |
|                                            rt_size_t item_sz);
 | |
| void rt_prio_queue_delete(struct rt_prio_queue *que);
 | |
| #endif
 | |
| 
 | |
| void rt_prio_queue_dump(struct rt_prio_queue *que);
 | |
| 
 | |
| #endif /* end of include guard: __PRIO_QUEUE_H__ */
 |