diff options
author | christian mueller <christian.ei.mueller@bmw.de> | 2012-04-04 15:27:10 +0200 |
---|---|---|
committer | christian mueller <christian.ei.mueller@bmw.de> | 2012-04-04 15:49:13 +0200 |
commit | 06476e68a42077a0597628dca1c4a53cd20f5236 (patch) | |
tree | d8fbcaf89eb159ee76c7260bd6999558952dd9e8 /PluginRoutingInterfaceDbus/src/CAmRoutingSenderDbus.cpp | |
parent | 1f4b52faf447b12f1900c91db5090e04feb33578 (diff) | |
download | audiomanager-06476e68a42077a0597628dca1c4a53cd20f5236.tar.gz |
* some enhancement to routingPluginDbus to make to get acces to all interfaces and handle multiple domains
Signed-off-by: christian mueller <christian.ei.mueller@bmw.de>
Diffstat (limited to 'PluginRoutingInterfaceDbus/src/CAmRoutingSenderDbus.cpp')
-rw-r--r-- | PluginRoutingInterfaceDbus/src/CAmRoutingSenderDbus.cpp | 360 |
1 files changed, 251 insertions, 109 deletions
diff --git a/PluginRoutingInterfaceDbus/src/CAmRoutingSenderDbus.cpp b/PluginRoutingInterfaceDbus/src/CAmRoutingSenderDbus.cpp index 8306911..360d61d 100644 --- a/PluginRoutingInterfaceDbus/src/CAmRoutingSenderDbus.cpp +++ b/PluginRoutingInterfaceDbus/src/CAmRoutingSenderDbus.cpp @@ -1,7 +1,9 @@ /** * Copyright (c) 2012 BMW + * Copyright (c) copyright 2011-2012 Aricent® Group and its licensors * * \author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012 + * \author Sampreeth Ramavana * * \copyright * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, @@ -15,15 +17,15 @@ * For further information see http://www.genivi.org/. */ -#include "shared/CAmDltWrapper.h" -#include "shared/CAmDbusWrapper.h" #include "CAmRoutingSenderDbus.h" +#include <cassert> +#include <map> #include "CAmDbusSend.h" +#include "shared/CAmDltWrapper.h" +#include "shared/CAmDbusWrapper.h" -#define PULSE_INTERFACE_TARGET "org.genivi.pulse" -#define PULSE_REGISTER_PATH "/pulse" -#define PULSE_INTERFACE_NAME "org.genivi.pulse" - +namespace am +{ DLT_DECLARE_CONTEXT(routingDbus) extern "C" IAmRoutingSend* PluginRoutingInterfaceDbusFactory() @@ -36,11 +38,12 @@ extern "C" void destroyRoutingPluginInterfaceDbus(IAmRoutingSend* routingSendInt delete routingSendInterface; } -CAmRoutingSenderDbus::CAmRoutingSenderDbus() - : mDBusMessageHandler(), - mRoutingReceiverShadow(), - mDBusWrapper(NULL), - mRoutingReceiveInterface(NULL) +CAmRoutingSenderDbus::CAmRoutingSenderDbus() : + mpCAmDBusWrapper(), // + mpIAmRoutingReceive(), // + mpDBusConnection(), // + mCAmRoutingDBusMessageHandler(), // + mIAmRoutingReceiverShadowDbus(this) { CAmDltWrapper::instance()->registerContext(routingDbus, "DRS", "DBus Plugin"); log(&routingDbus, DLT_LOG_INFO, "RoutingSender constructed"); @@ -52,161 +55,300 @@ CAmRoutingSenderDbus::~CAmRoutingSenderDbus() CAmDltWrapper::instance()->unregisterContext(routingDbus); } -am_Error_e CAmRoutingSenderDbus::asyncAbort(const am_Handle_s handle) +am_Error_e CAmRoutingSenderDbus::startupInterface(IAmRoutingReceive* pIAmRoutingReceive) { - CAmDbusSend send = CAmDbusSend(connection,PULSE_INTERFACE_TARGET,PULSE_REGISTER_PATH, PULSE_INTERFACE_NAME, "abort"); - send.appendInteger(handle.handleType); - send.appendInteger(handle.handle); - send.sendReply(); + log(&routingDbus, DLT_LOG_INFO, "startupInterface called"); + mpIAmRoutingReceive = pIAmRoutingReceive; + mIAmRoutingReceiverShadowDbus.setRoutingReceiver(mpIAmRoutingReceive); + mpIAmRoutingReceive->getDBusConnectionWrapper(mpCAmDBusWrapper); + assert(mpCAmDBusWrapper!=NULL); + mpCAmDBusWrapper->getDBusConnection(mpDBusConnection); + assert(mpDBusConnection!=NULL); + mCAmRoutingDBusMessageHandler.setDBusConnection(mpDBusConnection); return (E_OK); } +void CAmRoutingSenderDbus::getInterfaceVersion(std::string & version) const +{ + version = RoutingSendVersion; +} + +void CAmRoutingSenderDbus::setRoutingReady(const uint16_t handle) +{ + log(&routingDbus, DLT_LOG_INFO, "sending routingReady signal"); + mCAmRoutingDBusMessageHandler.initSignal(std::string(ROUTING_NODE), "setRoutingReady"); + mCAmRoutingDBusMessageHandler.sendMessage(); + mIAmRoutingReceiverShadowDbus.gotReady(mMapDomains.size(),handle); +} + +void CAmRoutingSenderDbus::setRoutingRundown(const uint16_t handle) +{ + mCAmRoutingDBusMessageHandler.initSignal(std::string(ROUTING_NODE), "setRoutingRundown"); + mCAmRoutingDBusMessageHandler.sendMessage(); + mIAmRoutingReceiverShadowDbus.gotRundown(mMapDomains.size(),handle); +} + +am_Error_e CAmRoutingSenderDbus::asyncAbort(const am_Handle_s handle) +{ + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncAbort called"); + mapHandles_t::iterator iter = mMapHandles.begin(); + iter = mMapHandles.find(handle.handle); + if (iter != mMapHandles.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncAbort"); + send.append(handle.handle); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncAbort could not find interface"); + return (E_UNKNOWN); + +} + am_Error_e CAmRoutingSenderDbus::asyncConnect(const am_Handle_s handle, const am_connectionID_t connectionID, const am_sourceID_t sourceID, const am_sinkID_t sinkID, const am_ConnectionFormat_e connectionFormat) { - (void) connectionFormat; - log(&routingDbus, DLT_LOG_INFO, "pulse async connect"); - CAmDbusSend send = CAmDbusSend(connection,PULSE_INTERFACE_TARGET,PULSE_REGISTER_PATH, PULSE_INTERFACE_NAME, "connect"); - send.appendInteger(handle.handle); - send.appendInteger(connectionID); - send.appendInteger(sourceID); - send.appendInteger(sinkID); - send.sendReply(); - return (E_OK); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncConnect called"); + mapSources_t::iterator iter = mMapSources.begin(); + iter = mMapSources.find(sourceID); + if (iter != mMapSources.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncConnect"); + send.append(handle.handle); + send.append(connectionID); + send.append(sourceID); + send.append(sinkID); + send.append(static_cast<int16_t>(connectionFormat)); + mMapConnections.insert(std::make_pair(connectionID, (iter->second))); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncConnect could not find interface"); + return (E_UNKNOWN); } am_Error_e CAmRoutingSenderDbus::asyncDisconnect(const am_Handle_s handle, const am_connectionID_t connectionID) { - log(&routingDbus, DLT_LOG_INFO, "pulse async disconnect"); - CAmDbusSend send = CAmDbusSend(connection,PULSE_INTERFACE_TARGET,PULSE_REGISTER_PATH, PULSE_INTERFACE_NAME, "disconnect"); - send.appendInteger(handle.handle); - send.appendInteger(connectionID); - send.sendReply(); - return (E_OK); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncDisconnect called"); + mapConnections_t::iterator iter = mMapConnections.begin(); + iter = mMapConnections.find(connectionID); + if (iter != mMapConnections.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncDisconnect"); + send.append(handle.handle); + send.append(connectionID); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncDisconnect could not find interface"); + return (E_UNKNOWN); } am_Error_e CAmRoutingSenderDbus::asyncSetSinkVolume(const am_Handle_s handle, const am_sinkID_t sinkID, const am_volume_t volume, const am_RampType_e ramp, const am_time_t time) { - log(&routingDbus, DLT_LOG_INFO, "pulse set sink volume"); - CAmDbusSend send = CAmDbusSend(connection,PULSE_INTERFACE_TARGET,PULSE_REGISTER_PATH, PULSE_INTERFACE_NAME, "setSinkVolume"); - send.appendInteger(handle.handle); - send.appendInteger(sinkID); - send.appendInteger(volume); - send.appendInteger(ramp); - send.appendInteger(time); - send.sendReply(); - return (E_OK); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncSetSinkVolume called"); + mapSinks_t::iterator iter = mMapSinks.begin(); + iter = mMapSinks.find(sinkID); + if (iter != mMapSinks.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncSetSinkVolume"); + send.append(handle.handle); + send.append(sinkID); + send.append(volume); + send.append(static_cast<int16_t>(ramp)); + send.append(time); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncSetSinkVolume could not find interface"); + return (E_UNKNOWN); } am_Error_e CAmRoutingSenderDbus::asyncSetSourceVolume(const am_Handle_s handle, const am_sourceID_t sourceID, const am_volume_t volume, const am_RampType_e ramp, const am_time_t time) { - log(&routingDbus, DLT_LOG_INFO, "pulse set source volume"); - CAmDbusSend send = CAmDbusSend(connection,PULSE_INTERFACE_TARGET,PULSE_REGISTER_PATH, PULSE_INTERFACE_NAME, "setSourceVolume"); - send.appendInteger(handle.handle); - send.appendInteger(sourceID); - send.appendInteger(volume); - send.appendInteger(ramp); - send.appendInteger(time); - send.sendReply(); - return (E_OK); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncSetSourceVolume called"); + mapSources_t::iterator iter = mMapSources.begin(); + iter = mMapSources.find(sourceID); + if (iter != mMapSources.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncSetSourceVolume"); + send.append(handle.handle); + send.append(sourceID); + send.append(volume); + send.append(static_cast<int16_t>(ramp)); + send.append(time); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncSetSourceVolume could not find interface"); + return (E_UNKNOWN); } am_Error_e CAmRoutingSenderDbus::asyncSetSourceState(const am_Handle_s handle, const am_sourceID_t sourceID, const am_SourceState_e state) { - (void) handle; - (void) sourceID; - (void) state; - return (E_NOT_USED); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncSetSourceState called"); + mapSources_t::iterator iter = mMapSources.begin(); + iter = mMapSources.find(sourceID); + if (iter != mMapSources.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncSetSourceState"); + send.append(handle.handle); + send.append(sourceID); + send.append(static_cast<int16_t>(state)); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncSetSourceState could not find interface"); + return (E_UNKNOWN); } -am_Error_e CAmRoutingSenderDbus::asyncCrossFade(const am_Handle_s handle, const am_crossfaderID_t crossfaderID, const am_HotSink_e hotSink, const am_RampType_e rampType, const am_time_t time) +am_Error_e CAmRoutingSenderDbus::asyncSetSinkSoundProperties(const am_Handle_s handle, const am_sinkID_t sinkID, const std::vector<am_SoundProperty_s>& listSoundProperties) { - (void) handle; - (void) crossfaderID; - (void) hotSink; - (void) rampType; - (void) time; - return (E_NOT_USED); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncSetSinkSoundProperties called"); + mapSinks_t::iterator iter = mMapSinks.begin(); + iter = mMapSinks.find(sinkID); + if (iter != mMapSinks.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncSetSinkSoundProperties"); + send.append(handle.handle); + send.append(sinkID); + send.append(listSoundProperties); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncSetSinkSoundProperties could not find interface"); + return (E_UNKNOWN); } -am_Error_e CAmRoutingSenderDbus::setDomainState(const am_domainID_t domainID, const am_DomainState_e domainState) +am_Error_e CAmRoutingSenderDbus::asyncSetSinkSoundProperty(const am_Handle_s handle, const am_sinkID_t sinkID, const am_SoundProperty_s& soundProperty) { - (void) domainID; - (void) domainState; - return (E_NOT_USED); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncSetSinkSoundProperty called"); + mapSinks_t::iterator iter = mMapSinks.begin(); + iter = mMapSinks.find(sinkID); + if (iter != mMapSinks.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncSetSinkSoundProperty"); + send.append(handle.handle); + send.append(sinkID); + send.append(soundProperty); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncSetSinkSoundProperty could not find interface"); + return (E_UNKNOWN); } -am_Error_e CAmRoutingSenderDbus::startupInterface(IAmRoutingReceive *routingreceiveinterface) +am_Error_e CAmRoutingSenderDbus::asyncSetSourceSoundProperties(const am_Handle_s handle, const am_sourceID_t sourceID, const std::vector<am_SoundProperty_s>& listSoundProperties) { - log(&routingDbus, DLT_LOG_INFO, "startupInterface called"); - mRoutingReceiveInterface=routingreceiveinterface; - mRoutingReceiverShadow.setRoutingReceiver(mRoutingReceiveInterface); - mRoutingReceiveInterface->getDBusConnectionWrapper(mDBusWrapper); - //assert(mDBusWrapper!=NULL); - mDBusWrapper->getDBusConnection(connection); - //assert(connection!=NULL); - mDBusMessageHandler.setDBusConnection(connection); - return (E_OK); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncSetSourceSoundProperties called"); + mapSources_t::iterator iter = mMapSources.begin(); + iter = mMapSources.find(sourceID); + if (iter != mMapSources.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncSetSourceSoundProperties"); + send.append(handle.handle); + send.append(sourceID); + send.append(listSoundProperties); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncSetSourceSoundProperties could not find interface"); + return (E_UNKNOWN); } -void CAmRoutingSenderDbus::setRoutingReady(const uint16_t handle) +am_Error_e CAmRoutingSenderDbus::asyncSetSourceSoundProperty(const am_Handle_s handle, const am_sourceID_t sourceID, const am_SoundProperty_s& soundProperty) { - (void) handle; - log(&routingDbus, DLT_LOG_INFO, "sending systemReady signal"); - mDBusMessageHandler.initSignal(std::string(ROUTING_NODE),"signal_systemReady"); - mDBusMessageHandler.sendMessage(); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::asyncSetSourceSoundProperty called"); + mapSources_t::iterator iter = mMapSources.begin(); + iter = mMapSources.find(sourceID); + if (iter != mMapSources.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "asyncSetSourceSoundProperty"); + send.append(handle.handle); + send.append(sourceID); + send.append(soundProperty); + mMapHandles.insert(std::make_pair(handle.handle, iter->second)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::asyncSetSourceSoundProperty could not find interface"); + return (E_UNKNOWN); } -void CAmRoutingSenderDbus::setRoutingRundown(const uint16_t handle) +am_Error_e CAmRoutingSenderDbus::asyncCrossFade(const am_Handle_s handle, const am_crossfaderID_t crossfaderID, const am_HotSink_e hotSink, const am_RampType_e rampType, const am_time_t time) { - (void) handle; + (void)handle; + (void)crossfaderID; + (void)hotSink; + (void)rampType; + (void)time; + //todo implement + return (E_NON_EXISTENT); } -am_Error_e CAmRoutingSenderDbus::returnBusName(std::string & BusName) const +am_Error_e CAmRoutingSenderDbus::setDomainState(const am_domainID_t domainID, const am_DomainState_e domainState) { - BusName = "DbusPlugin"; - return (E_OK); + log(&routingDbus, DLT_LOG_INFO, "CAmRoutingSenderDbus::setDomainState called"); + mapDomain_t::iterator iter = mMapDomains.begin(); + iter = mMapDomains.find(domainID); + if (iter != mMapDomains.end()) + { + CAmRoutingDbusSend send(mpDBusConnection, iter->second.busname, iter->second.path, iter->second.interface, "setDomainState"); + send.append(domainID); + send.append(static_cast<int16_t>(domainState)); + return (send.send()); + } + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingSenderDbus::setDomainState could not find interface"); + return (E_UNKNOWN); } -am_Error_e CAmRoutingSenderDbus::asyncSetSinkSoundProperty(const am_Handle_s handle, const am_sinkID_t sinkID, const am_SoundProperty_s & soundProperty) +am_Error_e CAmRoutingSenderDbus::returnBusName(std::string& BusName) const { - log(&routingDbus, DLT_LOG_INFO, "pulse set sink sound property "); - CAmDbusSend send = CAmDbusSend(connection,PULSE_INTERFACE_TARGET,PULSE_REGISTER_PATH, PULSE_INTERFACE_NAME, "setSinkSoundProperty"); - send.appendInteger(handle.handle); - send.appendInteger(soundProperty.type); - send.appendInteger(soundProperty.value); - send.appendInteger(sinkID); - send.sendReply(); + BusName = "DbusRoutingPlugin"; return (E_OK); } -am_Error_e CAmRoutingSenderDbus::asyncSetSinkSoundProperties(const am_Handle_s handle, const am_sinkID_t sinkID, const std::vector<am_SoundProperty_s> & listSoundProperties) +void CAmRoutingSenderDbus::removeHandle(uint16_t handle) { - (void) handle; - (void) sinkID; - (void) listSoundProperties; - return (E_NOT_USED); + mMapHandles.erase(handle); } -am_Error_e CAmRoutingSenderDbus::asyncSetSourceSoundProperty(const am_Handle_s handle, const am_sourceID_t sourceID, const am_SoundProperty_s & soundProperty) +void CAmRoutingSenderDbus::addDomainLookup(am_domainID_t domainID, rs_lookupData_s lookupData) { - (void) handle; - (void) sourceID; - (void) soundProperty; - return (E_NOT_USED); + mMapDomains.insert(std::make_pair(domainID, lookupData)); } -am_Error_e CAmRoutingSenderDbus::asyncSetSourceSoundProperties(const am_Handle_s handle, const am_sourceID_t sourceID, const std::vector<am_SoundProperty_s> & listSoundProperties) +void CAmRoutingSenderDbus::addSourceLookup(am_sourceID_t sourceID, am_domainID_t domainID) { - (void) handle; - (void) sourceID; - (void) listSoundProperties; - return (E_NOT_USED); + mapDomain_t::iterator iter(mMapDomains.begin()); + iter = mMapDomains.find(domainID); + if (iter != mMapDomains.end()) + { + mMapSources.insert(std::make_pair(sourceID, iter->second)); + } } -void CAmRoutingSenderDbus::getInterfaceVersion(std::string & version) const +void CAmRoutingSenderDbus::addSinkLookup(am_sinkID_t sinkID, am_domainID_t domainID) +{ + mapDomain_t::iterator iter(mMapDomains.begin()); + iter = mMapDomains.find(domainID); + if (iter != mMapDomains.end()) + { + mMapSinks.insert(std::make_pair(sinkID, iter->second)); + } +} + +void CAmRoutingSenderDbus::removeDomainLookup(am_domainID_t domainID) { - version=RoutingSendVersion; + mMapHandles.erase(domainID); } +void CAmRoutingSenderDbus::removeSourceLookup(am_sourceID_t sourceID) +{ + mMapHandles.erase(sourceID); +} + +void CAmRoutingSenderDbus::removeSinkLookup(am_sinkID_t sinkID) +{ + mMapHandles.erase(sinkID); +} +} |