From 922b94115e6746b706bdf36ad2417cd1e8fc68de Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Wed, 2 Jul 2014 16:47:01 +0300 Subject: [PATCH] core: Add device API for setting connection parameters --- src/device.c | 31 +++++++++++++++++++++++++++++++ src/device.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/src/device.c b/src/device.c index cb3dca6e4..2221e831c 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 2e0473ef9..59db52c92 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); -- 2.47.3