summaryrefslogtreecommitdiff
path: root/PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp')
-rw-r--r--PluginRoutingInterfaceDbus/AudiomanagerInterface.cpp95
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;
}
+
+