diff options
author | 2018-04-27 16:58:43 +0900 | |
---|---|---|
committer | 2018-04-27 16:58:43 +0900 | |
commit | c308acfc6458cc565c06066942792af1b80f8ab6 (patch) | |
tree | 13ba5302fab59b0a9ef039503cdd219473cc1609 | |
parent | 73ebb6fedd9a2013ced89f25e4b6d0ac05479471 (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.c | 69 | ||||
-rw-r--r-- | src/audiomanager_proxy.h | 24 | ||||
-rw-r--r-- | src/soundmanager.c | 47 |
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; |