Diff between 460d1656cefaf4a2a28aeee74084e9b8c5a70ec0 and 922b94115e6746b706bdf36ad2417cd1e8fc68de

Changed Files

File Additions Deletions Status
src/device.c +31 -0 modified
src/device.h +3 -0 modified

Full Patch

diff --git a/src/device.c b/src/device.c
index cb3dca6..2221e83 100644
--- a/src/device.c
+++ b/src/device.c
@@ -222,6 +222,12 @@ struct btd_device {
 	GIOChannel	*att_io;
 	guint		cleanup_id;
 	guint		store_id;
+
+	bool		pending_conn_params;
+	uint16_t	min_interval;
+	uint16_t	max_interval;
+	uint16_t	latency;
+	uint16_t	timeout;
 };
 
 static const uint16_t uuid_list[] = {
@@ -376,6 +382,18 @@ static gboolean store_device_info_cb(gpointer user_data)
 		g_key_file_remove_group(key_file, "DeviceID", NULL);
 	}
 
+	if (device->pending_conn_params) {
+		device->pending_conn_params = false;
+		g_key_file_set_integer(key_file, "ConnectionParameters",
+					"MinInterval", device->min_interval);
+		g_key_file_set_integer(key_file, "ConnectionParameters",
+					"MaxInterval", device->max_interval);
+		g_key_file_set_integer(key_file, "ConnectionParameters",
+					"Latency", device->latency);
+		g_key_file_set_integer(key_file, "ConnectionParameters",
+					"Timeout", device->timeout);
+	}
+
 	create_file(filename, S_IRUSR | S_IWUSR);
 
 	str = g_key_file_to_data(key_file, &length, NULL);
@@ -2492,6 +2510,19 @@ void device_update_last_seen(struct btd_device *device, uint8_t bdaddr_type)
 		device->le_seen = time(NULL);
 }
 
+void device_set_conn_param(struct btd_device *dev, uint16_t min_interval,
+				uint16_t max_interval, uint16_t latency,
+				uint16_t timeout)
+{
+	dev->pending_conn_params = true;
+	dev->min_interval = min_interval;
+	dev->max_interval = max_interval;
+	dev->latency = latency;
+	dev->timeout = timeout;
+
+	store_device_info(dev);
+}
+
 /* It is possible that we have two device objects for the same device in
  * case it has first been discovered over BR/EDR and has a private
  * address when discovered over LE for the first time. In such a case we
diff --git a/src/device.h b/src/device.h
index 2e0473e..59db52c 100644
--- a/src/device.h
+++ b/src/device.h
@@ -43,6 +43,9 @@ void device_update_addr(struct btd_device *device, const bdaddr_t *bdaddr,
 void device_set_bredr_support(struct btd_device *device);
 void device_set_le_support(struct btd_device *device, uint8_t bdaddr_type);
 void device_update_last_seen(struct btd_device *device, uint8_t bdaddr_type);
+void device_set_conn_param(struct btd_device *dev, uint16_t min_interval,
+				uint16_t max_interval, uint16_t latency,
+				uint16_t timeout);
 void device_merge_duplicate(struct btd_device *dev, struct btd_device *dup);
 uint32_t btd_device_get_class(struct btd_device *device);
 uint16_t btd_device_get_vendor(struct btd_device *device);