summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruna Moreira <bruna.moreira@openbossa.org>2010-11-19 09:57:28 -0400
committerJohan Hedberg <johan.hedberg@nokia.com>2010-11-19 17:26:01 +0200
commitf9939cfe3653b7a1bcc2a836e6ac2c45ea39315c (patch)
tree4fcc0b55c9fd3f53479659e8d39cc3cc8c194b01 /src
parentad0e7f2c5ab9270369301f81eb5da1954eaab82f (diff)
downloadbluez-f9939cfe3653b7a1bcc2a836e6ac2c45ea39315c.tar.gz
Extract flags from advertising data
These flags will be used to decide if GATT service discovery will happen over LE (for single mode devices) or BR/EDR (for dual mode and non-LE devices).
Diffstat (limited to 'src')
-rw-r--r--src/adapter.c14
-rw-r--r--src/adapter.h1
-rw-r--r--src/sdpd.h10
3 files changed, 25 insertions, 0 deletions
diff --git a/src/adapter.c b/src/adapter.c
index 8136229f5..648d2a838 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -3053,6 +3053,18 @@ static struct remote_dev_info *get_found_dev(struct btd_adapter *adapter,
return dev;
}
+static uint8_t extract_eir_flags(uint8_t *eir_data)
+{
+ if (eir_data[0] == 0)
+ return 0;
+
+ if (eir_data[1] != EIR_FLAGS)
+ return 0;
+
+ /* For now, only one octet is used for flags */
+ return eir_data[2];
+}
+
void adapter_update_device_from_info(struct btd_adapter *adapter,
le_advertising_info *info)
{
@@ -3084,6 +3096,8 @@ void adapter_update_device_from_info(struct btd_adapter *adapter,
g_free(dev->name);
dev->name = tmp_name;
}
+
+ dev->flags = extract_eir_flags(info->data);
}
/* FIXME: check if other information was changed before emitting the
diff --git a/src/adapter.h b/src/adapter.h
index 4af69b38b..3a6753914 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -74,6 +74,7 @@ struct remote_dev_info {
GSList *services;
uint8_t evt_type;
uint8_t bdaddr_type;
+ uint8_t flags;
};
struct hci_dev {
diff --git a/src/sdpd.h b/src/sdpd.h
index 5bab86922..a46ad3cf7 100644
--- a/src/sdpd.h
+++ b/src/sdpd.h
@@ -36,6 +36,7 @@
#define EIR_DATA_LENGTH 240
+#define EIR_FLAGS 0x01 /* flags */
#define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */
#define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */
#define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */
@@ -47,6 +48,15 @@
#define EIR_TX_POWER 0x0A /* transmit power level */
#define EIR_DEVICE_ID 0x10 /* device ID */
+/* Flags Descriptions */
+#define EIR_LIM_DISC 0x01 /* LE Limited Discoverable Mode */
+#define EIR_GEN_DISC 0x02 /* LE General Discoverable Mode */
+#define EIR_BREDR_UNSUP 0x04 /* BR/EDR Not Supported */
+#define EIR_SIM_CONTROLLER 0x08 /* Simultaneous LE and BR/EDR to Same
+ Device Capable (Controller) */
+#define EIR_SIM_HOST 0x10 /* Simultaneous LE and BR/EDR to Same
+ Device Capable (Host) */
+
typedef struct request {
bdaddr_t device;
bdaddr_t bdaddr;