* [PATCH BlueZ] tools/btpclient: Fix eir data on GAP device found event
@ 2026-01-15 14:38 Frédéric Danis
2026-01-15 15:38 ` [BlueZ] " bluez.test.bot
0 siblings, 1 reply; 2+ messages in thread
From: Frédéric Danis @ 2026-01-15 14:38 UTC (permalink / raw)
To: linux-bluetooth
This allows to pass GAP/BROB/OBSV/BV-05-C test with auto-pts.
---
tools/btpclient.c | 91 +++++++++++++++++++++++++++++++++++++++++------
1 file changed, 81 insertions(+), 10 deletions(-)
diff --git a/tools/btpclient.c b/tools/btpclient.c
index 5b531bfbd..3f060ebc0 100644
--- a/tools/btpclient.c
+++ b/tools/btpclient.c
@@ -29,7 +29,7 @@
#define AD_IFACE "org.bluez.LEAdvertisement1"
#define AG_IFACE "org.bluez.Agent1"
-/* List of assigned numbers for advetising data and scan response */
+/* List of assigned numbers for advertising data and scan response */
#define AD_TYPE_FLAGS 0x01
#define AD_TYPE_INCOMPLETE_UUID16_SERVICE_LIST 0x02
#define AD_TYPE_SHORT_NAME 0x08
@@ -2520,15 +2520,18 @@ static void btp_gap_device_found_ev(struct l_dbus_proxy *proxy)
{
struct btp_device *device = find_device_by_proxy(proxy);
struct btp_adapter *adapter = find_adapter_by_device(device);
- struct btp_device_found_ev ev;
+ struct btp_device_found_ev *ev;
struct btp_gap_device_connected_ev ev_conn;
const char *str, *addr_str;
int16_t rssi;
uint8_t address_type;
bool connected;
+ struct l_dbus_message_iter iter, var;
+
+ ev = l_malloc(sizeof(struct btp_device_found_ev));
if (!l_dbus_proxy_get_property(proxy, "Address", "s", &addr_str) ||
- str2ba(addr_str, &ev.address) < 0)
+ str2ba(addr_str, &ev->address) < 0)
return;
if (!l_dbus_proxy_get_property(proxy, "AddressType", "s", &str))
@@ -2536,23 +2539,91 @@ static void btp_gap_device_found_ev(struct l_dbus_proxy *proxy)
address_type = strcmp(str, "public") ? BTP_GAP_ADDR_RANDOM :
BTP_GAP_ADDR_PUBLIC;
- ev.address_type = address_type;
+ ev->address_type = address_type;
if (!l_dbus_proxy_get_property(proxy, "RSSI", "n", &rssi))
- ev.rssi = 0x81;
+ ev->rssi = 0x81;
else
- ev.rssi = rssi;
+ ev->rssi = rssi;
/* TODO Temporary set all flags */
- ev.flags = (BTP_EV_GAP_DEVICE_FOUND_FLAG_RSSI |
+ ev->flags = (BTP_EV_GAP_DEVICE_FOUND_FLAG_RSSI |
BTP_EV_GAP_DEVICE_FOUND_FLAG_AD |
BTP_EV_GAP_DEVICE_FOUND_FLAG_SR);
- /* TODO Add eir to device found event */
- ev.eir_len = 0;
+ ev->eir_len = 0;
+ if (l_dbus_proxy_get_property(proxy, "ManufacturerData", "a{qv}",
+ &iter)) {
+ uint16_t key;
+
+ while (l_dbus_message_iter_next_entry(&iter, &key, &var)) {
+ struct l_dbus_message_iter var_2;
+ uint8_t *data;
+ uint32_t n;
+ uint8_t *eir;
+
+ if (!l_dbus_message_iter_get_variant(&var, "ay",
+ &var_2)) {
+ l_debug("Failed to get data variant");
+ continue;
+ }
+
+ if (!l_dbus_message_iter_get_fixed_array(&var_2,
+ &data,
+ &n)) {
+ l_debug("Cannot get ManufacturerData");
+ continue;
+ }
+
+ ev->eir_len += n + 4;
+ ev = l_realloc(ev,
+ sizeof(struct btp_device_found_ev) +
+ ev->eir_len);
+ eir = &ev->eir[ev->eir_len - n - 4];
+ eir[0] = n + 3;
+ eir[1] = AD_TYPE_MANUFACTURER_DATA;
+ eir[2] = key >> 8;
+ eir[3] = key & 0xFF;
+ l_memcpy(&eir[4], data, n);
+ }
+ }
+
+ if (l_dbus_proxy_get_property(proxy, "AdvertisingData", "a{yv}",
+ &iter)) {
+ uint8_t key;
+
+ while (l_dbus_message_iter_next_entry(&iter, &key, &var)) {
+ struct l_dbus_message_iter var_2;
+ uint8_t *data;
+ uint32_t n;
+ uint8_t *eir;
+
+ if (!l_dbus_message_iter_get_variant(&var, "ay",
+ &var_2)) {
+ l_debug("Failed to get data variant");
+ continue;
+ }
+
+ if (!l_dbus_message_iter_get_fixed_array(&var_2,
+ &data,
+ &n)) {
+ l_debug("Cannot get AdvertisingData");
+ continue;
+ }
+
+ ev->eir_len += n + 2;
+ ev = l_realloc(ev,
+ sizeof(struct btp_device_found_ev) +
+ ev->eir_len);
+ eir = &ev->eir[ev->eir_len - n - 2];
+ eir[0] = n + 1;
+ eir[1] = key;
+ l_memcpy(&eir[2], data, n);
+ }
+ }
btp_send(btp, BTP_GAP_SERVICE, BTP_EV_GAP_DEVICE_FOUND, adapter->index,
- sizeof(ev) + ev.eir_len, &ev);
+ sizeof(*ev) + ev->eir_len, ev);
if (l_dbus_proxy_get_property(proxy, "Connected", "b", &connected) &&
connected) {
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-01-15 15:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-15 14:38 [PATCH BlueZ] tools/btpclient: Fix eir data on GAP device found event Frédéric Danis
2026-01-15 15:38 ` [BlueZ] " bluez.test.bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox