diff options
| -rw-r--r-- | audio/headset.c | 16 | ||||
| -rw-r--r-- | audio/headset.h | 2 | ||||
| -rw-r--r-- | audio/manager.c | 49 | 
3 files changed, 47 insertions, 20 deletions
| diff --git a/audio/headset.c b/audio/headset.c index edd59b4b..dbebf67c 100644 --- a/audio/headset.c +++ b/audio/headset.c @@ -1202,20 +1202,14 @@ static DBusHandlerResult hs_is_connected(DBusConnection *conn, DBusMessage *msg,  						void *data)  {  	audio_device_t *device = data; -	struct headset *hs = device->headset;  	DBusMessage *reply;  	dbus_bool_t connected; -	assert(hs); -  	reply = dbus_message_new_method_return(msg);  	if (!reply)  		return DBUS_HANDLER_RESULT_NEED_MEMORY; -	if (hs->state >= HEADSET_STATE_CONNECTED) -		connected = TRUE; -	else -		connected = FALSE; +	connected = headset_is_connected(device->headset);  	dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &connected,  					DBUS_TYPE_INVALID); @@ -1746,6 +1740,14 @@ static GIOChannel *server_socket(uint8_t *channel)  	return io;  } +gboolean headset_is_connected(headset_t *headset) +{ +	if (headset->state >= HEADSET_STATE_CONNECTED) +		return TRUE; +	else +		return FALSE; +} +  int headset_server_init(DBusConnection *conn)  {  	uint8_t chan = DEFAULT_HS_AG_CHANNEL; diff --git a/audio/headset.h b/audio/headset.h index b06f1c60..06ee8483 100644 --- a/audio/headset.h +++ b/audio/headset.h @@ -33,6 +33,8 @@ typedef struct headset headset_t;  headset_t *headset_init(const char *path); +gboolean headset_is_connected(headset_t *headset); +  int headset_server_init(DBusConnection *conn);  void headset_exit(void); diff --git a/audio/manager.c b/audio/manager.c index 2d4d22a0..d2f89529 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -148,8 +148,40 @@ static DBusHandlerResult device_get_address(DBusConnection *conn, DBusMessage *m  	return send_message_and_unref(conn, reply);  } +static DBusHandlerResult device_get_connected(DBusConnection *conn, +						DBusMessage *msg, +						void *data) +{ +	DBusMessageIter iter, array_iter; +	audio_device_t *device = data; +	DBusMessage *reply; +	const char *iface; + +	reply = dbus_message_new_method_return(msg); +	if (!reply) +		return DBUS_HANDLER_RESULT_NEED_MEMORY; + +	dbus_message_iter_init_append(reply, &iter); + +	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, +				DBUS_TYPE_STRING_AS_STRING, &array_iter); + +	if (device->headset && headset_is_connected(device->headset)) { +		iface = AUDIO_HEADSET_INTERFACE; +		dbus_message_iter_append_basic(&array_iter, +						DBUS_TYPE_STRING, &iface); +	} + +	dbus_message_iter_close_container(&iter, &array_iter); + +	return send_message_and_unref(conn, reply); +} +  static DBusMethodVTable device_methods[] = { -	{ "GetAddress",	device_get_address,	"",	"s"	}, +	{ "GetAddress",			device_get_address, +		"",	"s"	}, +	{ "GetConnectedInterfaces",	device_get_connected, +		"",	"s"	},  	{ NULL, NULL, NULL, NULL }  }; @@ -301,13 +333,6 @@ static DBusHandlerResult am_list_devices(DBusConnection *conn,  	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;  } -static DBusHandlerResult am_connected_devices(DBusConnection *conn, -						DBusMessage *msg, -						void *data) -{ -	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} -  static DBusHandlerResult am_create_headset(DBusConnection *conn, DBusMessage *msg,  						void *data)  { @@ -536,13 +561,11 @@ static DBusHandlerResult am_change_default_headset(DBusConnection *conn, DBusMes  static DBusMethodVTable manager_methods[] = {  	{ "CreateDevice",		am_create_device, -		"s",	"sas"		}, +		"s",	"s"		},  	{ "RemoveDevice",		am_remove_device,  		"s",	""		},  	{ "ListDevices",		am_list_devices, -		"",	"a(sas)"	}, -	{ "GetConnectedDevices",	am_connected_devices, -		"",	"a(sas)"	},	 +		"",	"as"	},  	{ "CreateHeadset",		am_create_headset,  		"s",	"s"		},  	{ "RemoveHeadset",		am_remove_headset, @@ -557,7 +580,7 @@ static DBusMethodVTable manager_methods[] = {  };  static DBusSignalVTable manager_signals[] = { -	{ "DeviceCreated",		"sas"	}, +	{ "DeviceCreated",		"s"	},  	{ "DeviceRemoved",		"s"	},  	{ "HeadsetCreated",		"s"	},  	{ "HeadsetRemoved",		"s"	}, | 
