From 77514bca8ace53c9cd4c67127119a8d1ffb46416 Mon Sep 17 00:00:00 2001 From: Deokhyun Kim Date: Wed, 21 Aug 2019 20:04:10 +0900 Subject: [PATCH] Init le static address when adapter is enabled Change-Id: I19d079c6128535c1cfc637017a1e7048e82d04a7 Signed-off-by: Deokhyun Kim --- src/adapter.c | 89 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 37 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index dcb67fc..69be970 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -5036,55 +5036,66 @@ static DBusMessage *adapter_set_le_privacy(DBusConnection *conn, return dbus_message_new_method_return(msg); } -static void set_le_static_address(struct btd_adapter *adapter) +static void init_le_static_address(struct btd_adapter *adapter) { int fd; int ret; char address[18]; char dirname[PATH_MAX]; + int i; + bdaddr_t le_static_addr; + + le_static_addr.b[5] = adapter->bdaddr.b[5] | 0xc0; + for (i = 0; i < 5; i++) { + le_static_addr.b[i] = + (adapter->bdaddr.b[i] & 0x7f) << 1 | + (adapter->bdaddr.b[i] & 0x80) >> 7; + } + + /* + * < How to get Public address from above static address > + * + * for (i = 0; i < 5; i++) { + * bredr_addr.b[i] = + * (adapter->le_static_addr.b[i] & 0xfe) >> 1 | + * (adapter->le_static_addr.b[i] & 0x01) << 7; + * } + * bredr_addr.b[5] = {the value from advertising data} + */ snprintf(dirname, PATH_MAX, STORAGEDIR "/%s", "le_static_addr"); - if (access(dirname, F_OK) < 0) { - int i; - bdaddr_t le_static_addr; - - le_static_addr.b[5] = adapter->bdaddr.b[5] | 0xc0; - for (i = 0; i < 5; i++) { - le_static_addr.b[i] = - (adapter->bdaddr.b[i] & 0x7f) << 1 | - (adapter->bdaddr.b[i] & 0x80) >> 7; + fd = open(dirname, O_WRONLY | O_CREAT, 0644); + + if (fd >= 0) { + ba2str(&le_static_addr, address); + DBG("LE static random : %s", address); + ret = write(fd, address, strlen(address)); + if (ret < 0) { + error("Cannot save LE address : %s", + strerror(errno)); } - /* - * < How to get Public address from above static address > - * - * for (i = 0; i < 5; i++) { - * bredr_addr.b[i] = - * (adapter->le_static_addr.b[i] & 0xfe) >> 1 | - * (adapter->le_static_addr.b[i] & 0x01) << 7; - * } - * bredr_addr.b[5] = {the value from advertising data} - */ + ret = fdatasync(fd); + if (ret < 0) + error("sync failed : %s", strerror(errno)); - fd = open(dirname, O_WRONLY | O_CREAT, 0644); - if (fd >= 0) { - ba2str(&le_static_addr, address); - DBG("LE static random : %s", address); - ret = write(fd, address, strlen(address)); - if (ret < 0) { - error("Cannot save LE address : %s", - strerror(errno)); - } + close(fd); + } else { + error("Cannot save LE address"); + } + bacpy(&adapter->le_static_addr, &le_static_addr); +} - ret = fdatasync(fd); - if (ret < 0) - error("sync failed : %s", strerror(errno)); +static void set_le_static_address(struct btd_adapter *adapter) +{ + int fd; + int ret; + char address[18]; + char dirname[PATH_MAX]; - close(fd); - } else { - error("Cannot save LE address"); - } - bacpy(&adapter->le_static_addr, &le_static_addr); + snprintf(dirname, PATH_MAX, STORAGEDIR "/%s", "le_static_addr"); + if (access(dirname, F_OK) < 0) { + init_le_static_address(adapter); } else { fd = open(dirname, O_RDONLY); if (fd >= 0) { @@ -14504,6 +14515,10 @@ static void read_info_complete(uint8_t status, uint16_t length, set_mode(adapter, MGMT_OP_SET_POWERED, 0x01); #endif +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + init_le_static_address(adapter); +#endif + return; failed: -- 2.7.4