On 6/28/2024 7:08 PM, Luiz Augusto von Dentz wrote:
Hi,
On Fri, Jun 28, 2024 at 3:24 AM <quic_prathm@xxxxxxxxxxx> wrote:
From: Prathibha Madugonde <quic_prathm@xxxxxxxxxxx>
Fix for GAP/DISC/NONM/BV-02-C
As per GAP.TS.p44 test spec
IUT does not contain General Discoverable mode and Limited Discoverable
mode in the AD Type Flag. IUT shall send AD Type Flag to PASS the test
case, thus added BR/EDR not supported bit in the AD Type Flag when
discoverable is off.
Signed-off-by: Prathibha Madugonde <quic_prathm@xxxxxxxxxxx>
---
src/advertising.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/src/advertising.c b/src/advertising.c
index 5d373e088..9857ceceb 100644
--- a/src/advertising.c
+++ b/src/advertising.c
@@ -1444,6 +1444,7 @@ static DBusMessage *parse_advertisement(struct btd_adv_client *client)
{
struct adv_parser *parser;
int err;
+ uint8_t flags;
for (parser = parsers; parser && parser->name; parser++) {
DBusMessageIter iter;
@@ -1499,6 +1500,21 @@ static DBusMessage *parse_advertisement(struct btd_adv_client *client)
goto fail;
}
+ if (!btd_adapter_get_discoverable(client->manager->adapter)) {
+ /* GAP.TS.p44 Test Spec GAP/DISC/NONM/BV-02-C
+ * page 158:
+ * IUT does not contain
+ * ‘LE General Discoverable Mode’ flag or the
+ * ‘LE Limited Discoverable Mode’ flag in the Flags AD Type
+ * But AD Flag Type should be there for the test case to
+ * PASS. Thus BR/EDR Not Supported BIT shall be included
+ * in the AD Type flag.
+ */
+ flags = bt_ad_get_flags(client->data);
+ flags |= BT_AD_FLAG_NO_BREDR;
+ bt_ad_add_flags(client->data, &flags, 1);
+ }
I think we would be much better off using broadcaster role for such a
test case or does it require to be connectable? Anyway I don't think
there is a requirement to disable BR/EDR when not discoverable, so if
we really need to pass specific flags then perhaps it would be better
to create a Flags property so clients can set themselves.
Hi,
This particular test case require IUT to be in connectable. There is
already code snippet to disable BR/EDR when adapter is not discoverable
in the set_flags() like below.
/* Set BR/EDR Not Supported if adapter is not discoverable but
* the instance is.
*/
if ((flags & (BT_AD_FLAG_GENERAL | BT_AD_FLAG_LIMITED)) &&
!btd_adapter_get_discoverable(client->manager->adapter))
flags |= BT_AD_FLAG_NO_BREDR;
Hence using the same logic. Currently AD flags(BT_AD_FLAG_LIMITED,
BT_AD_FLAG_GENERAL & BT_AD_FLAG_NO_BREDR) is managed based on properties
discoverable, discoverable timeout and adapter discoverable.
--
Prathibha Madugonde
err = refresh_advertisement(client, add_adv_callback);
if (!err)
--
2.17.1