ESP-IDF
Select one of the symbols to view example projects that use it.
Symbol previews are coming soon...
Outline
#include "osi/allocator.h"
#include "osi/pkt_queue.h"
#include "osi/fixed_pkt_queue.h"
#include "osi/osi.h"
#include "osi/semaphore.h"
fixed_pkt_queue_t
pkt_list
enqueue_sem
dequeue_sem
capacity
dequeue_ready
fixed_pkt_queue_new(size_t)
if
(!ret)
if
(!ret->pkt_list)
if
(!ret->enqueue_sem)
if
(!ret->dequeue_sem)
fixed_pkt_queue_free(fixed_pkt_queue_t *, fixed_pkt_queue_free_cb)
if
(queue == NULL)
if
(queue->enqueue_sem)
if
(queue->dequeue_sem)
fixed_pkt_queue_is_empty(fixed_pkt_queue_t *)
if
(queue == NULL)
fixed_pkt_queue_length(fixed_pkt_queue_t *)
if
(queue == NULL)
fixed_pkt_queue_capacity(fixed_pkt_queue_t *)
fixed_pkt_queue_enqueue(fixed_pkt_queue_t *, pkt_linked_item_t *, uint32_t)
if
(osi_sem_take(&queue->enqueue_sem, timeout) != 0)
fixed_pkt_queue_dequeue(fixed_pkt_queue_t *, uint32_t)
if
(osi_sem_take(&queue->dequeue_sem, timeout) != 0)
fixed_pkt_queue_try_peek_first(fixed_pkt_queue_t *)
if
(queue == NULL)
fixed_pkt_queue_register_dequeue(fixed_pkt_queue_t *, fixed_pkt_queue_cb)
fixed_pkt_queue_unregister_dequeue(fixed_pkt_queue_t *)
fixed_pkt_queue_process(fixed_pkt_queue_t *)
if
(queue->dequeue_ready)
Files
loading...
SourceVu
ESP-IDF Framework and Examples
ESP-IDF
components/bt/common/osi/fixed_pkt_queue.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
/* ... */
#include
"
osi
/
allocator.h"
#include
"
osi
/
pkt_queue.h"
#include
"
osi
/
fixed_pkt_queue.h"
#include
"
osi
/
osi.h"
#include
"
osi
/
semaphore.h"
5 includes
typedef
struct
fixed_pkt_queue_t
{
struct
pkt_queue
*
pkt_list
;
osi_sem_t
enqueue_sem
;
osi_sem_t
dequeue_sem
;
size_t
capacity
;
fixed_pkt_queue_cb
dequeue_ready
;
}
{ ... }
fixed_pkt_queue_t
;
fixed_pkt_queue_t
*
fixed_pkt_queue_new
(
size_t
capacity
)
{
fixed_pkt_queue_t
*
ret
=
osi_calloc
(
sizeof
(
fixed_pkt_queue_t
)
)
;
if
(
!
ret
)
{
goto
error
;
}
{...}
ret
->
capacity
=
capacity
;
ret
->
pkt_list
=
pkt_queue_create
(
)
;
if
(
!
ret
->
pkt_list
)
{
goto
error
;
}
{...}
osi_sem_new
(
&
ret
->
enqueue_sem
,
capacity
,
capacity
)
;
if
(
!
ret
->
enqueue_sem
)
{
goto
error
;
}
{...}
osi_sem_new
(
&
ret
->
dequeue_sem
,
capacity
,
0
)
;
if
(
!
ret
->
dequeue_sem
)
{
goto
error
;
}
{...}
return
ret
;
error
:
fixed_pkt_queue_free
(
ret
,
NULL
)
;
return
NULL
;
}
{ ... }
void
fixed_pkt_queue_free
(
fixed_pkt_queue_t
*
queue
,
fixed_pkt_queue_free_cb
free_cb
)
{
if
(
queue
==
NULL
)
{
return
;
}
{...}
fixed_pkt_queue_unregister_dequeue
(
queue
)
;
pkt_queue_destroy
(
queue
->
pkt_list
,
(
pkt_queue_free_cb
)
free_cb
)
;
queue
->
pkt_list
=
NULL
;
if
(
queue
->
enqueue_sem
)
{
osi_sem_free
(
&
queue
->
enqueue_sem
)
;
}
{...}
if
(
queue
->
dequeue_sem
)
{
osi_sem_free
(
&
queue
->
dequeue_sem
)
;
}
{...}
osi_free
(
queue
)
;
}
{ ... }
bool
fixed_pkt_queue_is_empty
(
fixed_pkt_queue_t
*
queue
)
{
if
(
queue
==
NULL
)
{
return
true
;
}
{...}
return
pkt_queue_is_empty
(
queue
->
pkt_list
)
;
}
{ ... }
size_t
fixed_pkt_queue_length
(
fixed_pkt_queue_t
*
queue
)
{
if
(
queue
==
NULL
)
{
return
0
;
}
{...}
return
pkt_queue_length
(
queue
->
pkt_list
)
;
}
{ ... }
size_t
fixed_pkt_queue_capacity
(
fixed_pkt_queue_t
*
queue
)
{
assert
(
queue
!=
NULL
)
;
return
queue
->
capacity
;
}
{ ... }
bool
fixed_pkt_queue_enqueue
(
fixed_pkt_queue_t
*
queue
,
pkt_linked_item_t
*
linked_pkt
,
uint32_t
timeout
)
{
bool
ret
=
false
;
assert
(
queue
!=
NULL
)
;
assert
(
linked_pkt
!=
NULL
)
;
if
(
osi_sem_take
(
&
queue
->
enqueue_sem
,
timeout
)
!=
0
)
{
return
false
;
}
{...}
ret
=
pkt_queue_enqueue
(
queue
->
pkt_list
,
linked_pkt
)
;
assert
(
ret
==
true
)
;
osi_sem_give
(
&
queue
->
dequeue_sem
)
;
return
ret
;
}
{ ... }
pkt_linked_item_t
*
fixed_pkt_queue_dequeue
(
fixed_pkt_queue_t
*
queue
,
uint32_t
timeout
)
{
pkt_linked_item_t
*
ret
=
NULL
;
assert
(
queue
!=
NULL
)
;
if
(
osi_sem_take
(
&
queue
->
dequeue_sem
,
timeout
)
!=
0
)
{
return
NULL
;
}
{...}
ret
=
pkt_queue_dequeue
(
queue
->
pkt_list
)
;
osi_sem_give
(
&
queue
->
enqueue_sem
)
;
return
ret
;
}
{ ... }
pkt_linked_item_t
*
fixed_pkt_queue_try_peek_first
(
fixed_pkt_queue_t
*
queue
)
{
if
(
queue
==
NULL
)
{
return
NULL
;
}
{...}
return
pkt_queue_try_peek_first
(
queue
->
pkt_list
)
;
}
{ ... }
void
fixed_pkt_queue_register_dequeue
(
fixed_pkt_queue_t
*
queue
,
fixed_pkt_queue_cb
ready_cb
)
{
assert
(
queue
!=
NULL
)
;
assert
(
ready_cb
!=
NULL
)
;
queue
->
dequeue_ready
=
ready_cb
;
}
{ ... }
void
fixed_pkt_queue_unregister_dequeue
(
fixed_pkt_queue_t
*
queue
)
{
assert
(
queue
!=
NULL
)
;
queue
->
dequeue_ready
=
NULL
;
}
{ ... }
void
fixed_pkt_queue_process
(
fixed_pkt_queue_t
*
queue
)
{
assert
(
queue
!=
NULL
)
;
if
(
queue
->
dequeue_ready
)
{
queue
->
dequeue_ready
(
queue
)
;
}
{...}
}
{ ... }
Details
Show:
from
Types:
Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.
osi_sem_take()
osi_sem_free()
osi_sem_give()
osi_sem_new()
pkt_queue_length()
pkt_queue_create()
pkt_queue_destroy()
pkt_queue_enqueue()
pkt_queue_dequeue()
fixed_pkt_queue_free()
fixed_pkt_queue_is_empty()
fixed_pkt_queue_enqueue()
fixed_pkt_queue_new()
fixed_pkt_queue_unregister_dequeue()
pkt_queue_is_empty()
fixed_pkt_queue_dequeue()
pkt_queue_try_peek_first()
fixed_pkt_queue_register_dequeue()
fixed_pkt_queue_process()
fixed_pkt_queue_length()
fixed_pkt_queue_capacity()
fixed_pkt_queue_try_peek_first()
NULL
false
true
osi_free
fixed_pkt_queue_t
osi_calloc
pkt_queue
fixed_pkt_queue_free()::queue
fixed_pkt_queue_t::pkt_list
pkt_queue_free_cb
fixed_pkt_queue_t::enqueue_sem
fixed_pkt_queue_t::dequeue_sem
fixed_pkt_queue_t::dequeue_ready
fixed_pkt_queue_new()::capacity
fixed_pkt_queue_enqueue()::queue
fixed_pkt_queue_dequeue()::queue
fixed_pkt_queue_process()::queue
fixed_pkt_queue_cb
fixed_pkt_queue_free_cb
fixed_pkt_queue_is_empty()::queue
fixed_pkt_queue_length()::queue
fixed_pkt_queue_capacity()::queue
fixed_pkt_queue_enqueue()::linked_pkt
fixed_pkt_queue_try_peek_first()::queue
fixed_pkt_queue_register_dequeue()::queue
fixed_pkt_queue_register_dequeue()::ready_cb
fixed_pkt_queue_unregister_dequeue()::queue
fixed_pkt_queue_t::capacity
fixed_pkt_queue_free()::free_cb
fixed_pkt_queue_enqueue()::timeout
fixed_pkt_queue_dequeue()::timeout
osi_sem_t
fixed_pkt_queue_t
pkt_linked_item_t