Skip to content

Commit 9efd3d5

Browse files
ilhanatescarlescufi
authored andcommitted
[nrf fromlist] Bluetooth: tester: Add directed adv support
Upstream PR: zephyrproject-rtos/zephyr#39611 GAP/CONN/DCON/BV-01-C test case needs directed advertising support. Signed-off-by: Ilhan Ates <[email protected]>
1 parent 610e192 commit 9efd3d5

File tree

1 file changed

+34
-0
lines changed
  • tests/bluetooth/tester/src

1 file changed

+34
-0
lines changed

tests/bluetooth/tester/src/gap.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
461492
static 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

Comments
 (0)