From 353580a76447bb777026bd40546eaf7a38a6066e Mon Sep 17 00:00:00 2001 From: Lyle Zhu Date: Mon, 3 Mar 2025 17:49:13 +0800 Subject: [PATCH] Bluetooth: tester: Support general and limited discoverable for classic Disable discoverable mode if `cp->discoverable` is `BTP_GAP_NON_DISCOVERABLE`. Set general discoverable mode if `cp->discoverable` is `BTP_GAP_GENERAL_DISCOVERABLE`. Set limited discoverable mode if `cp->discoverable` is `BTP_GAP_LIMITED_DISCOVERABLE`. Signed-off-by: Lyle Zhu --- tests/bluetooth/tester/src/btp_gap.c | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/bluetooth/tester/src/btp_gap.c b/tests/bluetooth/tester/src/btp_gap.c index 061fcc52c8b..f8898b0c792 100644 --- a/tests/bluetooth/tester/src/btp_gap.c +++ b/tests/bluetooth/tester/src/btp_gap.c @@ -583,15 +583,64 @@ static uint8_t set_discoverable(const void *cmd, uint16_t cmd_len, switch (cp->discoverable) { case BTP_GAP_NON_DISCOVERABLE: + if (IS_ENABLED(CONFIG_BT_CLASSIC)) { + int err; + + err = bt_br_set_discoverable(false, false); + if ((err < 0) && (err != -EALREADY)) { + return BTP_STATUS_FAILED; + } + } + ad_flags &= ~(BT_LE_AD_GENERAL | BT_LE_AD_LIMITED); atomic_clear_bit(¤t_settings, BTP_GAP_SETTINGS_DISCOVERABLE); break; case BTP_GAP_GENERAL_DISCOVERABLE: + if (IS_ENABLED(CONFIG_BT_CLASSIC)) { + int err; + + err = bt_br_set_connectable(true); + if (err == -EALREADY) { + err = bt_br_set_discoverable(false, false); + if ((err < 0) && (err != -EALREADY)) { + return BTP_STATUS_FAILED; + } + } else if (err < 0) { + return BTP_STATUS_FAILED; + } + + err = bt_br_set_discoverable(true, false); + if (err < 0) { + return BTP_STATUS_FAILED; + } + ad_flags &= ~BT_LE_AD_NO_BREDR; + } + ad_flags &= ~BT_LE_AD_LIMITED; ad_flags |= BT_LE_AD_GENERAL; atomic_set_bit(¤t_settings, BTP_GAP_SETTINGS_DISCOVERABLE); break; case BTP_GAP_LIMITED_DISCOVERABLE: + if (IS_ENABLED(CONFIG_BT_CLASSIC)) { + int err; + + err = bt_br_set_connectable(true); + if (err == -EALREADY) { + err = bt_br_set_discoverable(false, false); + if ((err < 0) && (err != -EALREADY)) { + return BTP_STATUS_FAILED; + } + } else if (err < 0) { + return BTP_STATUS_FAILED; + } + + err = bt_br_set_discoverable(true, true); + if (err < 0) { + return BTP_STATUS_FAILED; + } + ad_flags &= ~BT_LE_AD_NO_BREDR; + } + ad_flags &= ~BT_LE_AD_GENERAL; ad_flags |= BT_LE_AD_LIMITED; atomic_set_bit(¤t_settings, BTP_GAP_SETTINGS_DISCOVERABLE);