From daef342a1840bb661826b9862603a49518d6d051 Mon Sep 17 00:00:00 2001 From: Nrusingh Dash Date: Tue, 26 Feb 2013 23:56:44 +0900 Subject: - changed domainData, sourceData, sinkData, gatewayData, crossfaderData to D-Bus Struct - confirmRoutingReady, confirmRoutingRundown, hookDomainRegistrationComplete should reply even return type on D-Bus is void - to parse domainID "getUInt" is used instead of "getInt" Signed-off-by: Nrusingh Dash --- .../include/CAmDbusMessageHandler.h | 1 + .../include/RoutingReceiver.xml | 10 +- .../src/CAmDbusMessageHandler.cpp | 287 +++++++++++++-------- .../src/IAmRoutingReceiverShadow.cpp | 26 +- 4 files changed, 198 insertions(+), 126 deletions(-) diff --git a/PluginRoutingInterfaceDbus/include/CAmDbusMessageHandler.h b/PluginRoutingInterfaceDbus/include/CAmDbusMessageHandler.h index 03d9eca..62ad421 100644 --- a/PluginRoutingInterfaceDbus/include/CAmDbusMessageHandler.h +++ b/PluginRoutingInterfaceDbus/include/CAmDbusMessageHandler.h @@ -93,6 +93,7 @@ public: am_Source_s getSourceData(); am_Sink_s getSinkData(); am_Gateway_s getGatewayData(); + am_Crossfader_s getCrossfaderData(); am_MainSoundProperty_s getMainSoundProperty(); /** diff --git a/PluginRoutingInterfaceDbus/include/RoutingReceiver.xml b/PluginRoutingInterfaceDbus/include/RoutingReceiver.xml index 76f998d..5fb390a 100644 --- a/PluginRoutingInterfaceDbus/include/RoutingReceiver.xml +++ b/PluginRoutingInterfaceDbus/include/RoutingReceiver.xml @@ -66,7 +66,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -92,7 +92,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -115,7 +115,7 @@ - + diff --git a/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp b/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp index 82f912a..2591012 100644 --- a/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp +++ b/PluginRoutingInterfaceDbus/src/CAmDbusMessageHandler.cpp @@ -335,149 +335,222 @@ std::vector CAmRoutingDbusMessageHandler::getEarlyData() am_Domain_s CAmRoutingDbusMessageHandler::getDomainData() { am_Domain_s domainData; - domainData.domainID = static_cast(getUInt()); - domainData.name = getString(); - domainData.busname = getString(); - domainData.nodename = getString(); - domainData.early = getBool(); - domainData.complete = getBool(); - domainData.state = static_cast(getUInt()); + DBusMessageIter domainDataIter; + + if (DBUS_TYPE_STRUCT != dbus_message_iter_get_arg_type(&mDBusMessageIter)) + { + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusMessageHandler::getDomainData DBUS handler argument is no struct!"); + mErrorName = std::string(DBUS_ERROR_INVALID_ARGS); + mErrorMsg = "DBus argument is no struct"; + } + else + { + dbus_message_iter_recurse(&mDBusMessageIter, &domainDataIter); + domainData.domainID = static_cast(getUInt(domainDataIter, true)); + domainData.name = getString(domainDataIter, true); + domainData.busname = getString(domainDataIter, true); + domainData.nodename = getString(domainDataIter, true); + domainData.early = getBool(domainDataIter, true); + domainData.complete = getBool(domainDataIter, true); + domainData.state = static_cast(getUInt(domainDataIter, false)); + dbus_message_iter_next(&mDBusMessageIter); + } return (domainData); } am_Source_s CAmRoutingDbusMessageHandler::getSourceData() { am_Source_s sourceData; - DBusMessageIter availIter, arrayIter, structIter; + DBusMessageIter sourceDataIter, availIter, arrayIter, structIter; am_SoundProperty_s soundProperty; am_ConnectionFormat_e connectionFormat; am_MainSoundProperty_s mainSoundProperty; - sourceData.sourceID = static_cast(getUInt()); - sourceData.domainID = static_cast(getUInt()); - sourceData.name = getString(); - sourceData.sourceClassID = static_cast(getUInt()); - sourceData.sourceState = static_cast(getUInt()); - sourceData.volume = static_cast(getInt()); - sourceData.visible = getBool(); - dbus_message_iter_recurse(&mDBusMessageIter, &availIter); - sourceData.available.availability = static_cast(getInt(availIter, true)); - sourceData.available.availabilityReason = static_cast(getInt(availIter, false)); - dbus_message_iter_next(&mDBusMessageIter); - sourceData.interruptState = static_cast(getUInt()); - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - do - { - dbus_message_iter_recurse(&arrayIter, &structIter); - soundProperty.type = static_cast(getInt(structIter, true)); - soundProperty.value = static_cast(getInt(structIter, false)); - sourceData.listSoundProperties.push_back(soundProperty); - } while (dbus_message_iter_next(&arrayIter)); - dbus_message_iter_next(&mDBusMessageIter); - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - do - { - connectionFormat = static_cast(getInt(arrayIter, false)); - sourceData.listConnectionFormats.push_back(connectionFormat); - } while (dbus_message_iter_next(&arrayIter)); - dbus_message_iter_next(&mDBusMessageIter); - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - do + if (DBUS_TYPE_STRUCT != dbus_message_iter_get_arg_type(&mDBusMessageIter)) { - dbus_message_iter_recurse(&arrayIter, &structIter); - mainSoundProperty.type = static_cast(getInt(structIter, true)); - mainSoundProperty.value = static_cast(getInt(structIter, false)); - sourceData.listMainSoundProperties.push_back(mainSoundProperty); - } while (dbus_message_iter_next(&arrayIter)); + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusMessageHandler::getSourceData DBUS handler argument is no struct!"); + mErrorName = std::string(DBUS_ERROR_INVALID_ARGS); + mErrorMsg = "DBus argument is no struct"; + } + else + { + dbus_message_iter_recurse(&mDBusMessageIter, &sourceDataIter); + sourceData.sourceID = static_cast(getUInt(sourceDataIter, true)); + sourceData.domainID = static_cast(getUInt(sourceDataIter, true)); + sourceData.name = getString(sourceDataIter, true); + sourceData.sourceClassID = static_cast(getUInt(sourceDataIter, true)); + sourceData.sourceState = static_cast(getUInt(sourceDataIter, true)); + sourceData.volume = static_cast(getInt(sourceDataIter, true)); + sourceData.visible = getBool(sourceDataIter, true); + dbus_message_iter_recurse(&sourceDataIter, &availIter); + sourceData.available.availability = static_cast(getInt(availIter, true)); + sourceData.available.availabilityReason = static_cast(getInt(availIter, false)); + dbus_message_iter_next(&sourceDataIter); + sourceData.interruptState = static_cast(getUInt(sourceDataIter, true)); + dbus_message_iter_recurse(&sourceDataIter, &arrayIter); + do + { + dbus_message_iter_recurse(&arrayIter, &structIter); + soundProperty.type = static_cast(getInt(structIter, true)); + soundProperty.value = static_cast(getInt(structIter, false)); + sourceData.listSoundProperties.push_back(soundProperty); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&sourceDataIter); + dbus_message_iter_recurse(&sourceDataIter, &arrayIter); + do + { + connectionFormat = static_cast(getInt(arrayIter, false)); + sourceData.listConnectionFormats.push_back(connectionFormat); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&sourceDataIter); + + dbus_message_iter_recurse(&sourceDataIter, &arrayIter); + do + { + dbus_message_iter_recurse(&arrayIter, &structIter); + mainSoundProperty.type = static_cast(getInt(structIter, true)); + mainSoundProperty.value = static_cast(getInt(structIter, false)); + sourceData.listMainSoundProperties.push_back(mainSoundProperty); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&mDBusMessageIter); + } return (sourceData); } am_Sink_s CAmRoutingDbusMessageHandler::getSinkData() { am_Sink_s sinkData; - DBusMessageIter structIter, availIter, arrayIter; + DBusMessageIter sinkDataIter, structIter, availIter, arrayIter; am_SoundProperty_s soundProperty; am_ConnectionFormat_e connectionFormat; am_MainSoundProperty_s mainSoundProperty; - sinkData.sinkID = static_cast(getUInt()); - sinkData.name = getString(); - sinkData.domainID = static_cast(getUInt()); - sinkData.sinkClassID = static_cast(getUInt()); - sinkData.volume = static_cast(getInt()); - sinkData.visible = getBool(); - dbus_message_iter_recurse(&mDBusMessageIter, &availIter); - sinkData.available.availability = static_cast(getInt(availIter, true)); - sinkData.available.availabilityReason = static_cast(getInt(availIter, false)); - dbus_message_iter_next(&mDBusMessageIter); - sinkData.muteState = static_cast(getInt()); - sinkData.mainVolume = static_cast(getInt()); - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - do - { - dbus_message_iter_recurse(&arrayIter, &structIter); - soundProperty.type = static_cast(getInt(structIter, true)); - soundProperty.value = static_cast(getInt(structIter, false)); - sinkData.listSoundProperties.push_back(soundProperty); - } while (dbus_message_iter_next(&arrayIter)); - - dbus_message_iter_next(&mDBusMessageIter); - - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - do + if (DBUS_TYPE_STRUCT != dbus_message_iter_get_arg_type(&mDBusMessageIter)) { - connectionFormat = static_cast(getInt(arrayIter, false)); - sinkData.listConnectionFormats.push_back(connectionFormat); - } while (dbus_message_iter_next(&arrayIter)); - dbus_message_iter_next(&mDBusMessageIter); - - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - do + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusMessageHandler::getSinkData DBUS handler argument is no struct!"); + mErrorName = std::string(DBUS_ERROR_INVALID_ARGS); + mErrorMsg = "DBus argument is no struct"; + } + else { - dbus_message_iter_recurse(&arrayIter, &structIter); - mainSoundProperty.type = static_cast(getInt(structIter, true)); - mainSoundProperty.value = static_cast(getInt(structIter, false)); - sinkData.listMainSoundProperties.push_back(mainSoundProperty); - } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_recurse(&mDBusMessageIter, &sinkDataIter); + sinkData.sinkID = static_cast(getUInt(sinkDataIter, true)); + sinkData.name = getString(sinkDataIter, true); + sinkData.domainID = static_cast(getUInt(sinkDataIter, true)); + sinkData.sinkClassID = static_cast(getUInt(sinkDataIter, true)); + sinkData.volume = static_cast(getInt(sinkDataIter, true)); + sinkData.visible = getBool(sinkDataIter, true); + dbus_message_iter_recurse(&sinkDataIter, &availIter); + sinkData.available.availability = static_cast(getInt(availIter, true)); + sinkData.available.availabilityReason = static_cast(getInt(availIter, false)); + dbus_message_iter_next(&sinkDataIter); + sinkData.muteState = static_cast(getInt(sinkDataIter, true)); + sinkData.mainVolume = static_cast(getInt(sinkDataIter, true)); + + dbus_message_iter_recurse(&sinkDataIter, &arrayIter); + do + { + dbus_message_iter_recurse(&arrayIter, &structIter); + soundProperty.type = static_cast(getInt(structIter, true)); + soundProperty.value = static_cast(getInt(structIter, false)); + sinkData.listSoundProperties.push_back(soundProperty); + } while (dbus_message_iter_next(&arrayIter)); + + dbus_message_iter_next(&sinkDataIter); + + dbus_message_iter_recurse(&sinkDataIter, &arrayIter); + do + { + connectionFormat = static_cast(getInt(arrayIter, false)); + sinkData.listConnectionFormats.push_back(connectionFormat); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&sinkDataIter); + + dbus_message_iter_recurse(&sinkDataIter, &arrayIter); + do + { + dbus_message_iter_recurse(&arrayIter, &structIter); + mainSoundProperty.type = static_cast(getInt(structIter, true)); + mainSoundProperty.value = static_cast(getInt(structIter, false)); + sinkData.listMainSoundProperties.push_back(mainSoundProperty); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&mDBusMessageIter); + } return (sinkData); } am_Gateway_s CAmRoutingDbusMessageHandler::getGatewayData() { am_Gateway_s gatewayData; - DBusMessageIter arrayIter; + DBusMessageIter gatewayDataIter, arrayIter; am_ConnectionFormat_e connectionFormat; bool convertion; - gatewayData.gatewayID = static_cast(getUInt()); - gatewayData.name = getString(); - gatewayData.sinkID = static_cast(getUInt()); - gatewayData.sourceID = static_cast(getUInt()); - gatewayData.domainSinkID = static_cast(getUInt()); - gatewayData.domainSourceID = static_cast(getUInt()); - gatewayData.controlDomainID = static_cast(getUInt()); - do - { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - connectionFormat = static_cast(getUInt(arrayIter, false)); - gatewayData.listSourceFormats.push_back(connectionFormat); - } while (dbus_message_iter_next(&arrayIter)); - dbus_message_iter_next(&mDBusMessageIter); - do + if (DBUS_TYPE_STRUCT != dbus_message_iter_get_arg_type(&mDBusMessageIter)) { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - connectionFormat = static_cast(getUInt(arrayIter, false)); - gatewayData.listSinkFormats.push_back(connectionFormat); - } while (dbus_message_iter_next(&arrayIter)); - dbus_message_iter_next(&mDBusMessageIter); - do + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusMessageHandler::getDomainData DBUS handler argument is no struct!"); + mErrorName = std::string(DBUS_ERROR_INVALID_ARGS); + mErrorMsg = "DBus argument is no struct"; + } + else { - dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); - convertion = getBool(arrayIter, false); - gatewayData.convertionMatrix.push_back(convertion); - } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_recurse(&mDBusMessageIter, &gatewayDataIter); + gatewayData.gatewayID = static_cast(getUInt(gatewayDataIter, true)); + gatewayData.name = getString(gatewayDataIter, true); + gatewayData.sinkID = static_cast(getUInt(gatewayDataIter, true)); + gatewayData.sourceID = static_cast(getUInt(gatewayDataIter, true)); + gatewayData.domainSinkID = static_cast(getUInt(gatewayDataIter, true)); + gatewayData.domainSourceID = static_cast(getUInt(gatewayDataIter, true)); + gatewayData.controlDomainID = static_cast(getUInt(gatewayDataIter, true)); + do + { + dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); + connectionFormat = static_cast(getUInt(arrayIter, false)); + gatewayData.listSourceFormats.push_back(connectionFormat); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&gatewayDataIter); + do + { + dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); + connectionFormat = static_cast(getUInt(arrayIter, false)); + gatewayData.listSinkFormats.push_back(connectionFormat); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&gatewayDataIter); + do + { + dbus_message_iter_recurse(&gatewayDataIter, &arrayIter); + convertion = getBool(arrayIter, false); + gatewayData.convertionMatrix.push_back(convertion); + } while (dbus_message_iter_next(&arrayIter)); + dbus_message_iter_next(&mDBusMessageIter); + } return (gatewayData); } +am_Crossfader_s CAmRoutingDbusMessageHandler::getCrossfaderData() +{ + am_Crossfader_s crossfaderData; + DBusMessageIter crossfaderDataIter; + + if (DBUS_TYPE_STRUCT != dbus_message_iter_get_arg_type(&mDBusMessageIter)) + { + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusMessageHandler::getCrossfaderData DBUS handler argument is no struct!"); + mErrorName = std::string(DBUS_ERROR_INVALID_ARGS); + mErrorMsg = "DBus argument is no struct"; + } + else + { + dbus_message_iter_recurse(&mDBusMessageIter, &crossfaderDataIter); + crossfaderData.crossfaderID = static_cast (getInt(crossfaderDataIter, true)); + crossfaderData.name = static_cast (getString(crossfaderDataIter, true)); + crossfaderData.sinkID_A = static_cast (getInt(crossfaderDataIter, true)); + crossfaderData.sinkID_B = static_cast (getInt(crossfaderDataIter, true)); + crossfaderData.sourceID = static_cast (getInt(crossfaderDataIter, true)); + crossfaderData.hotSink = static_cast (getInt(crossfaderDataIter, false)); + dbus_message_iter_next(&mDBusMessageIter); + } + return (crossfaderData); +} + am_MainSoundProperty_s CAmRoutingDbusMessageHandler::getMainSoundProperty() { am_MainSoundProperty_s mainSoundProperty; diff --git a/PluginRoutingInterfaceDbus/src/IAmRoutingReceiverShadow.cpp b/PluginRoutingInterfaceDbus/src/IAmRoutingReceiverShadow.cpp index 4115a21..b07065e 100644 --- a/PluginRoutingInterfaceDbus/src/IAmRoutingReceiverShadow.cpp +++ b/PluginRoutingInterfaceDbus/src/IAmRoutingReceiverShadow.cpp @@ -146,9 +146,11 @@ void IAmRoutingReceiverShadowDbus::hookDomainRegistrationComplete(DBusConnection (void) ((conn)); assert(mRoutingReceiveInterface != NULL); mDBUSMessageHandler.initReceive(msg); - am_domainID_t domainID(mDBUSMessageHandler.getInt()); + am_domainID_t domainID(mDBUSMessageHandler.getUInt()); log(&routingDbus, DLT_LOG_INFO, "IAmRoutingReceiverShadow::hookDomainRegistrationComplete called, domainID", domainID); mRoutingReceiveInterface->hookDomainRegistrationComplete((am_domainID_t)((domainID))); + mDBUSMessageHandler.initReply(msg); + mDBUSMessageHandler.sendMessage(); } void IAmRoutingReceiverShadowDbus::ackConnect(DBusConnection* conn, DBusMessage* msg) @@ -441,13 +443,7 @@ void IAmRoutingReceiverShadowDbus::registerCrossfader(DBusConnection* conn, DBus (void) ((conn)); assert(mRoutingReceiveInterface != NULL); mDBUSMessageHandler.initReceive(msg); - am_Crossfader_s crossfader; - crossfader.crossfaderID = mDBUSMessageHandler.getInt(); - crossfader.name = std::string(mDBUSMessageHandler.getString()); - crossfader.sinkID_A = mDBUSMessageHandler.getInt(); - crossfader.sinkID_B = mDBUSMessageHandler.getInt(); - crossfader.sourceID = mDBUSMessageHandler.getInt(); - crossfader.hotSink = (am_HotSink_e)((mDBUSMessageHandler.getInt())); + am_Crossfader_s crossfader (mDBUSMessageHandler.getCrossfaderData()); log(&routingDbus, DLT_LOG_INFO, "IAmRoutingReceiverShadow::registerCrossfader called, name", crossfader.name); am_Error_e returnCode = mRoutingReceiveInterface->registerCrossfader(crossfader, crossfader.crossfaderID); mDBUSMessageHandler.initReply(msg); @@ -546,7 +542,7 @@ void IAmRoutingReceiverShadowDbus::hookDomainStateChange(DBusConnection* conn, D (void) ((conn)); assert(mRoutingReceiveInterface != NULL); mDBUSMessageHandler.initReceive(msg); - am_domainID_t domainID = mDBUSMessageHandler.getInt(); + am_domainID_t domainID = mDBUSMessageHandler.getUInt(); am_DomainState_e domainState = (am_DomainState_e)((mDBUSMessageHandler.getInt())); log(&routingDbus, DLT_LOG_INFO, "IAmRoutingReceiverShadow::hookDomainStateChange called, hookDomainStateChange", domainID); mRoutingReceiveInterface->hookDomainStateChange(domainID, domainState); @@ -664,12 +660,14 @@ void IAmRoutingReceiverShadowDbus::confirmRoutingReady(DBusConnection* conn, DBu (void) ((conn)); assert(mRoutingReceiveInterface != NULL); mDBUSMessageHandler.initReceive(msg); - am_domainID_t domainID(mDBUSMessageHandler.getInt()); + am_domainID_t domainID(mDBUSMessageHandler.getUInt()); log(&routingDbus, DLT_LOG_INFO, "IAmRoutingReceiverShadowDbus::confirmRoutingReady called, domainID", domainID); - mNumberDomains--; - if(mNumberDomains==0) - mRoutingReceiveInterface->confirmRoutingRundown(mHandle,E_OK); + mRoutingReceiveInterface->confirmRoutingReady(mHandle, E_OK); + mNumberDomains++; + + mDBUSMessageHandler.initReply(msg); + mDBUSMessageHandler.sendMessage(); } void IAmRoutingReceiverShadowDbus::confirmRoutingRundown(DBusConnection* conn, DBusMessage* msg) @@ -677,7 +675,7 @@ void IAmRoutingReceiverShadowDbus::confirmRoutingRundown(DBusConnection* conn, D (void) ((conn)); assert(mRoutingReceiveInterface != NULL); mDBUSMessageHandler.initReceive(msg); - am_domainID_t domainID(mDBUSMessageHandler.getInt()); + am_domainID_t domainID(mDBUSMessageHandler.getUInt()); log(&routingDbus, DLT_LOG_INFO, "IAmRoutingReceiverShadowDbus::confirmRoutingRundown called, domainID", domainID); mNumberDomains--; -- cgit v1.2.1