hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
From b6be7aac6982e870fefae7db2aa497d3d0af8b7d Mon Sep 17 00:00:00 2001
From: ctf <ctf@rock-chips.com>
Date: Wed, 8 Jul 2020 14:55:07 +0800
Subject: [PATCH 18/19] add EirData api
 
Signed-off-by: ctf <ctf@rock-chips.com>
---
 src/adapter.c |  1 +
 src/device.c  | 39 +++++++++++++++++++++++++++++++++++++++
 src/device.h  |  1 +
 3 files changed, 41 insertions(+)
 
diff --git a/src/adapter.c b/src/adapter.c
index 1472d81..cd54926 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6014,6 +6014,7 @@ static void update_found_devices(struct btd_adapter *adapter,
         return;
     }
 
+    device_set_eri_data(dev, data, data_len);
     device_update_last_seen(dev, bdaddr_type);
 
     /*
diff --git a/src/device.c b/src/device.c
index c1da35c..61f3c41 100644
--- a/src/device.c
+++ b/src/device.c
@@ -92,6 +92,8 @@
 #define GATT_INCLUDE_UUID_STR "2802"
 #define GATT_CHARAC_UUID_STR "2803"
 
+#define GATT_EIR_DATA_LEN 240
+
 static DBusConnection *dbus_conn = NULL;
 static unsigned service_state_cb_id;
 
@@ -262,6 +264,8 @@ struct btd_device {
 
     GIOChannel    *att_io;
     guint        store_id;
+
+    uint8_t        eir_data[GATT_EIR_DATA_LEN];
 };
 
 static const uint16_t uuid_list[] = {
@@ -727,6 +731,22 @@ static gboolean dev_property_get_address(const GDBusPropertyTable *property,
     return TRUE;
 }
 
+static gboolean dev_property_get_eir_data(const GDBusPropertyTable *property,
+                    DBusMessageIter *iter, void *user_data)
+{
+    struct btd_device *device = user_data;
+    const char *ptr = device->eir_data;
+    DBusMessageIter array;
+
+    dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+                    DBUS_TYPE_BYTE_AS_STRING, &array);
+    dbus_message_iter_append_fixed_array(&array, DBUS_TYPE_BYTE,
+                    &ptr, sizeof(device->eir_data));
+    dbus_message_iter_close_container(iter, &array);
+
+    return TRUE;
+}
+
 static gboolean property_get_address_type(const GDBusPropertyTable *property,
                     DBusMessageIter *iter, void *user_data)
 {
@@ -2755,6 +2775,7 @@ static const GDBusPropertyTable device_properties[] = {
                 NULL, dev_property_advertising_data_exist,
                 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
     { "MTU", "q", dev_property_get_client_mtu },
+    { "EirData", "ay", dev_property_get_eir_data },
     { }
 };
 
@@ -5597,6 +5618,24 @@ void device_set_flags(struct btd_device *device, uint8_t flags)
                     DEVICE_INTERFACE, "AdvertisingFlags");
 }
 
+void device_set_eri_data(struct btd_device *device, const uint8_t *data, uint8_t data_len)
+{
+    int len;
+
+    if (!device)
+        return;
+
+    if(!data || data_len <= 0)
+        return;
+
+    if(!strcmp(device->eir_data, data))
+        return;
+
+    len = data_len > GATT_EIR_DATA_LEN ? GATT_EIR_DATA_LEN : data_len;
+    memset(device->eir_data, 0, GATT_EIR_DATA_LEN);
+    memcpy(device->eir_data, data, len);
+}
+
 bool device_is_connectable(struct btd_device *device)
 {
     if (!device)
diff --git a/src/device.h b/src/device.h
index 06b1004..1f1d7fb 100644
--- a/src/device.h
+++ b/src/device.h
@@ -107,6 +107,7 @@ void device_set_rssi_with_delta(struct btd_device *device, int8_t rssi,
 void device_set_rssi(struct btd_device *device, int8_t rssi);
 void device_set_tx_power(struct btd_device *device, int8_t tx_power);
 void device_set_flags(struct btd_device *device, uint8_t flags);
+void device_set_eri_data(struct btd_device *device, const uint8_t *data, uint8_t data_len);
 bool btd_device_is_connected(struct btd_device *dev);
 uint8_t btd_device_get_bdaddr_type(struct btd_device *dev);
 bool device_is_retrying(struct btd_device *device);
-- 
2.20.1