#define PA_STREAM_MANAGER_METHOD_NAME_SET_STREAM_ROUTE_DEVICES "SetStreamRouteDevices"
#define PA_STREAM_MANAGER_METHOD_NAME_SET_STREAM_ROUTE_OPTION "SetStreamRouteOption"
#define PA_STREAM_MANAGER_METHOD_NAME_SET_STREAM_PREFERRED_DEVICE "SetStreamPreferredDevice"
+#define PA_STREAM_MANAGER_METHOD_NAME_GET_STREAM_PREFERRED_DEVICE "GetStreamPreferredDevice"
#define PA_STREAM_MANAGER_METHOD_NAME_GET_VOLUME_MAX_LEVEL "GetVolumeMaxLevel"
#define PA_STREAM_MANAGER_METHOD_NAME_GET_VOLUME_LEVEL "GetVolumeLevel"
#define PA_STREAM_MANAGER_METHOD_NAME_SET_VOLUME_LEVEL "SetVolumeLevel"
int _get_preferred_device(sound_stream_info_s *stream_info, int *in_device_id, int *out_device_id)
{
+ int ret = MM_ERROR_NONE;
+ GDBusConnection *conn = NULL;
+ GError *err = NULL;
+ GVariant *result = NULL;
+ const gchar *dbus_ret = NULL;
+ unsigned int _in_device_id;
+ unsigned int _out_device_id;
+
SM_INSTANCE_CHECK_FOR_PRIV(stream_info);
- if (in_device_id) {
- *in_device_id = stream_info->preferred_device_info.in;
- LOGI("preferred device id[in:%d]", *in_device_id);
+ if ((ret = __get_dbus_connection(&conn)))
+ return ret;
+
+ result = g_dbus_connection_call_sync(conn,
+ PA_BUS_NAME,
+ PA_STREAM_MANAGER_OBJECT_PATH,
+ PA_STREAM_MANAGER_INTERFACE,
+ PA_STREAM_MANAGER_METHOD_NAME_GET_STREAM_PREFERRED_DEVICE,
+ g_variant_new("(u)", stream_info->pa_info.index),
+ G_VARIANT_TYPE("(uus)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ 1000,
+ NULL,
+ &err);
+ if (!result || err) {
+ LOGE("g_dbus_connection_call_sync() for GET_STREAM_PREFERRED_DEVICE error");
+ ret = _convert_dbus_error(err ? err->message : NULL);
+ if (err)
+ g_error_free(err);
+ goto LEAVE;
}
- if (out_device_id) {
- *out_device_id = stream_info->preferred_device_info.out;
- LOGI("preferred device id[out:%d]", *out_device_id);
+
+ g_variant_get(result, "(uu&s)", &_in_device_id, &_out_device_id, &dbus_ret);
+
+ LOGI("dbus return value is (%s)", dbus_ret);
+
+ if (!strncmp("STREAM_MANAGER_RETURN_OK", dbus_ret, strlen(dbus_ret))) {
+ if (in_device_id) {
+ if (stream_info->preferred_device_info.in != _in_device_id) {
+ LOGE("mismatching id [prev: %d, curr: %d]", stream_info->preferred_device_info.in, _in_device_id);
+ ret = MM_ERROR_SOUND_INTERNAL;
+ } else {
+ *in_device_id = _in_device_id;
+ LOGI("preferred device id[in:%d]", *in_device_id);
+ }
+ }
+ if (out_device_id) {
+ if (stream_info->preferred_device_info.out != _out_device_id) {
+ LOGE("mismatching id [prev: %d, curr: %d]", stream_info->preferred_device_info.out, _out_device_id);
+ ret = MM_ERROR_SOUND_INTERNAL;
+ } else {
+ *out_device_id = _out_device_id;
+ LOGI("preferred device id[out:%d]", *out_device_id);
+ }
+ }
+ } else {
+ ret = MM_ERROR_SOUND_INTERNAL;
}
- return MM_ERROR_NONE;
+LEAVE:
+ g_variant_unref(result);
+ g_object_unref(conn);
+
+ return ret;
}
//LCOV_EXCL_STOP
\ No newline at end of file