@@ -127,6 +127,7 @@ static void supported_commands(uint8_t *data, uint16_t len)
127
127
tester_set_bit (cmds , GAP_SET_DISCOVERABLE );
128
128
tester_set_bit (cmds , GAP_SET_BONDABLE );
129
129
tester_set_bit (cmds , GAP_START_ADVERTISING );
130
+ tester_set_bit (cmds , GAP_START_DIRECTED_ADV );
130
131
tester_set_bit (cmds , GAP_STOP_ADVERTISING );
131
132
tester_set_bit (cmds , GAP_START_DISCOVERY );
132
133
tester_set_bit (cmds , GAP_STOP_DISCOVERY );
@@ -458,6 +459,36 @@ static void start_advertising(const uint8_t *data, uint16_t len)
458
459
BTP_STATUS_FAILED );
459
460
}
460
461
462
+ static void start_directed_advertising (const uint8_t * data , uint16_t len )
463
+ {
464
+ const struct gap_start_directed_adv_cmd * cmd = (void * )data ;
465
+ struct gap_start_directed_adv_rp rp ;
466
+ struct bt_le_adv_param adv_param ;
467
+
468
+ adv_param = * BT_LE_ADV_CONN_DIR ((bt_addr_le_t * )data );
469
+
470
+ if (cmd -> high_duty == 0 ) {
471
+ adv_param .options |= BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY ;
472
+ adv_param .interval_max = BT_GAP_ADV_FAST_INT_MAX_2 ;
473
+ adv_param .interval_min = BT_GAP_ADV_FAST_INT_MIN_2 ;
474
+ }
475
+
476
+ if (bt_le_adv_start (& adv_param , NULL , 0 , NULL , 0 ) < 0 ) {
477
+ LOG_ERR ("Failed to start advertising" );
478
+ goto fail ;
479
+ }
480
+
481
+ atomic_set_bit (& current_settings , GAP_SETTINGS_ADVERTISING );
482
+ rp .current_settings = sys_cpu_to_le32 (current_settings );
483
+
484
+ tester_send (BTP_SERVICE_ID_GAP , GAP_START_DIRECTED_ADV ,
485
+ CONTROLLER_INDEX , (uint8_t * )& rp , sizeof (rp ));
486
+ return ;
487
+ fail :
488
+ tester_rsp (BTP_SERVICE_ID_GAP , GAP_START_DIRECTED_ADV , CONTROLLER_INDEX ,
489
+ BTP_STATUS_FAILED );
490
+ }
491
+
461
492
static void stop_advertising (const uint8_t * data , uint16_t len )
462
493
{
463
494
struct gap_stop_advertising_rp rp ;
@@ -1039,6 +1070,9 @@ void tester_handle_gap(uint8_t opcode, uint8_t index, uint8_t *data,
1039
1070
case GAP_START_ADVERTISING :
1040
1071
start_advertising (data , len );
1041
1072
return ;
1073
+ case GAP_START_DIRECTED_ADV :
1074
+ start_directed_advertising (data , len );
1075
+ return ;
1042
1076
case GAP_STOP_ADVERTISING :
1043
1077
stop_advertising (data , len );
1044
1078
return ;
0 commit comments