#include <gio/gio.h>
-static GList *g_subscribe_cb_list = NULL;
static pthread_mutex_t g_subscribe_cb_list_mutex = PTHREAD_MUTEX_INITIALIZER;
#define MM_SOUND_DBUS_BUS_NAME_PREPIX "org.tizen.MMSound"
#define MM_SOUND_DBUS_OBJECT_PATH "/org/tizen/MMSound"
#define MM_SOUND_DBUS_INTERFACE "org.tizen.mmsound"
-GDBusConnection *g_dbus_conn_mmsound;
-
-int g_dbus_signal_values[MM_SOUND_SIGNAL_MAX] = {0,};
-
-const char* dbus_signal_name_str[] = {
+static GDBusConnection *g_dbus_conn_mmsound;
+static int g_dbus_signal_values[MM_SOUND_SIGNAL_MAX] = {0,};
+static const char* dbus_signal_name_str[] = {
"ReleaseInternalFocus",
};
}
EXPORT_API
-int mm_sound_subscribe_signal(mm_sound_signal_name_t signal, unsigned int *subscribe_id, mm_sound_signal_callback callback, void *user_data)
+int mm_sound_subscribe_signal(mm_sound_signal_name_t signal_type, unsigned int *subscribe_id,
+ mm_sound_signal_callback callback, void *user_data)
{
int ret = MM_ERROR_NONE;
GError *err = NULL;
-
+ guint subs_id;
subscribe_cb_t *subscribe_cb = NULL;
debug_fenter();
MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL);
- if (signal < 0 || signal >= MM_SOUND_SIGNAL_MAX || !subscribe_id) {
- debug_error ("invalid argument, signal(%d), subscribe_id(0x%p)", signal, subscribe_id);
+ if (signal_type < 0 || signal_type >= MM_SOUND_SIGNAL_MAX || !subscribe_id) {
+ debug_error ("invalid argument, signal(%d), subscribe_id(%p)", signal_type, subscribe_id);
ret = MM_ERROR_INVALID_ARGUMENT;
goto error;
}
goto error;
}
memset(subscribe_cb, 0, sizeof(subscribe_cb_t));
+ subscribe_cb->signal_type = signal_type;
+ subscribe_cb->callback = callback;
+ subscribe_cb->user_data = user_data;
g_dbus_conn_mmsound = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
if (!g_dbus_conn_mmsound && err) {
ret = MM_ERROR_SOUND_INTERNAL;
goto error;
}
-
- subscribe_cb->signal_type = signal;
- subscribe_cb->callback = callback;
- subscribe_cb->user_data = user_data;
-
- *subscribe_id = g_dbus_connection_signal_subscribe(g_dbus_conn_mmsound,
- NULL, MM_SOUND_DBUS_INTERFACE, dbus_signal_name_str[signal], MM_SOUND_DBUS_OBJECT_PATH, NULL, 0,
- signal_callback, subscribe_cb, NULL);
- if (*subscribe_id == 0) {
- debug_error ("g_dbus_connection_signal_subscribe() error (%d)", *subscribe_id);
- ret = MM_ERROR_SOUND_INTERNAL;
- goto sig_error;
- }
-
- subscribe_cb->id = *subscribe_id;
-
- g_subscribe_cb_list = g_list_append(g_subscribe_cb_list, subscribe_cb);
- if (g_subscribe_cb_list) {
- debug_log("new subscribe_cb(0x%x)[user_callback(0x%x), subscribe_id(%u)] is added\n", subscribe_cb, subscribe_cb->callback, subscribe_cb->id);
- } else {
- debug_error("g_list_append failed\n");
+ subs_id = g_dbus_connection_signal_subscribe(g_dbus_conn_mmsound, NULL, MM_SOUND_DBUS_INTERFACE,
+ dbus_signal_name_str[signal_type], MM_SOUND_DBUS_OBJECT_PATH,
+ NULL, G_DBUS_SIGNAL_FLAGS_NONE, signal_callback,
+ subscribe_cb, free);
+ if (subs_id == 0) {
+ debug_error ("g_dbus_connection_signal_subscribe() error (%d)", subs_id);
ret = MM_ERROR_SOUND_INTERNAL;
+ g_object_unref(g_dbus_conn_mmsound);
goto error;
}
+ subscribe_cb->id = subs_id;
+ *subscribe_id = subs_id;
MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex);
return ret;
-sig_error:
- g_dbus_connection_signal_unsubscribe(g_dbus_conn_mmsound, *subscribe_id);
- g_object_unref(g_dbus_conn_mmsound);
-
error:
if (subscribe_cb)
- free (subscribe_cb);
+ free(subscribe_cb);
MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex);
return ret;
}
+/* ToDo : Almost same as mm_sound_subscribe_signal, need to be merged */
EXPORT_API
-int mm_sound_subscribe_signal_for_daemon(mm_sound_signal_name_t signal, int client_pid, unsigned int *subscribe_id, mm_sound_signal_callback callback, void *user_data)
+int mm_sound_subscribe_signal_for_daemon(mm_sound_signal_name_t signal_type, int client_pid, unsigned int *subscribe_id,
+ mm_sound_signal_callback callback, void *user_data)
{
int ret = MM_ERROR_NONE;
GError *err = NULL;
-
+ guint subs_id;
subscribe_cb_t *subscribe_cb = NULL;
debug_fenter();
MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL);
- if (signal < 0 || signal >= MM_SOUND_SIGNAL_MAX || !client_pid || !subscribe_id) {
- debug_error ("invalid argument, signal(%d), client_pid(%d), subscribe_id(0x%p)", signal, client_pid, subscribe_id);
+ if (signal_type < 0 || signal_type >= MM_SOUND_SIGNAL_MAX || !client_pid || !subscribe_id) {
+ debug_error ("invalid argument, signal(%d), client_pid(%d), subscribe_id(%p)", signal_type, client_pid, subscribe_id);
ret = MM_ERROR_INVALID_ARGUMENT;
goto error;
}
goto error;
}
memset(subscribe_cb, 0, sizeof(subscribe_cb_t));
+ subscribe_cb->signal_type = signal_type;
+ subscribe_cb->callback = callback;
+ subscribe_cb->user_data = user_data;
+ subscribe_cb->client_pid = client_pid;
g_dbus_conn_mmsound = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
if (!g_dbus_conn_mmsound && err) {
ret = MM_ERROR_SOUND_INTERNAL;
goto error;
}
-
- subscribe_cb->signal_type = signal;
- subscribe_cb->callback = callback;
- subscribe_cb->user_data = user_data;
- subscribe_cb->client_pid = client_pid;
-
- *subscribe_id = g_dbus_connection_signal_subscribe(g_dbus_conn_mmsound,
- NULL, MM_SOUND_DBUS_INTERFACE, dbus_signal_name_str[signal], MM_SOUND_DBUS_OBJECT_PATH, NULL, 0,
- signal_callback, subscribe_cb, NULL);
- if (*subscribe_id == 0) {
- debug_error ("g_dbus_connection_signal_subscribe() error (%d)", *subscribe_id);
- ret = MM_ERROR_SOUND_INTERNAL;
- goto sig_error;
- }
-
- subscribe_cb->id = *subscribe_id;
-
- g_subscribe_cb_list = g_list_append(g_subscribe_cb_list, subscribe_cb);
- if (g_subscribe_cb_list) {
- debug_log("new subscribe_cb(0x%x)[user_callback(0x%x), subscribe_id(%u)] is added\n", subscribe_cb, subscribe_cb->callback, subscribe_cb->id);
- } else {
- debug_error("g_list_append failed\n");
+ subs_id = g_dbus_connection_signal_subscribe(g_dbus_conn_mmsound, NULL, MM_SOUND_DBUS_INTERFACE,
+ dbus_signal_name_str[signal_type], MM_SOUND_DBUS_OBJECT_PATH,
+ NULL, G_DBUS_SIGNAL_FLAGS_NONE, signal_callback,
+ subscribe_cb, free);
+ if (subs_id == 0) {
+ debug_error ("g_dbus_connection_signal_subscribe() error (%d)", subs_id);
ret = MM_ERROR_SOUND_INTERNAL;
+ g_object_unref(g_dbus_conn_mmsound);
goto error;
}
+ subscribe_cb->id = subs_id;
+ *subscribe_id = subs_id;
MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex);
return ret;
-sig_error:
- g_dbus_connection_signal_unsubscribe(g_dbus_conn_mmsound, *subscribe_id);
- g_object_unref(g_dbus_conn_mmsound);
-
error:
if (subscribe_cb)
- free (subscribe_cb);
+ free(subscribe_cb);
MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex);
EXPORT_API
void mm_sound_unsubscribe_signal(unsigned int subscribe_id)
{
- GList *list = NULL;
subscribe_cb_t *subscribe_cb = NULL;
debug_fenter();
if (g_dbus_conn_mmsound && subscribe_id) {
g_dbus_connection_signal_unsubscribe(g_dbus_conn_mmsound, subscribe_id);
g_object_unref(g_dbus_conn_mmsound);
- for (list = g_subscribe_cb_list; list != NULL; list = list->next) {
- subscribe_cb = (subscribe_cb_t *)list->data;
- if (subscribe_cb && (subscribe_cb->id == subscribe_id)) {
- g_subscribe_cb_list = g_list_remove(g_subscribe_cb_list, subscribe_cb);
- debug_log("subscribe_cb(0x%x) is removed\n", subscribe_cb);
- free (subscribe_cb);
- }
- }
}
MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex);
}
EXPORT_API
-int mm_sound_send_signal(mm_sound_signal_name_t signal, int value)
+int mm_sound_send_signal(mm_sound_signal_name_t signal_type, int value)
{
int ret = MM_ERROR_NONE;
GError *err = NULL;
MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL);
- if (signal < 0 || signal >= MM_SOUND_SIGNAL_MAX) {
- debug_error ("invalid argument, signal(%d)", signal);
+ if (signal_type < 0 || signal_type >= MM_SOUND_SIGNAL_MAX) {
+ debug_error ("invalid argument, signal(%d)", signal_type);
ret = MM_ERROR_INVALID_ARGUMENT;
goto error;
}
goto error;
}
- g_dbus_signal_values[signal] = value;
- if (signal == MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS) {
+ g_dbus_signal_values[signal_type] = value;
+ if (signal_type == MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS) {
/* Trigger the signal callback when it comes from the same process.
* |<-- pid (16bits) -->|<-- value (16bits) -->|,
* FYI, #define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000). */
debug_error ("failed to _mm_session_util_write_information for MM_SESSION_TYPE_REPLACED_BY_STREAM");
}
dbus_ret = g_dbus_connection_emit_signal (conn,
- NULL, MM_SOUND_DBUS_OBJECT_PATH, MM_SOUND_DBUS_INTERFACE, dbus_signal_name_str[signal],
+ NULL, MM_SOUND_DBUS_OBJECT_PATH, MM_SOUND_DBUS_INTERFACE, dbus_signal_name_str[signal_type],
g_variant_new ("(i)", value),
&err);
if (!dbus_ret && err) {
}
g_object_unref(conn);
- debug_msg ("sending signal[%s], value[%d] success", dbus_signal_name_str[signal], value);
+ debug_msg ("sending signal[%s], value[%d] success", dbus_signal_name_str[signal_type], value);
MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex);
}
EXPORT_API
-int mm_sound_get_signal_value(mm_sound_signal_name_t signal, int *value)
+int mm_sound_get_signal_value(mm_sound_signal_name_t signal_type, int *value)
{
int ret = MM_ERROR_NONE;
MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL);
- *value = g_dbus_signal_values[signal];
+ *value = g_dbus_signal_values[signal_type];
MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex);