From 69abe7de8cac7eb6f3d4273e3fe1ced177dad59a Mon Sep 17 00:00:00 2001 From: Ilhan Ates Date: Thu, 21 Oct 2021 09:07:41 +0200 Subject: [PATCH] Bluetooth: tester: Add directed adv support GAP/CONN/DCON/BV-01-C test case needs directed advertising support. Signed-off-by: Ilhan Ates --- tests/bluetooth/tester/src/gap.c | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/bluetooth/tester/src/gap.c b/tests/bluetooth/tester/src/gap.c index 7ae35c4fdf5..6cbb3a75879 100644 --- a/tests/bluetooth/tester/src/gap.c +++ b/tests/bluetooth/tester/src/gap.c @@ -157,6 +157,7 @@ static void supported_commands(uint8_t *data, uint16_t len) tester_set_bit(cmds, GAP_SET_DISCOVERABLE); tester_set_bit(cmds, GAP_SET_BONDABLE); tester_set_bit(cmds, GAP_START_ADVERTISING); + tester_set_bit(cmds, GAP_START_DIRECTED_ADV); tester_set_bit(cmds, GAP_STOP_ADVERTISING); tester_set_bit(cmds, GAP_START_DISCOVERY); tester_set_bit(cmds, GAP_STOP_DISCOVERY); @@ -488,6 +489,36 @@ fail: BTP_STATUS_FAILED); } +static void start_directed_advertising(const uint8_t *data, uint16_t len) +{ + const struct gap_start_directed_adv_cmd *cmd = (void *)data; + struct gap_start_directed_adv_rp rp; + struct bt_le_adv_param adv_param; + + adv_param = *BT_LE_ADV_CONN_DIR((bt_addr_le_t *)data); + + if (cmd->high_duty == 0) { + adv_param.options |= BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY; + adv_param.interval_max = BT_GAP_ADV_FAST_INT_MAX_2; + adv_param.interval_min = BT_GAP_ADV_FAST_INT_MIN_2; + } + + if (bt_le_adv_start(&adv_param, NULL, 0, NULL, 0) < 0) { + LOG_ERR("Failed to start advertising"); + goto fail; + } + + atomic_set_bit(¤t_settings, GAP_SETTINGS_ADVERTISING); + rp.current_settings = sys_cpu_to_le32(current_settings); + + tester_send(BTP_SERVICE_ID_GAP, GAP_START_DIRECTED_ADV, + CONTROLLER_INDEX, (uint8_t *)&rp, sizeof(rp)); + return; +fail: + tester_rsp(BTP_SERVICE_ID_GAP, GAP_START_DIRECTED_ADV, CONTROLLER_INDEX, + BTP_STATUS_FAILED); +} + static void stop_advertising(const uint8_t *data, uint16_t len) { struct gap_stop_advertising_rp rp; @@ -1069,6 +1100,9 @@ void tester_handle_gap(uint8_t opcode, uint8_t index, uint8_t *data, case GAP_START_ADVERTISING: start_advertising(data, len); return; + case GAP_START_DIRECTED_ADV: + start_directed_advertising(data, len); + return; case GAP_STOP_ADVERTISING: stop_advertising(data, len); return;