diff options
Diffstat (limited to 'PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp')
-rw-r--r-- | PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp | 95 |
1 files changed, 38 insertions, 57 deletions
diff --git a/PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp b/PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp index 4810d89..bdfbdd4 100644 --- a/PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp +++ b/PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp @@ -52,19 +52,22 @@ static SignalTable manager_signals[] = { { "", ""} }; +static DBusObjectPathVTable _vtable = +{ + NULL,AudioManagerInterface::receive_callback,NULL, NULL, NULL, NULL +}; + + -AudioManagerInterface::AudioManagerInterface(RoutingReceiveInterface* r_interface) : m_audioman(r_interface),m_running(false) { +AudioManagerInterface::AudioManagerInterface(RoutingReceiveInterface* r_interface, dbusRoothandler* roothandler) : m_audioman(r_interface),m_Introspection(new DBUSIntrospection(manager_methods, manager_signals,std::string(MY_NODE))),m_roothandler(roothandler) { } bool AudioManagerInterface::startup_interface() { DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("Starting up dbus connector")); - g_pDbusMessage = new DBUSMessageHandler(); - DLT_LOG(DBusPlugin,DLT_LOG_INFO, DLT_STRING("create thread")); - this->m_running = true; - pthread_create(&m_currentThread, NULL, AudioManagerInterface::run, this); - DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("Started dbus connector")); + g_pDbusMessage = new DBUSMessageHandler(&_vtable,m_roothandler->returnConnection(),this); + return true; } @@ -72,8 +75,6 @@ void AudioManagerInterface::stop() { DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("Stopped dbus connector")); - this->m_running = false; - pthread_join(m_currentThread, NULL); delete g_pDbusMessage; } @@ -118,7 +119,7 @@ void AudioManagerInterface::registerDomain(DBusConnection* conn, DBusMessage* ms char* name = g_pDbusMessage->getString(); char* node = g_pDbusMessage->getString(); bool earlymode = g_pDbusMessage->getString(); - domain_t domain=m_audioman->registerDomain(name, busname, node, earlymode); + domain_t domain=m_reference->m_audioman->registerDomain(name, busname, node, earlymode); g_pDbusMessage->initReply(msg); g_pDbusMessage->appendUInt(domain); g_pDbusMessage->closeReply(); @@ -140,57 +141,37 @@ void AudioManagerInterface::registerGateway(DBusConnection* conn, DBusMessage* m emit_systemReady(); } void AudioManagerInterface::emit_systemReady() { - DBusMessage* msg; - DBusConnection* conn = g_pDbusMessage->getConnection(); - dbus_uint32_t serial = 0; - msg =dbus_message_new_signal("/org/genivi/audiomanager/RoutingInterface",DBUS_SERVICE_PREFIX,"signal_systemReady"); - if (!dbus_connection_send(conn, msg, &serial)) { - DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("error while sending signal system ready on dbus")); - } - dbus_connection_flush(conn); + g_pDbusMessage->sendSignal("signal_systemReady"); } -void* AudioManagerInterface::run(void * arg) -{ - DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("Main loop running")); - m_reference = (AudioManagerInterface*) arg; - DBusMessage* msg = 0; - DBusConnection* conn = g_pDbusMessage->getConnection(); - while (m_reference->m_running && dbus_connection_read_write_dispatch(conn, -1)) - { - msg = dbus_connection_pop_message(conn); - DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("message received")); - - const char *member = dbus_message_get_member(msg); - const char *iface = dbus_message_get_interface(msg); - bool found=false; - int i = 0; - - if (dbus_message_is_method_call(msg, DBUS_INTERFACE_INTROSPECTABLE, "Introspect")) { - DBUSIntrospection introspectionString(manager_methods,manager_signals); - introspectionString.process(conn, msg); - g_pDbusMessage->setConnection(conn); - } else if (strcmp(DBUS_SERVICE_PREFIX,iface)==0) { - - while (!found && strcmp(manager_methods[i].name, "") != 0) - { - if (strcmp(manager_methods[i].name, member) == 0) - { - MethodTable entry = manager_methods[i]; - DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("got call for method:"),DLT_STRING(entry.name)); - CallBackMethod m = entry.function; - (m_reference->*m)(conn, msg); - found = true; - } - i++; - } +DBusHandlerResult AudioManagerInterface::receive_callback(DBusConnection *conn, DBusMessage *msg, void *user_data){ + m_reference=(AudioManagerInterface*) user_data; + DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("message received")); + + string nodeString =std::string(DBUS_SERVICE_ROOT)+"/"+std::string(MY_NODE); + + if (dbus_message_is_method_call(msg, DBUS_INTERFACE_INTROSPECTABLE, "Introspect")) { + m_reference->m_Introspection->process(conn,msg); + return DBUS_HANDLER_RESULT_HANDLED; + } + + bool found=false; + int i = 0; + + while (!found && strcmp(manager_methods[i].name, "") != 0) { + if (dbus_message_is_method_call(msg,DBUS_SERVICE_SERVICE,manager_methods[i].name)) { + MethodTable entry = manager_methods[i]; + DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("got call for method:"),DLT_STRING(entry.name)); + CallBackMethod m = entry.function; + (m_reference->*m)(conn, msg); + found=true; + return DBUS_HANDLER_RESULT_HANDLED; } - dbus_connection_flush(conn); - dbus_message_unref(msg); - msg = NULL; - } + i++; + } - DLT_LOG(DBusPlugin, DLT_LOG_INFO, DLT_STRING("Stopping thread")); - return 0; + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } + + |