1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "amhelper.h"
2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <mixlog.h>
3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
4bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic DBusGConnection *connection;
5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
6bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic DBusGProxy *proxy_lpe = NULL;
7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
8bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic gboolean am_enable=FALSE;
9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Connect to am dbus server
11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * return -1 means failed
12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * return 0 means succeeded
13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * */
14bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint dbus_init() {
15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    GError *error;
16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    const char *name = "org.moblin.audiomanager";
17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    const char *path_lpe = "/org/moblin/audiomanager/lpe";
19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    const char *interface_lpe = "org.moblin.audiomanager.lpe";
20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    const gchar* env  = g_getenv("MIX_AM");
22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    if (env && env[0] == '1') {
23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	am_enable = TRUE;
24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    else
26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	am_enable = FALSE;
27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    if (am_enable) {
29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    error = NULL;
30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    if (connection == NULL) {
33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to open connection to bus: %s\n",
34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		            error->message);
35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		g_error_free(error);
36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		return -1;
37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    }
38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully get a dbus connection\n");
39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    proxy_lpe = dbus_g_proxy_new_for_name(connection, name,
41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		                            path_lpe, interface_lpe);
42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    if (proxy_lpe == NULL) {
43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "Failed to connect to AM dbus server\n");
44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		return -1;
45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    }
46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    else {
47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    	mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_VERBOSE, "Successfully connected to AM dbus\npath: %s\ninterface: %s\n",
48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			path_lpe, interface_lpe);
49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	    }
50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    return 0;
52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
54bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_register(guint32 lpe_stream_id, char* media_role, char* lpe_stream_name, guint32 stream_type)
55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  GError *error;
57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  gint32 s_output = 0;
58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  error = NULL;
59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  if (am_enable) {
61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "lpe_stream_id: %d\n", lpe_stream_id);
62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  if (lpe_stream_id == 0) {
64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		return 0;
65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  }
66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamRegister", &error, G_TYPE_UINT,
67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		lpe_stream_id, G_TYPE_STRING, media_role, G_TYPE_STRING, lpe_stream_name, G_TYPE_UINT, stream_type,
68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)) {
69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamRegister failed: %s\n", error->message);
70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                g_error_free(error);
71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		return s_output;
72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  }
73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "LPEStreamRegister returned am stream id %d\n", s_output);
75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  }
76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  return s_output;
78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
80bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_unregister(guint32 am_stream_id)
81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  GError *error;
83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  gint32 s_output = 0;
84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  if (am_enable) {
86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  error = NULL;
87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  if(!dbus_g_proxy_call (proxy_lpe, "LPEStreamUnregister", &error, G_TYPE_UINT, am_stream_id,
88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID)){
89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_WARNING, "LPEStreamUnregister failed: %s\n", error->message);
90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		g_error_free(error);
91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		return s_output;
92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	  }
93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  }
94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  return s_output;
95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
97bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_notify_pause(guint32 stream_id)
98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  GError *error;
100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  gint32 s_output=0;
101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  if (am_enable) {
103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyPause", &error, G_TYPE_UINT, stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID);
104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  }
105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  return s_output;
107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
109bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegint32 lpe_stream_notify_resume(guint32 stream_id)
110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{
111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  GError *error;
112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  gint32 s_output=0;
113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  if (am_enable) {
115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    dbus_g_proxy_call (proxy_lpe, "LPEStreamNotifyResume", &error, G_TYPE_UINT, stream_id, G_TYPE_INVALID, G_TYPE_INT, &s_output, G_TYPE_INVALID);
116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  }
117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee  return s_output;
119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
121