diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2006-02-14 07:37:57 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2006-02-14 07:37:57 +0000 | 
| commit | 4009a83023b266dd0cfa3fd5b9cba7d02dae944a (patch) | |
| tree | 32e96c5714a98fab5f575a6cb171e42c01e6e135 | |
| parent | 7bfc46464d3c9c68bb0718d07f0d95764afb8c3b (diff) | |
Change parameter for mode selection to string
| -rw-r--r-- | hcid/dbus-device.c | 68 | ||||
| -rw-r--r-- | hcid/dbus.c | 4 | ||||
| -rw-r--r-- | hcid/dbus.h | 11 | 
3 files changed, 51 insertions, 32 deletions
| diff --git a/hcid/dbus-device.c b/hcid/dbus-device.c index 6416eec2..94bb8091 100644 --- a/hcid/dbus-device.c +++ b/hcid/dbus-device.c @@ -257,7 +257,7 @@ static DBusMessage* handle_dev_get_mode_req(DBusMessage *msg, void *data)  	const struct hci_dbus_data *dbus_data = data;  	DBusMessage *reply = NULL;  	const uint8_t hci_mode = dbus_data->path_data; -	uint8_t scan_mode; +	const char *scan_mode;  	switch (hci_mode) {  	case SCAN_DISABLED: @@ -270,16 +270,15 @@ static DBusMessage* handle_dev_get_mode_req(DBusMessage *msg, void *data)  		scan_mode = MODE_DISCOVERABLE;  		break;  	case SCAN_INQUIRY: -	/* inquiry scan mode is not handled, return 0xff */ +	/* inquiry scan mode is not handled, return unknown */  	default:  		/* reserved */ -		scan_mode = 0xff; +		scan_mode = MODE_UNKNOWN;  	}  	reply = dbus_message_new_method_return(msg); -	dbus_message_append_args(reply, -					DBUS_TYPE_BYTE, &scan_mode, +	dbus_message_append_args(reply, DBUS_TYPE_STRING, &scan_mode,  					DBUS_TYPE_INVALID);  	return reply; @@ -287,14 +286,38 @@ static DBusMessage* handle_dev_get_mode_req(DBusMessage *msg, void *data)  static DBusMessage* handle_dev_is_connectable_req(DBusMessage *msg, void *data)  { -	/*FIXME: */ -	return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NOT_IMPLEMENTED); +	const struct hci_dbus_data *dbus_data = data; +	DBusMessage *reply = NULL; +	const uint8_t hci_mode = dbus_data->path_data; +	dbus_bool_t connectable = FALSE; + +	if (hci_mode & SCAN_PAGE) +		connectable = TRUE; + +	reply = dbus_message_new_method_return(msg); + +	dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &connectable, +					DBUS_TYPE_INVALID); + +	return reply;  }  static DBusMessage* handle_dev_is_discoverable_req(DBusMessage *msg, void *data)  { -	/*FIXME: */ -	return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NOT_IMPLEMENTED); +	const struct hci_dbus_data *dbus_data = data; +	DBusMessage *reply = NULL; +	const uint8_t hci_mode = dbus_data->path_data; +	dbus_bool_t discoverable = FALSE; + +	if (hci_mode & SCAN_INQUIRY) +		discoverable = TRUE; + +	reply = dbus_message_new_method_return(msg); + +	dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &discoverable, +					DBUS_TYPE_INVALID); + +	return reply;  }  static DBusMessage* handle_dev_set_class_req(DBusMessage *msg, void *data) @@ -315,36 +338,31 @@ static DBusMessage* handle_dev_set_mode_req(DBusMessage *msg, void *data)  	DBusMessage *reply = NULL;  	struct hci_request rq;  	int dd = -1; -	const uint8_t scan_mode; +	const char* scan_mode;  	uint8_t hci_mode;  	uint8_t status = 0;  	const uint8_t current_mode = dbus_data->path_data;  	dbus_message_get_args(msg, NULL, -					DBUS_TYPE_BYTE, &scan_mode, +					DBUS_TYPE_STRING, &scan_mode,  					DBUS_TYPE_INVALID); -	switch (scan_mode) { -	case MODE_OFF: +	if (!scan_mode) +		return bluez_new_failure_msg(msg, BLUEZ_EDBUS_WRONG_PARAM); + +	if (strcasecmp(MODE_OFF, scan_mode) == 0)  		hci_mode = SCAN_DISABLED; -		break; -	case MODE_CONNECTABLE: +	else if (strcasecmp(MODE_CONNECTABLE, scan_mode) == 0)  		hci_mode = SCAN_PAGE; -		break; -	case MODE_DISCOVERABLE: +	else if (strcasecmp(MODE_DISCOVERABLE, scan_mode) == 0)  		hci_mode = (SCAN_PAGE | SCAN_INQUIRY); -		break; -	default: -		/* invalid mode */ -		reply = bluez_new_failure_msg(msg, BLUEZ_EDBUS_WRONG_PARAM); -		goto failed; -	} +	else +		return bluez_new_failure_msg(msg, BLUEZ_EDBUS_WRONG_PARAM);  	dd = hci_open_dev(dbus_data->dev_id);  	if (dd < 0) {  		syslog(LOG_ERR, "HCI device open failed: hci%d", dbus_data->dev_id); -		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV); -		goto failed; +		return bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV);  	}  	/* Check if the new requested mode is different from the current */ diff --git a/hcid/dbus.c b/hcid/dbus.c index fadc98d8..ad5b549d 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -1054,7 +1054,7 @@ void hcid_dbus_setscan_enable_complete(bdaddr_t *local)  	struct hci_request rq;  	int id;  	int dd = -1; -	uint8_t scan_mode; +	const char *scan_mode;  	baswap(&tmp, local); local_addr = batostr(&tmp);  	id = hci_devid(local_addr); @@ -1123,7 +1123,7 @@ void hcid_dbus_setscan_enable_complete(bdaddr_t *local)  	}  	dbus_message_append_args(message, -					DBUS_TYPE_BYTE, &scan_mode, +					DBUS_TYPE_STRING, &scan_mode,  					DBUS_TYPE_INVALID);  	if (dbus_connection_send(connection, message, NULL) == FALSE) { diff --git a/hcid/dbus.h b/hcid/dbus.h index 373976dc..bbbb3d0a 100644 --- a/hcid/dbus.h +++ b/hcid/dbus.h @@ -206,17 +206,18 @@ int get_default_dev_id(void);  #define DEV_SIG_DISCOVER_COMPLETE	"DiscoverComplete"  #define DEV_SIG_DISCOVER_RESULT		"DiscoverResult" -/* FIXME: Change to string +/*   * Scanning modes, used by DEV_SET_MODE   * off: remote devices are not allowed to find or connect to this device   * connectable: remote devices are allowed to connect, but they are not   *              allowed to find it.   * discoverable: remote devices are allowed to connect and find this device + * unknown: reserved to not allowed/future modes   */ -#define MODE_OFF		0x00	 -#define MODE_CONNECTABLE	0x01	 -#define MODE_DISCOVERABLE	0x02	 - +#define MODE_OFF		"off" +#define MODE_CONNECTABLE	"connectable" +#define MODE_DISCOVERABLE	"discoverable" +#define MODE_UNKNOWN		"unknown"  /* BLUEZ_DBUS_ERROR    * EFailed error messages signature is : su | 
