@@ -54,7 +54,7 @@ static struct {
54
54
55
55
static struct {
56
56
u16_t interval ;
57
- u8_t adv_type :4 ;
57
+ u8_t pdu_adv_type :4 ;
58
58
u8_t tx_addr :1 ;
59
59
u8_t rx_addr :1 ;
60
60
u8_t filter_policy :2 ;
@@ -269,6 +269,11 @@ void ll_adv_params_set(u16_t interval, u8_t adv_type,
269
269
u8_t const * const direct_addr , u8_t chl_map ,
270
270
u8_t filter_policy )
271
271
{
272
+ u8_t const pdu_adv_type [] = {PDU_ADV_TYPE_ADV_IND ,
273
+ PDU_ADV_TYPE_DIRECT_IND ,
274
+ PDU_ADV_TYPE_SCAN_IND ,
275
+ PDU_ADV_TYPE_NONCONN_IND ,
276
+ PDU_ADV_TYPE_DIRECT_IND };
272
277
struct radio_adv_data * radio_adv_data ;
273
278
struct pdu_adv * pdu ;
274
279
@@ -281,29 +286,34 @@ void ll_adv_params_set(u16_t interval, u8_t adv_type,
281
286
* interface can correctly update adv/scan data in the
282
287
* double buffer between caller and controller context.
283
288
*/
284
- _ll_adv_params .interval = interval ;
289
+ /* Set interval for Undirected or Low Duty Cycle Directed Advertising */
290
+ if (adv_type != 0x01 ) {
291
+ _ll_adv_params .interval = interval ;
292
+ } else {
293
+ _ll_adv_params .interval = 0 ;
294
+ }
285
295
_ll_adv_params .chl_map = chl_map ;
286
296
_ll_adv_params .filter_policy = filter_policy ;
287
- _ll_adv_params .adv_type = adv_type ;
297
+ _ll_adv_params .pdu_adv_type = pdu_adv_type [ adv_type ] ;
288
298
_ll_adv_params .tx_addr = own_addr_type ;
289
299
_ll_adv_params .rx_addr = 0 ;
290
300
291
301
/* update the current adv data */
292
302
radio_adv_data = radio_adv_data_get ();
293
303
pdu = (struct pdu_adv * )& radio_adv_data -> data [radio_adv_data -> last ][0 ];
294
- pdu -> type = _ll_adv_params .adv_type ;
304
+ pdu -> type = _ll_adv_params .pdu_adv_type ;
295
305
pdu -> rfu = 0 ;
296
306
297
307
if (IS_ENABLED (CONFIG_BLUETOOTH_CONTROLLER_CHAN_SEL_2 ) &&
298
- ((adv_type == PDU_ADV_TYPE_ADV_IND ) ||
299
- (adv_type == PDU_ADV_TYPE_DIRECT_IND ))) {
308
+ ((_ll_adv_params . pdu_adv_type == PDU_ADV_TYPE_ADV_IND ) ||
309
+ (_ll_adv_params . pdu_adv_type == PDU_ADV_TYPE_DIRECT_IND ))) {
300
310
pdu -> chan_sel = 1 ;
301
311
} else {
302
312
pdu -> chan_sel = 0 ;
303
313
}
304
314
305
315
pdu -> tx_addr = _ll_adv_params .tx_addr ;
306
- if (adv_type == PDU_ADV_TYPE_DIRECT_IND ) {
316
+ if (_ll_adv_params . pdu_adv_type == PDU_ADV_TYPE_DIRECT_IND ) {
307
317
_ll_adv_params .rx_addr = direct_addr_type ;
308
318
memcpy (& _ll_adv_params .direct_addr [0 ], direct_addr ,
309
319
BDADDR_SIZE );
@@ -351,12 +361,12 @@ void ll_adv_data_set(u8_t len, u8_t const *const data)
351
361
352
362
/* update adv pdu fields. */
353
363
pdu = (struct pdu_adv * )& radio_adv_data -> data [last ][0 ];
354
- pdu -> type = _ll_adv_params .adv_type ;
364
+ pdu -> type = _ll_adv_params .pdu_adv_type ;
355
365
pdu -> rfu = 0 ;
356
366
357
367
if (IS_ENABLED (CONFIG_BLUETOOTH_CONTROLLER_CHAN_SEL_2 ) &&
358
- ((_ll_adv_params .adv_type == PDU_ADV_TYPE_ADV_IND ) ||
359
- (_ll_adv_params .adv_type == PDU_ADV_TYPE_DIRECT_IND ))) {
368
+ ((_ll_adv_params .pdu_adv_type == PDU_ADV_TYPE_ADV_IND ) ||
369
+ (_ll_adv_params .pdu_adv_type == PDU_ADV_TYPE_DIRECT_IND ))) {
360
370
pdu -> chan_sel = 1 ;
361
371
} else {
362
372
pdu -> chan_sel = 0 ;
@@ -366,7 +376,7 @@ void ll_adv_data_set(u8_t len, u8_t const *const data)
366
376
pdu -> rx_addr = _ll_adv_params .rx_addr ;
367
377
memcpy (& pdu -> payload .adv_ind .addr [0 ],
368
378
& _ll_adv_params .adv_addr [0 ], BDADDR_SIZE );
369
- if (_ll_adv_params .adv_type == PDU_ADV_TYPE_DIRECT_IND ) {
379
+ if (_ll_adv_params .pdu_adv_type == PDU_ADV_TYPE_DIRECT_IND ) {
370
380
memcpy (& pdu -> payload .direct_ind .tgt_addr [0 ],
371
381
& _ll_adv_params .direct_addr [0 ], BDADDR_SIZE );
372
382
pdu -> len = sizeof (struct pdu_adv_payload_direct_ind );
0 commit comments