@@ -127,6 +127,7 @@ static void supported_commands(uint8_t *data, uint16_t len)
127127 tester_set_bit (cmds , GAP_SET_DISCOVERABLE );
128128 tester_set_bit (cmds , GAP_SET_BONDABLE );
129129 tester_set_bit (cmds , GAP_START_ADVERTISING );
130+ tester_set_bit (cmds , GAP_START_DIRECTED_ADV );
130131 tester_set_bit (cmds , GAP_STOP_ADVERTISING );
131132 tester_set_bit (cmds , GAP_START_DISCOVERY );
132133 tester_set_bit (cmds , GAP_STOP_DISCOVERY );
@@ -458,6 +459,36 @@ static void start_advertising(const uint8_t *data, uint16_t len)
458459 BTP_STATUS_FAILED );
459460}
460461
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+
461492static void stop_advertising (const uint8_t * data , uint16_t len )
462493{
463494 struct gap_stop_advertising_rp rp ;
@@ -1039,6 +1070,9 @@ void tester_handle_gap(uint8_t opcode, uint8_t index, uint8_t *data,
10391070 case GAP_START_ADVERTISING :
10401071 start_advertising (data , len );
10411072 return ;
1073+ case GAP_START_DIRECTED_ADV :
1074+ start_directed_advertising (data , len );
1075+ return ;
10421076 case GAP_STOP_ADVERTISING :
10431077 stop_advertising (data , len );
10441078 return ;
0 commit comments