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