@@ -157,6 +157,7 @@ static void supported_commands(uint8_t *data, uint16_t len)
157157 tester_set_bit (cmds , GAP_SET_DISCOVERABLE );
158158 tester_set_bit (cmds , GAP_SET_BONDABLE );
159159 tester_set_bit (cmds , GAP_START_ADVERTISING );
160+ tester_set_bit (cmds , GAP_START_DIRECTED_ADV );
160161 tester_set_bit (cmds , GAP_STOP_ADVERTISING );
161162 tester_set_bit (cmds , GAP_START_DISCOVERY );
162163 tester_set_bit (cmds , GAP_STOP_DISCOVERY );
@@ -488,6 +489,36 @@ static void start_advertising(const uint8_t *data, uint16_t len)
488489 BTP_STATUS_FAILED );
489490}
490491
492+ static void start_directed_advertising (const uint8_t * data , uint16_t len )
493+ {
494+ const struct gap_start_directed_adv_cmd * cmd = (void * )data ;
495+ struct gap_start_directed_adv_rp rp ;
496+ struct bt_le_adv_param adv_param ;
497+
498+ adv_param = * BT_LE_ADV_CONN_DIR ((bt_addr_le_t * )data );
499+
500+ if (cmd -> high_duty == 0 ) {
501+ adv_param .options |= BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY ;
502+ adv_param .interval_max = BT_GAP_ADV_FAST_INT_MAX_2 ;
503+ adv_param .interval_min = BT_GAP_ADV_FAST_INT_MIN_2 ;
504+ }
505+
506+ if (bt_le_adv_start (& adv_param , NULL , 0 , NULL , 0 ) < 0 ) {
507+ LOG_ERR ("Failed to start advertising" );
508+ goto fail ;
509+ }
510+
511+ atomic_set_bit (& current_settings , GAP_SETTINGS_ADVERTISING );
512+ rp .current_settings = sys_cpu_to_le32 (current_settings );
513+
514+ tester_send (BTP_SERVICE_ID_GAP , GAP_START_DIRECTED_ADV ,
515+ CONTROLLER_INDEX , (uint8_t * )& rp , sizeof (rp ));
516+ return ;
517+ fail :
518+ tester_rsp (BTP_SERVICE_ID_GAP , GAP_START_DIRECTED_ADV , CONTROLLER_INDEX ,
519+ BTP_STATUS_FAILED );
520+ }
521+
491522static void stop_advertising (const uint8_t * data , uint16_t len )
492523{
493524 struct gap_stop_advertising_rp rp ;
@@ -1069,6 +1100,9 @@ void tester_handle_gap(uint8_t opcode, uint8_t index, uint8_t *data,
10691100 case GAP_START_ADVERTISING :
10701101 start_advertising (data , len );
10711102 return ;
1103+ case GAP_START_DIRECTED_ADV :
1104+ start_directed_advertising (data , len );
1105+ return ;
10721106 case GAP_STOP_ADVERTISING :
10731107 stop_advertising (data , len );
10741108 return ;
0 commit comments