26
26
#include "babblekit/testcase.h"
27
27
#include "bstests.h"
28
28
#include "common.h"
29
+ #include "iso_tx.h"
29
30
30
31
LOG_MODULE_REGISTER (bis_broadcaster , LOG_LEVEL_INF );
31
32
@@ -34,10 +35,6 @@ LOG_MODULE_REGISTER(bis_broadcaster, LOG_LEVEL_INF);
34
35
extern enum bst_result_t bst_result ;
35
36
static struct bt_iso_chan iso_chans [CONFIG_BT_ISO_MAX_CHAN ];
36
37
static struct bt_iso_chan * default_chan = & iso_chans [0 ];
37
- static uint16_t seq_num ;
38
- NET_BUF_POOL_FIXED_DEFINE (tx_pool , CONFIG_BT_ISO_TX_BUF_COUNT ,
39
- BT_ISO_SDU_BUF_SIZE (ARRAY_SIZE (mock_iso_data )),
40
- CONFIG_BT_CONN_TX_USER_DATA_SIZE , NULL );
41
38
42
39
static struct bt_iso_chan_io_qos iso_tx = {
43
40
.sdu = 0U ,
@@ -52,54 +49,6 @@ static struct bt_iso_chan_qos iso_qos = {
52
49
53
50
DEFINE_FLAG_STATIC (flag_iso_connected );
54
51
55
- static void send_data_cb (struct k_work * work );
56
- K_WORK_DELAYABLE_DEFINE (iso_send_work , send_data_cb );
57
-
58
- static void send_data (struct bt_iso_chan * chan )
59
- {
60
- static size_t len_to_send = 1U ;
61
- struct net_buf * buf ;
62
- int ret ;
63
-
64
- if (!IS_FLAG_SET (flag_iso_connected )) {
65
- /* TX has been aborted */
66
- return ;
67
- }
68
-
69
- buf = net_buf_alloc (& tx_pool , K_NO_WAIT );
70
- TEST_ASSERT (buf != NULL , "Failed to allocate buffer" );
71
-
72
- net_buf_reserve (buf , BT_ISO_CHAN_SEND_RESERVE );
73
-
74
- net_buf_add_mem (buf , mock_iso_data , len_to_send );
75
-
76
- ret = bt_iso_chan_send (default_chan , buf , seq_num ++ );
77
- if (ret < 0 ) {
78
- LOG_DBG ("Failed to send ISO data: %d" , ret );
79
- net_buf_unref (buf );
80
-
81
- /* Reschedule for next interval */
82
- k_work_reschedule (& iso_send_work , K_USEC (SDU_INTERVAL_US ));
83
-
84
- return ;
85
- }
86
-
87
- len_to_send ++ ;
88
- if (len_to_send > chan -> qos -> tx -> sdu ) {
89
- len_to_send = 1 ;
90
- }
91
- }
92
-
93
- static void send_data_cb (struct k_work * work )
94
- {
95
- const uint16_t tx_pool_cnt = tx_pool .uninit_count ;
96
-
97
- /* Send/enqueue as many as we can */
98
- for (uint16_t i = 0U ; i < tx_pool_cnt ; i ++ ) {
99
- send_data (default_chan );
100
- }
101
- }
102
-
103
52
static void iso_connected_cb (struct bt_iso_chan * chan )
104
53
{
105
54
const struct bt_iso_chan_path hci_path = {
@@ -151,43 +100,38 @@ static void iso_connected_cb(struct bt_iso_chan *chan)
151
100
IN_RANGE (info .broadcaster .bis_number , BT_ISO_BIS_INDEX_MIN , BT_ISO_BIS_INDEX_MAX ),
152
101
"Invalid BIS number 0x%02x" , info .broadcaster .bis_number );
153
102
103
+ err = bt_iso_setup_data_path (chan , BT_HCI_DATAPATH_DIR_HOST_TO_CTLR , & hci_path );
104
+ TEST_ASSERT (err == 0 , "Failed to set ISO data path: %d" , err );
105
+
154
106
if (chan == default_chan ) {
155
- seq_num = 0U ;
107
+ /* Register for TX to start sending */
108
+ err = iso_tx_register (chan );
109
+ TEST_ASSERT (err == 0 , "Failed to register chan for TX: %d" , err );
156
110
157
111
SET_FLAG (flag_iso_connected );
158
112
}
159
-
160
- err = bt_iso_setup_data_path (chan , BT_HCI_DATAPATH_DIR_HOST_TO_CTLR , & hci_path );
161
- TEST_ASSERT (err == 0 , "Failed to set ISO data path: %d" , err );
162
113
}
163
114
164
115
static void iso_disconnected_cb (struct bt_iso_chan * chan , uint8_t reason )
165
116
{
166
117
LOG_INF ("ISO Channel %p disconnected (reason 0x%02x)" , chan , reason );
167
118
168
119
if (chan == default_chan ) {
169
- k_work_cancel_delayable ( & iso_send_work ) ;
120
+ int err ;
170
121
171
- UNSET_FLAG (flag_iso_connected );
172
- }
173
- }
122
+ err = iso_tx_unregister (chan );
123
+ TEST_ASSERT (err == 0 , "Failed to unregister chan for TX: %d" , err );
174
124
175
- static void sdu_sent_cb (struct bt_iso_chan * chan )
176
- {
177
- if (!IS_FLAG_SET (flag_iso_connected )) {
178
- /* TX has been aborted */
179
- return ;
125
+ UNSET_FLAG (flag_iso_connected );
180
126
}
181
-
182
- send_data (chan );
183
127
}
184
128
185
129
static void init (void )
186
130
{
187
131
static struct bt_iso_chan_ops iso_ops = {
188
132
.disconnected = iso_disconnected_cb ,
189
133
.connected = iso_connected_cb ,
190
- .sent = sdu_sent_cb ,
134
+ .sent = iso_tx_sent_cb ,
191
135
};
192
136
struct bt_le_local_features local_features ;
193
137
int err ;
@@ -212,6 +156,8 @@ static void init(void)
212
156
}
213
157
214
158
bk_sync_init ();
159
+
160
+ iso_tx_init ();
215
161
}
216
162
217
163
static void create_ext_adv (struct bt_le_ext_adv * * adv )
@@ -277,18 +223,6 @@ static void create_big(struct bt_le_ext_adv *adv, size_t cnt, struct bt_iso_big
277
223
WAIT_FOR_FLAG (flag_iso_connected );
278
224
}
279
225
280
- static void start_tx (void )
281
- {
282
- const uint16_t tx_pool_cnt = tx_pool .uninit_count ;
283
-
284
- LOG_INF ("Starting TX" );
285
-
286
- /* Send/enqueue as many as we can */
287
- for (uint16_t i = 0U ; i < tx_pool_cnt ; i ++ ) {
288
- send_data (default_chan );
289
- }
290
- }
291
-
292
226
static void terminate_big (struct bt_iso_big * big )
293
227
{
294
228
int err ;
@@ -325,7 +259,6 @@ static void test_main(void)
325
259
create_ext_adv (& adv );
326
260
create_big (adv , 1U , & big );
327
261
start_ext_adv (adv );
328
- start_tx ();
329
262
330
263
/* Wait for receiver to tell us to terminate */
331
264
bk_sync_wait ();
@@ -358,7 +291,6 @@ static void test_main_disable(void)
358
291
create_ext_adv (& adv );
359
292
create_big (adv , ARRAY_SIZE (iso_chans ), & big );
360
293
start_ext_adv (adv );
361
- start_tx ();
362
294
363
295
/* Wait for receiver to tell us to terminate */
364
296
bk_sync_wait ();
@@ -400,7 +332,6 @@ static void test_main_fragment(void)
400
332
create_ext_adv (& adv );
401
333
create_big (adv , 1U , & big );
402
334
start_ext_adv (adv );
403
- start_tx ();
404
335
405
336
/* Wait for receiver to tell us to terminate */
406
337
bk_sync_wait ();
0 commit comments