summaryrefslogtreecommitdiffstats
path: root/hcid/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'hcid/device.c')
-rw-r--r--hcid/device.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/hcid/device.c b/hcid/device.c
index f92fa0c7..71af2d59 100644
--- a/hcid/device.c
+++ b/hcid/device.c
@@ -438,10 +438,13 @@ int get_device_name(uint16_t dev_id, char *name, size_t size)
int set_device_name(uint16_t dev_id, const char *name)
{
+ struct hci_dev *dev;
int dd;
ASSERT_DEV_ID;
+ dev = &devices[dev_id];
+
dd = hci_open_dev(dev_id);
if (dd < 0) {
error("Can't open device hci%d",
@@ -457,6 +460,29 @@ int set_device_name(uint16_t dev_id, const char *name)
return -err;
}
+ if (dev->features[6] & LMP_EXT_INQ) {
+ uint8_t fec = 0, data[240];
+ int len;
+
+ memset(data, 0, sizeof(data));
+ len = strlen(name);
+ if (len > 48) {
+ len = 48;
+ data[1] = 0x08;
+ } else
+ data[1] = 0x09;
+ data[0] = len + 1;
+ memcpy(data + 2, name, len);
+
+ if (hci_write_ext_inquiry_response(dd, fec, data, 2000) < 0) {
+ int err = errno;
+ error("Can't write extended inquiry response for hci%d: %s (%d)",
+ dev_id, strerror(errno), errno);
+ hci_close_dev(dd);
+ return -err;
+ }
+ }
+
hci_close_dev(dd);
return 0;