diff options
| -rw-r--r-- | hcid/adapter.h | 1 | ||||
| -rw-r--r-- | hcid/hcid.h | 5 | ||||
| -rw-r--r-- | hcid/manager.c | 175 | 
3 files changed, 12 insertions, 169 deletions
| diff --git a/hcid/adapter.h b/hcid/adapter.h index 1b9901bd..ff679e43 100644 --- a/hcid/adapter.h +++ b/hcid/adapter.h @@ -87,7 +87,6 @@ struct active_conn_info {  struct hci_dev {  	int ignore; -	bdaddr_t bdaddr;  	uint8_t  features[8];  	uint8_t  lmp_ver;  	uint16_t lmp_subver; diff --git a/hcid/hcid.h b/hcid/hcid.h index 8a4c0f48..9128d374 100644 --- a/hcid/hcid.h +++ b/hcid/hcid.h @@ -162,13 +162,8 @@ int start_adapter(uint16_t dev_id);  int stop_adapter(uint16_t dev_id);  int update_adapter(uint16_t dev_id); -int get_device_address(uint16_t dev_id, char *address, size_t size);  int get_device_class(uint16_t dev_id, uint8_t *class);  int set_device_class(uint16_t dev_id, uint8_t *class); -int get_device_version(uint16_t dev_id, char *version, size_t size); -int get_device_revision(uint16_t dev_id, char *revision, size_t size); -int get_device_manufacturer(uint16_t dev_id, char *manufacturer, size_t size); -int get_device_company(uint16_t dev_id, char *company, size_t size);  int set_simple_pairing_mode(uint16_t dev_id, uint8_t mode);  int get_device_name(uint16_t dev_id, char *name, size_t size); diff --git a/hcid/manager.c b/hcid/manager.c index 4d41dc1d..adb1455b 100644 --- a/hcid/manager.c +++ b/hcid/manager.c @@ -67,9 +67,10 @@ static DBusConnection *connection = NULL;  static int default_adapter_id = -1;  static GSList *adapters = NULL; -static int device_read_bdaddr(uint16_t dev_id, bdaddr_t *bdaddr) +static int device_read_bdaddr(uint16_t dev_id, const char *address)  {  	int dd, err; +	bdaddr_t bdaddr;  	dd = hci_open_dev(dev_id);  	if (dd < 0) { @@ -79,7 +80,8 @@ static int device_read_bdaddr(uint16_t dev_id, bdaddr_t *bdaddr)  		return -err;  	} -	if (hci_read_bd_addr(dd, bdaddr, 2000) < 0) { +	str2ba(address, &bdaddr); +	if (hci_read_bd_addr(dd, &bdaddr, 2000) < 0) {  		err = errno;  		error("Can't read address for hci%d: %s (%d)",  					dev_id, strerror(err), err); @@ -109,9 +111,9 @@ int add_adapter(uint16_t dev_id)  	}  	if (bacmp(&di.bdaddr, BDADDR_ANY)) -		bacpy(&dev->bdaddr, &di.bdaddr); +		ba2str(&di.bdaddr, adapter->address);  	else { -		int err = device_read_bdaddr(dev_id, &dev->bdaddr); +		int err = device_read_bdaddr(dev_id, adapter->address);  		if (err < 0)  			return err;  	} @@ -188,6 +190,7 @@ int start_adapter(uint16_t dev_id)  	uint8_t events[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00 };  	char name[249];  	int dd, err; +	bdaddr_t bdaddr;  	if (dev->ignore)  		return 0; @@ -290,7 +293,8 @@ setup:  						sizeof(events), events);  	} -	if (read_local_name(&dev->bdaddr, name) == 0) { +	str2ba(adapter->address, &bdaddr); +	if (read_local_name(&bdaddr, name) == 0) {  		memcpy(dev->name, name, 248);  		hci_write_local_name(dd, name, 5000);          } @@ -348,17 +352,6 @@ int update_adapter(uint16_t dev_id)  	return 0;  } -int get_device_address(uint16_t dev_id, char *address, size_t size) -{ -	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev; - -	if (size < 18) -		return -ENOBUFS; - -	return ba2str(&dev->bdaddr, address); -} -  int get_device_class(uint16_t dev_id, uint8_t *cls)  {  	struct adapter *adapter = manager_find_adapter_by_id(dev_id); @@ -379,124 +372,6 @@ int set_device_class(uint16_t dev_id, uint8_t *cls)  	return 0;  } -int get_device_version(uint16_t dev_id, char *version, size_t size) -{ -	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev; -	char edr[7], *tmp; -	int err; - -	if (size < 14) -		return -ENOBUFS; - -	if ((dev->lmp_ver == 0x03 || dev->lmp_ver == 0x04) && -			(dev->features[3] & (LMP_EDR_ACL_2M | LMP_EDR_ACL_3M))) -		sprintf(edr, " + EDR"); -	else -		edr[0] = '\0'; - -	tmp = lmp_vertostr(dev->lmp_ver); - -	if (strlen(tmp) == 0) -		err = snprintf(version, size, "not assigned"); -	else -		err = snprintf(version, size, "Bluetooth %s%s", tmp, edr); - -	bt_free(tmp); - -	return err; -} - -static int digi_revision(uint16_t dev_id, char *revision, size_t size) -{ -	struct hci_request rq; -	unsigned char req[] = { 0x07 }; -	unsigned char buf[102]; -	int dd, err; - -	dd = hci_open_dev(dev_id); -	if (dd < 0) { -		err = errno; -		error("Can't open device hci%d: %s (%d)", -					dev_id, strerror(err), err); -		return -err; -	} - -	memset(&rq, 0, sizeof(rq)); -	rq.ogf    = OGF_VENDOR_CMD; -	rq.ocf    = 0x000e; -	rq.cparam = req; -	rq.clen   = sizeof(req); -	rq.rparam = &buf; -	rq.rlen   = sizeof(buf); - -	if (hci_send_req(dd, &rq, 2000) < 0) { -		err = errno; -		error("Can't read revision for hci%d: %s (%d)", -					dev_id, strerror(err), err); -		hci_close_dev(dd); -		return -err; -	} - -	hci_close_dev(dd); - -	return snprintf(revision, size, "%s", buf + 1); -} - -int get_device_revision(uint16_t dev_id, char *revision, size_t size) -{ -	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev; -	int err; - -	switch (dev->manufacturer) { -	case 10: -		err = snprintf(revision, size, "Build %d", dev->lmp_subver); -		break; -	case 12: -		err = digi_revision(dev_id, revision, size); -		break; -	case 15: -		err = snprintf(revision, size, "%d.%d / %d", -				dev->hci_rev & 0xff, -				dev->lmp_subver >> 8, dev->lmp_subver & 0xff); -		break; -	default: -		err = snprintf(revision, size, "0x%02x", dev->lmp_subver); -		break; -	} - -	return err; -} - -int get_device_manufacturer(uint16_t dev_id, char *manufacturer, size_t size) -{ -	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev; -	char *tmp; - -	tmp = bt_compidtostr(dev->manufacturer); - -	return snprintf(manufacturer, size, "%s", tmp); -} - -int get_device_company(uint16_t dev_id, char *company, size_t size) -{ -	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev; -	char *tmp, oui[9]; -	int err; - -	ba2oui(&dev->bdaddr, oui); -	tmp = ouitocomp(oui); - -	err = snprintf(company, size, "%s", tmp); - -	free(tmp); - -	return err; -} -  int set_simple_pairing_mode(uint16_t dev_id, uint8_t mode)  {  	struct adapter *adapter = manager_find_adapter_by_id(dev_id); @@ -586,12 +461,10 @@ int set_device_name(uint16_t dev_id, const char *name)  int get_device_alias(uint16_t dev_id, const bdaddr_t *bdaddr, char *alias, size_t size)  {  	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev;  	char filename[PATH_MAX + 1], addr[18], *tmp;  	int err; -	ba2str(&dev->bdaddr, addr); -	create_name(filename, PATH_MAX, STORAGEDIR, addr, "aliases"); +	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "aliases");  	ba2str(bdaddr, addr); @@ -609,11 +482,9 @@ int get_device_alias(uint16_t dev_id, const bdaddr_t *bdaddr, char *alias, size_  int set_device_alias(uint16_t dev_id, const bdaddr_t *bdaddr, const char *alias)  {  	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev;  	char filename[PATH_MAX + 1], addr[18]; -	ba2str(&dev->bdaddr, addr); -	create_name(filename, PATH_MAX, STORAGEDIR, addr, "aliases"); +	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "aliases");  	create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); @@ -622,21 +493,6 @@ int set_device_alias(uint16_t dev_id, const bdaddr_t *bdaddr, const char *alias)  	return textfile_put(filename, addr, alias);  } -int get_encryption_key_size(uint16_t dev_id, const bdaddr_t *baddr) -{ -	struct adapter *adapter = manager_find_adapter_by_id(dev_id); -	struct hci_dev *dev = &adapter->dev; -	int size; - -	switch (dev->manufacturer) { -	default: -		size = -ENOENT; -		break; -	} - -	return size; -} -  static inline DBusMessage *invalid_args(DBusMessage *msg)  {  	return g_dbus_create_error(msg, @@ -1165,7 +1021,7 @@ int manager_start_adapter(int id)  	struct hci_conn_list_req *cl = NULL;  	struct hci_conn_info *ci;  	const char *mode; -	int i, err, dd = -1, ret = -1; +	int i, dd = -1, ret = -1;  	if (hci_devinfo(id, &di) < 0) {  		error("Getting device info failed: hci%d", id); @@ -1197,13 +1053,6 @@ int manager_start_adapter(int id)  	adapter->scan_enable = get_startup_scan(id);  	hci_send_cmd(dd, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE,  					1, &adapter->scan_enable); -	/* -	 * Get the adapter Bluetooth address -	 */ -	err = get_device_address(adapter->dev_id, adapter->address, -					sizeof(adapter->address)); -	if (err < 0) -		goto failed;  	adapter->mode = get_startup_mode(id);  	if (adapter->mode == MODE_LIMITED) | 
