diff options
| -rw-r--r-- | src/dbus-hci.c | 41 | ||||
| -rw-r--r-- | src/dbus-hci.h | 2 | 
2 files changed, 38 insertions, 5 deletions
| diff --git a/src/dbus-hci.c b/src/dbus-hci.c index eea166e7..c6f3bb96 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -1143,7 +1143,6 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,  int set_limited_discoverable(int dd, const uint8_t *cls, gboolean limited)  {  	uint32_t dev_class; -	int err;  	int num = (limited ? 2 : 1);  	uint8_t lap[] = { 0x33, 0x8b, 0x9e, 0x00, 0x8b, 0x9e };  	/* @@ -1151,7 +1150,7 @@ int set_limited_discoverable(int dd, const uint8_t *cls, gboolean limited)  	 * 2: giac + liac  	 */  	if (hci_write_current_iac_lap(dd, num, lap, HCI_REQ_TIMEOUT) < 0) { -		err = errno; +		int err = errno;  		error("Can't write current IAC LAP: %s(%d)",  				strerror(err), err);  		return -err; @@ -1170,7 +1169,7 @@ int set_limited_discoverable(int dd, const uint8_t *cls, gboolean limited)  	}  	if (hci_write_class_of_dev(dd, dev_class, HCI_REQ_TIMEOUT) < 0) { -		err = errno; +		int err = errno;  		error("Can't write class of device: %s (%d)",  							strerror(err), err);  		return -err; @@ -1182,7 +1181,6 @@ int set_limited_discoverable(int dd, const uint8_t *cls, gboolean limited)  int set_service_classes(int dd, const uint8_t *cls, uint8_t value)  {  	uint32_t dev_class; -	int err;  	if (cls[2] == value)  		return 0; /* Already set */ @@ -1190,7 +1188,40 @@ int set_service_classes(int dd, const uint8_t *cls, uint8_t value)  	dev_class = (value << 16) | (cls[1] << 8) | cls[0];  	if (hci_write_class_of_dev(dd, dev_class, HCI_REQ_TIMEOUT) < 0) { -		err = errno; +		int err = errno; +		error("Can't write class of device: %s (%d)", +							strerror(err), err); +		return -err; +	} + +	return 0; +} + +int set_major_class(int dd, const uint8_t *cls, uint8_t major) +{ +	uint32_t dev_class; + +	dev_class = (cls[2] << 16) | ((cls[1] & 0x20) << 8) | +						((major & 0xdf) << 8) | 0x00; + +	if (hci_write_class_of_dev(dd, dev_class, HCI_REQ_TIMEOUT) < 0) { +		int err = errno; +		error("Can't write class of device: %s (%d)", +							strerror(err), err); +		return -err; +	} + +	return 0; +} + +int set_minor_class(int dd, const uint8_t *cls, uint8_t minor) +{ +	uint32_t dev_class; + +	dev_class = (cls[2] << 16) | (cls[1] << 8) | minor; + +	if (hci_write_class_of_dev(dd, dev_class, HCI_REQ_TIMEOUT) < 0) { +		int err = errno;  		error("Can't write class of device: %s (%d)",  							strerror(err), err);  		return -err; diff --git a/src/dbus-hci.h b/src/dbus-hci.h index f6547ea4..a9ccbbd5 100644 --- a/src/dbus-hci.h +++ b/src/dbus-hci.h @@ -56,6 +56,8 @@ int cancel_periodic_discovery(struct btd_adapter *adapter);  int set_limited_discoverable(int dd, const uint8_t *cls, gboolean limited);  int set_service_classes(int dd, const uint8_t *cls, uint8_t value); +int set_major_class(int dd, const uint8_t *cls, uint8_t major); +int set_minor_class(int dd, const uint8_t *cls, uint8_t minor);  void set_dbus_connection(DBusConnection *conn); | 
