aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-04-27 16:58:43 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-04-27 16:58:43 +0900
commitc308acfc6458cc565c06066942792af1b80f8ab6 (patch)
tree13ba5302fab59b0a9ef039503cdd219473cc1609
parent73ebb6fedd9a2013ced89f25e4b6d0ac05479471 (diff)
Bug Fix
enable to get async send from audiomanager Change-Id: If1c5be17e8bb03afb7642c748812cc40be78e691 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
-rw-r--r--src/audiomanager_proxy.c69
-rw-r--r--src/audiomanager_proxy.h24
-rw-r--r--src/soundmanager.c47
3 files changed, 78 insertions, 62 deletions
diff --git a/src/audiomanager_proxy.c b/src/audiomanager_proxy.c
index 2d7605b..3a80743 100644
--- a/src/audiomanager_proxy.c
+++ b/src/audiomanager_proxy.c
@@ -39,7 +39,7 @@ static void _on_new_main_connection(AudiomanagerCommandinterface* interface,
g_variant_get(
mainConnection,"(qqqnn)", &mcid, &srcid, &sinkid, &delay, &constate);
- _am_event.on_new_main_connection(NULL, mcid, srcid, sinkid, delay, constate);
+ _am_event.on_new_main_connection(mcid, srcid, sinkid, delay, constate);
}
static void _on_removed_main_connection(
@@ -47,28 +47,28 @@ static void _on_removed_main_connection(
{
AFB_DEBUG("%s is called",__FUNCTION__);
- _am_event.on_removed_main_connection(NULL, mainConnectionID);
+ _am_event.on_removed_main_connection(mainConnectionID);
}
static void _on_main_connection_state_changed(
AudiomanagerCommandinterface* interface, guint16 connectionID, gint16 connectionState)
{
AFB_DEBUG("%s is called",__FUNCTION__);
- _am_event.on_main_connection_state_changed(NULL, connectionID, connectionState);
+ _am_event.on_main_connection_state_changed(connectionID, connectionState);
}
static void _on_volume_changed(
AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 volume)
{
AFB_DEBUG("%s is called",__FUNCTION__);
- _am_event.on_volume_changed(NULL, sinkID, volume);
+ _am_event.on_volume_changed(sinkID, volume);
}
static void _on_sink_mute_state_changed(
AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 mute)
{
AFB_DEBUG("%s is called",__FUNCTION__);
- _am_event.on_sink_mute_state_changed(NULL, sinkID, mute);
+ _am_event.on_sink_mute_state_changed(sinkID, mute);
}
/*
@@ -78,14 +78,14 @@ static void _on_set_routing_ready(
AudiomanagerRoutinginterface* interface)
{
AFB_DEBUG("%s is called",__FUNCTION__);
- _am_event.on_set_routing_ready(NULL);
+ _am_event.on_set_routing_ready();
}
static void _on_set_routing_rundown(
AudiomanagerRoutinginterface* interface)
{
AFB_DEBUG("%s is called",__FUNCTION__);
- _am_event.on_set_routing_rundown(NULL);
+ _am_event.on_set_routing_rundown();
}
static ErrorCode check_send_error(GError *err, guint16 result){
@@ -108,7 +108,7 @@ static gboolean _on_async_abort(
guint16 arg_handle)
{
AFB_DEBUG( "%s called", __FUNCTION__);
- _am_instruction.on_async_abort(NULL, (int)arg_handle);
+ _am_instruction.on_async_abort((int)arg_handle);
return TRUE;
}
@@ -127,13 +127,8 @@ static gboolean _on_async_connect(
int source = (int)arg_sourceID;
int sink = (int)arg_sinkID;
int connection_format = (int)arg_connectionFormat;
-
- _am_instruction.on_async_connect(NULL, handle, connection,
+ _am_instruction.on_async_connect(handle, connection,
source, sink, connection_format);
-
- /* GError must be initialized here because it is same as grobal errno,
- so if afb_event_push is failed due to something, number will be changed */
-
int ack_ok = 0;
ErrorCode ec = am_proxy_ack_connect(handle, connection, ack_ok);
if(ec == UNABLE_SEND)
@@ -153,7 +148,7 @@ static gboolean _on_async_disconnect(
AFB_DEBUG( "%s called", __FUNCTION__);
int handle = (int)arg_handle;
int connection = (int)arg_connectionID;
- _am_instruction.on_async_disconnect(NULL, handle, connection);
+ _am_instruction.on_async_disconnect(handle, connection);
GError* err = NULL;
int ack_ok = 0;
@@ -206,7 +201,7 @@ static gboolean _on_async_set_source_state(
int source = (int)arg_sourceID;
int source_state = (int)arg_sourceState;
AFB_DEBUG( "%s called", __FUNCTION__);
- _am_instruction.on_async_set_source_state(NULL, handle, source, source_state);
+ _am_instruction.on_async_set_source_state(handle, source, source_state);
return TRUE;
}
@@ -628,32 +623,32 @@ void set_event_callback(const am_event* callback){
static void on_bus_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data){
GError* error = NULL;
AFB_DEBUG("%s is called", __FUNCTION__);
- am_instruction *callback = (am_instruction *)user_data;
+ //am_instruction *callback = (am_instruction *)user_data;
sm_adapter = audiomanager_routing_soundmanager_skeleton_new();
sm_itf = AUDIOMANAGER_ROUTING_SOUNDMANAGER_GET_IFACE(sm_adapter);
- _am_instruction.on_async_abort = callback->on_async_abort;
- _am_instruction.on_async_connect = callback->on_async_connect;
- _am_instruction.on_async_disconnect = callback->on_async_disconnect;
- _am_instruction.on_async_set_sink_volume = callback->on_async_set_sink_volume;
- _am_instruction.on_async_set_source_state = callback->on_async_set_source_state;
+ /* _am_instruction.on_async_abort = callback->on_async_abort;
+ _am_instruction.on_async_connect = callback->on_async_connect;
+ _am_instruction.on_async_disconnect = callback->on_async_disconnect;
+ _am_instruction.on_async_set_sink_volume = callback->on_async_set_sink_volume;
+ _am_instruction.on_async_set_source_state = callback->on_async_set_source_state; */
/* initialize sound manager adapter */
- sm_itf->handle_async_abort = _on_async_abort;
- sm_itf->handle_async_connect = _on_async_connect;
- sm_itf->handle_async_disconnect = _on_async_disconnect;
- sm_itf->handle_async_set_sink_volume = _on_async_set_sink_volume;
+ sm_itf->handle_async_abort = _on_async_abort;
+ sm_itf->handle_async_connect = _on_async_connect;
+ sm_itf->handle_async_disconnect = _on_async_disconnect;
+ sm_itf->handle_async_set_sink_volume = _on_async_set_sink_volume;
sm_itf->handle_async_set_source_state = _on_async_set_source_state;
int sigret = g_signal_connect(sm_adapter, "handle-async-abort", G_CALLBACK(_on_async_abort),NULL);
- sigret = g_signal_connect(sm_adapter, "handle-async-connect", G_CALLBACK(_on_async_connect),NULL);
- sigret = g_signal_connect(sm_adapter, "handle-async-disconnect", G_CALLBACK(_on_async_disconnect),NULL);
- sigret = g_signal_connect(sm_adapter, "handle-async-set-sink-volume", G_CALLBACK(_on_async_set_sink_volume),NULL);
- sigret = g_signal_connect(sm_adapter, "handle-async-set-source-state", G_CALLBACK(_on_async_set_source_state),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-connect", G_CALLBACK(_on_async_connect),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-disconnect", G_CALLBACK(_on_async_disconnect),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-set-sink-volume", G_CALLBACK(_on_async_set_sink_volume),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-set-source-state", G_CALLBACK(_on_async_set_source_state),NULL);
AFB_DEBUG("register %s", AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON(sm_adapter));
- guint id = g_dbus_connection_register_object(connection,
+ /* guint id = g_dbus_connection_register_object(connection,
SOUND_MANAGER_PATH,
audiomanager_routing_soundmanager_interface_info(),
NULL,
@@ -662,7 +657,7 @@ static void on_bus_acquired(GDBusConnection *connection, const gchar *name, gpoi
if(id < 1){
AFB_ERROR("Failed to register soundmanager: %s", error->message);
}
- AFB_DEBUG("register soundmanager path");
+ AFB_DEBUG("register soundmanager path"); */
gboolean rc = g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(sm_adapter), connection, SOUND_MANAGER_PATH, &error);
AFB_DEBUG("export soundmanager path result: %d", rc);
@@ -688,8 +683,14 @@ static void on_name_lost(GDBusConnection *connection, const gchar *name, gpointe
ErrorCode open_soundmanager_interface(const am_instruction *callback){
/* guint ret = g_bus_own_name_on_connection(G_BUS_TYPE_SYSTEM, SOUND_MANAGER_BUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE,
on_bus_acquired, on_name_acquired, on_name_lost, (gpointer)callback, NULL); */
- guint ret = g_bus_own_name(G_BUS_TYPE_SYSTEM, SOUND_MANAGER_BUS_NAME, G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT,
- on_bus_acquired, on_name_acquired, on_name_lost, (gpointer)callback, NULL);
+ _am_instruction.on_async_abort = callback->on_async_abort;
+ _am_instruction.on_async_connect = callback->on_async_connect;
+ _am_instruction.on_async_disconnect = callback->on_async_disconnect;
+ _am_instruction.on_async_set_sink_volume = callback->on_async_set_sink_volume;
+ _am_instruction.on_async_set_source_state = callback->on_async_set_source_state;
+
+ guint ret = g_bus_own_name(G_BUS_TYPE_SYSTEM, SOUND_MANAGER_BUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE,
+ on_bus_acquired, on_name_acquired, on_name_lost, NULL/* (gpointer)callback */, NULL);
// see https://developer.gnome.org/gio/stable/gio-Owning-Bus-Names.html#g-bus-own-name
AFB_DEBUG( "g_bus_own_name ret: %d", ret);
diff --git a/src/audiomanager_proxy.h b/src/audiomanager_proxy.h
index 49a6558..5a2427b 100644
--- a/src/audiomanager_proxy.h
+++ b/src/audiomanager_proxy.h
@@ -21,21 +21,21 @@
#include "sm-def.h"
typedef struct audiomanager_event{
- void (*on_new_main_connection)(void* closure, int connection, int source, int sink, int delay, int connection_state);
- void (*on_removed_main_connection)(void* closure, int connection);
- void (*on_main_connection_state_changed)(void* closure, int connection, int connection_state);
- void (*on_volume_changed)(void* closure, int sink, int volume);
- void (*on_sink_mute_state_changed)(void* closure, int sink, int mute);
- void (*on_set_routing_ready)(void* closure);
- void (*on_set_routing_rundown)(void* closure);
+ void (*on_new_main_connection)(int connection, int source, int sink, int delay, int connection_state);
+ void (*on_removed_main_connection)(int connection);
+ void (*on_main_connection_state_changed)(int connection, int connection_state);
+ void (*on_volume_changed)(int sink, int volume);
+ void (*on_sink_mute_state_changed)(int sink, int mute);
+ void (*on_set_routing_ready)(void);
+ void (*on_set_routing_rundown)(void);
} am_event;
typedef struct audiomanager_instruction{
- void (*on_async_abort)(void* closure, int handle);
- void (*on_async_connect)(void* closure, int handle, int connection, int source, int sink, int connection_format);
- void (*on_async_disconnect)(void* closure, int handle, int connection);
- void (*on_async_set_sink_volume)(void* closure, int handle, int sink, int volume, int ramp, int time);
- void (*on_async_set_source_state)(void* closure, int handle, int source, int source_state);
+ void (*on_async_abort)(int handle);
+ void (*on_async_connect)(int handle, int connection, int source, int sink, int connection_format);
+ void (*on_async_disconnect)(int handle, int connection);
+ void (*on_async_set_sink_volume)(int handle, int sink, int volume, int ramp, int time);
+ void (*on_async_set_source_state)(int handle, int source, int source_state);
} am_instruction;
struct domain_data{
diff --git a/src/soundmanager.c b/src/soundmanager.c
index 1e34ce6..0a8a093 100644
--- a/src/soundmanager.c
+++ b/src/soundmanager.c
@@ -838,7 +838,7 @@ void setStreamState(struct afb_req request){
********** Callback Function invoked by Audio Manager **********
*/
-static void on_new_main_connection(void* closure, int mainConnectioID,
+static void on_new_main_connection(int mainConnectioID,
int sourceID, int sinkID, int delay, int connectionState)
{
AFB_DEBUG("%s is called",__FUNCTION__);
@@ -850,20 +850,19 @@ static void on_new_main_connection(void* closure, int mainConnectioID,
KEY_SINK_ID, sinkID,
KEY_DELAY, delay,
KEY_CONNECTION_STATE, connectionState);
- afb_event_push(ev_new_connection, res_obj);
+ afb_event_push(ev_new_connection, res_obj);
}
-static void on_removed_main_connection(void* closure, int mainConnectionID)
+static void on_removed_main_connection(int mainConnectionID)
{
AFB_DEBUG("%s is called",__FUNCTION__);
struct json_object* res_obj = json_object_new_object();
- sm_add_object_to_json_object(res_obj, 2,
- KEY_MAIN_CONNECTION_ID, mainConnectionID);
+ json_object_object_add(res_obj, KEY_MAIN_CONNECTION_ID, json_object_new_int(mainConnectionID));
afb_event_push(ev_removed_main_connection, res_obj);
}
-static void on_main_connection_state_changed(void* closure, int connectionID, int connectionState)
+static void on_main_connection_state_changed(int connectionID, int connectionState)
{
AFB_DEBUG("%s is called",__FUNCTION__);
@@ -874,7 +873,7 @@ static void on_main_connection_state_changed(void* closure, int connectionID, in
afb_event_push(ev_main_connection_state_changed, res_obj);
}
-static void on_volume_changed(void* closure, int sinkID, int volume)
+static void on_volume_changed(int sinkID, int volume)
{
AFB_DEBUG("%s is called",__FUNCTION__);
struct json_object* res_obj = json_object_new_object();
@@ -884,7 +883,7 @@ static void on_volume_changed(void* closure, int sinkID, int volume)
afb_event_push(ev_volume_changed, res_obj);
}
-static void on_sink_mute_state_changed(void* closure, int sinkID, int mute)
+static void on_sink_mute_state_changed(int sinkID, int mute)
{
AFB_DEBUG("%s is called",__FUNCTION__);
struct json_object* res_obj = json_object_new_object();
@@ -897,13 +896,28 @@ static void on_sink_mute_state_changed(void* closure, int sinkID, int mute)
/*
********** Callback Function invoked by Audio Manager Routing Interface**********
*/
-static void on_set_routing_ready(void* closure)
+static void on_set_routing_ready(void)
{
AFB_DEBUG("%s is called",__FUNCTION__);
+ struct domain_data ddata = {
+ .domainID = DYNAMIC_DOMAIN_ID,
+ .name = "SoundManager",
+ .busname = SOUND_MANAGER_BUS_NAME,
+ .nodename = "soundmanager",
+ .early = FALSE,
+ .complete = TRUE,
+ .state = DS_CONTROLLED
+ };
+ ErrorCode ec = am_proxy_register_domain(create_domain_data(&ddata) , &SOUNDMANAGER_DOMAIN_ID);
+ if(!SEND_RESULT_NO_RESP(ec)){
+ AFB_WARNING("Failed to registerDomain when asyncAbort");
+ return;
+ }
+ AFB_NOTICE("Sound Manager re-register domain, the old infomation may be lost");
afb_event_push(ev_set_routing_ready, NULL);
}
-static void on_set_routing_rundown(void* closure)
+static void on_set_routing_rundown(void)
{
AFB_DEBUG("%s is called",__FUNCTION__);
afb_event_push(ev_set_routing_ready, NULL);
@@ -918,13 +932,13 @@ static void on_set_routing_rundown(void* closure)
* Sound Manager just sends ack to Audio Manager in charge of applications.
*
*/
-static void on_async_abort(void *closure, int handle)
+static void on_async_abort(int handle)
{
AFB_DEBUG( "%s called", __FUNCTION__);
/* Nothing To Do. If it is better to implement something, I will implement */
}
-static void on_async_connect(void *closure, int handle, int connectionID,
+static void on_async_connect(int handle, int connectionID,
int sourceID, int sinkID, int connectionFormat)
{
AFB_DEBUG( "%s called", __FUNCTION__);
@@ -939,7 +953,7 @@ static void on_async_connect(void *closure, int handle, int connectionID,
afb_event_push(ev_async_connect, ev_obj);
}
-static void on_async_disconnect(void *closure, int handle, int connectionID)
+static void on_async_disconnect(int handle, int connectionID)
{
AFB_DEBUG( "%s called", __FUNCTION__);
struct json_object* ev_obj = json_object_new_object();
@@ -949,13 +963,13 @@ static void on_async_disconnect(void *closure, int handle, int connectionID)
afb_event_push(ev_async_disconnect, ev_obj);
}
-static void on_async_set_sink_volume(void *closure, int handle, int sinkID,
+static void on_async_set_sink_volume(int handle, int sinkID,
int volume, int ramp, int time)
{
AFB_DEBUG( "%s called", __FUNCTION__);
}
-static void on_async_set_source_state(void *closure, int handle, int sourceID, int sourceState)
+static void on_async_set_source_state(int handle, int sourceID, int sourceState)
{
AFB_DEBUG( "%s called", __FUNCTION__);
struct pending* pd = get_pending(pending_list, sourceID);
@@ -1107,6 +1121,7 @@ int sm_init()
am_event callback = {
.on_new_main_connection = on_new_main_connection,
.on_removed_main_connection = on_removed_main_connection,
+ .on_main_connection_state_changed = on_main_connection_state_changed,
.on_volume_changed = on_volume_changed,
.on_sink_mute_state_changed = on_sink_mute_state_changed,
.on_set_routing_ready = on_set_routing_ready,
@@ -1122,7 +1137,7 @@ int sm_init()
.on_async_set_sink_volume = on_async_set_sink_volume,
.on_async_set_source_state = on_async_set_source_state
};
- ec = open_soundmanager_interface(&instruction);
+ ec = open_soundmanager_interface(&instruction);
if(ec != OK){
AFB_ERROR("Failed to create sound manager interface");
return -1;