summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon/src
diff options
context:
space:
mode:
authorFrank Herchet <frank.fh.herchet@bmw.de>2012-02-22 09:43:32 +0100
committerFrank Herchet <frank.fh.herchet@bmw.de>2012-02-22 09:43:32 +0100
commit065d7f02aef0dc9f7e4bbf2627dcf3dad7a3280c (patch)
tree37d24bc497b6b467e8c8066a6c44fea36a6d8081 /AudioManagerDaemon/src
parent9c209bd92d9400012765d86fc5bd51ddfe266071 (diff)
parent479a20f551b66406a4a6770fe09d17e23d38ed14 (diff)
downloadaudiomanager-065d7f02aef0dc9f7e4bbf2627dcf3dad7a3280c.tar.gz
Merge branch 'master' of qmuc300924:AudioManager
Diffstat (limited to 'AudioManagerDaemon/src')
-rw-r--r--AudioManagerDaemon/src/ControlReceiver.cpp14
-rw-r--r--AudioManagerDaemon/src/ControlSender.cpp9
-rw-r--r--AudioManagerDaemon/src/DatabaseHandler.cpp42
-rw-r--r--AudioManagerDaemon/src/Router.cpp21
-rw-r--r--AudioManagerDaemon/src/main.cpp21
5 files changed, 67 insertions, 40 deletions
diff --git a/AudioManagerDaemon/src/ControlReceiver.cpp b/AudioManagerDaemon/src/ControlReceiver.cpp
index b352d0d..5671fd0 100644
--- a/AudioManagerDaemon/src/ControlReceiver.cpp
+++ b/AudioManagerDaemon/src/ControlReceiver.cpp
@@ -207,7 +207,7 @@ am_Error_e ControlReceiver::setDomainState(const am_domainID_t domainID, const a
{
logInfo("ControlReceiver::setDomainState got called, domainID=", domainID, "domainState=", domainState);
- am_DomainState_e tempState = DS_MIN;
+ am_DomainState_e tempState = DS_UNKNOWN;
if (mDatabaseHandler->getDomainState(domainID, tempState) != E_OK)
return E_UNKNOWN;
if (tempState == domainState)
@@ -499,6 +499,18 @@ am_Error_e ControlReceiver::getSocketHandler(SocketHandler *& socketHandler)
#endif
}
+void am::ControlReceiver::setCommandRundown()
+{
+ logInfo("ControlReceiver::setCommandRundown got called");
+ mCommandSender->cbCommunicationRundown();
+}
+
+void am::ControlReceiver::setRoutingRundown()
+{
+ logInfo("ControlReceiver::setRoutingRundown got called");
+ mRoutingSender->routingInterfacesRundown();
+}
+
uint16_t ControlReceiver::getInterfaceVersion() const
{
return ControlReceiveVersion;
diff --git a/AudioManagerDaemon/src/ControlSender.cpp b/AudioManagerDaemon/src/ControlSender.cpp
index 816ed80..a334475 100644
--- a/AudioManagerDaemon/src/ControlSender.cpp
+++ b/AudioManagerDaemon/src/ControlSender.cpp
@@ -39,7 +39,7 @@ ControlSender::ControlSender(std::string controlPluginFile) :
std::ifstream isfile(controlPluginFile.c_str());
if (!isfile)
{
- logError("ControlSender::ControlSender: Controller plugin not found:",controlPluginFile);
+ logError("ControlSender::ControlSender: Controller plugin not found:", controlPluginFile);
}
else if (!controlPluginFile.empty())
{
@@ -59,7 +59,8 @@ ControlSender::ControlSender(std::string controlPluginFile) :
ControlSender::~ControlSender()
{
- if (mlibHandle) dlclose(mlibHandle);
+ if (mlibHandle)
+ dlclose(mlibHandle);
}
void ControlSender::hookAllPluginsLoaded()
@@ -267,9 +268,9 @@ void ControlSender::cbAckSetSourceSoundProperties(const am_Handle_s handle, cons
mController->cbAckSetSourceSoundProperties(handle, error);
}
-am_Error_e ControlSender::getConnectionFormatChoice(const am_sourceID_t sourceID, const am_sinkID_t sinkID, const std::vector<am_ConnectionFormat_e> listPossibleConnectionFormats, std::vector<am_ConnectionFormat_e> & listPrioConnectionFormats)
+am_Error_e am::ControlSender::getConnectionFormatChoice(const am_sourceID_t sourceID, const am_sinkID_t sinkID, const am_Route_s listRoute, const std::vector<am_ConnectionFormat_e> listPossibleConnectionFormats, std::vector<am_ConnectionFormat_e> & listPrioConnectionFormats)
{
- return mController->getConnectionFormatChoice(sourceID, sinkID, listPossibleConnectionFormats, listPrioConnectionFormats);
+ return mController->getConnectionFormatChoice(sourceID, sinkID, listRoute, listPossibleConnectionFormats, listPrioConnectionFormats);
}
uint16_t ControlSender::getInterfaceVersion() const
diff --git a/AudioManagerDaemon/src/DatabaseHandler.cpp b/AudioManagerDaemon/src/DatabaseHandler.cpp
index 5f7ee1d..2337142 100644
--- a/AudioManagerDaemon/src/DatabaseHandler.cpp
+++ b/AudioManagerDaemon/src/DatabaseHandler.cpp
@@ -113,7 +113,7 @@ am_Error_e DatabaseHandler::enterDomainDB(const am_Domain_s & domainData, am_dom
assert(domainData.domainID==0);
assert(!domainData.name.empty());
assert(!domainData.busname.empty());
- assert(domainData.state>=DS_MIN && domainData.state<=DS_MAX);
+ assert(domainData.state>=DS_UNKNOWN && domainData.state<=DS_MAX);
//first check for a reserved domain
sqlite3_stmt* query = NULL, *queryFinal;
@@ -177,7 +177,7 @@ am_Error_e DatabaseHandler::enterDomainDB(const am_Domain_s & domainData, am_dom
am_Error_e DatabaseHandler::enterMainConnectionDB(const am_MainConnection_s & mainConnectionData, am_mainConnectionID_t & connectionID)
{
assert(mainConnectionData.mainConnectionID==0);
- assert(mainConnectionData.connectionState>=CS_MIN && mainConnectionData.connectionState<=CS_MAX);
+ assert(mainConnectionData.connectionState>=CS_UNKNOWN && mainConnectionData.connectionState<=CS_MAX);
assert(mainConnectionData.sinkID!=0);
assert(mainConnectionData.sourceID!=0);
@@ -280,7 +280,7 @@ am_Error_e DatabaseHandler::enterSinkDB(const am_Sink_s & sinkData, am_sinkID_t
assert(sinkData.sinkClassID!=0);
// \todo: need to check if class exists?
assert(!sinkData.listConnectionFormats.empty());
- assert(sinkData.muteState>=MS_MIN && sinkData.muteState<=MS_MAX);
+ assert(sinkData.muteState>=MS_UNKNOWN && sinkData.muteState<=MS_MAX);
sqlite3_stmt *query = NULL, *queryFinal = NULL;
int eCode = 0;
@@ -452,7 +452,7 @@ am_Error_e DatabaseHandler::enterSinkDB(const am_Sink_s & sinkData, am_sinkID_t
am_Error_e DatabaseHandler::enterCrossfaderDB(const am_Crossfader_s & crossfaderData, am_crossfaderID_t & crossfaderID)
{
assert(crossfaderData.crossfaderID<DYNAMIC_ID_BOUNDARY);
- assert(crossfaderData.hotSink>=HS_MIN && crossfaderData.hotSink<=HS_MAX);
+ assert(crossfaderData.hotSink>=HS_UNKNOWN && crossfaderData.hotSink<=HS_MAX);
assert(!crossfaderData.name.empty());
assert(existSink(crossfaderData.sinkID_A));
assert(existSink(crossfaderData.sinkID_B));
@@ -656,7 +656,7 @@ am_Error_e DatabaseHandler::enterSourceDB(const am_Source_s & sourceData, am_sou
assert(sourceData.sourceClassID!=0);
// \todo: need to check if class exists?
assert(!sourceData.listConnectionFormats.empty());
- assert(sourceData.sourceState>=SS_MIN && sourceData.sourceState<=SS_MAX);
+ assert(sourceData.sourceState>=SS_UNKNNOWN && sourceData.sourceState<=SS_MAX);
sqlite3_stmt* query = NULL, *queryFinal = NULL;
;
@@ -902,7 +902,7 @@ am_Error_e DatabaseHandler::changeMainConnectionRouteDB(const am_mainConnectionI
am_Error_e DatabaseHandler::changeMainConnectionStateDB(const am_mainConnectionID_t mainconnectionID, const am_ConnectionState_e connectionState)
{
assert(mainconnectionID!=0);
- assert(connectionState>=CS_MIN && connectionState<=CS_MAX);
+ assert(connectionState>=CS_UNKNOWN && connectionState<=CS_MAX);
sqlite3_stmt* query = NULL;
int eCode = 0;
@@ -969,8 +969,8 @@ am_Error_e DatabaseHandler::changeSinkMainVolumeDB(const am_mainVolume_t mainVol
am_Error_e DatabaseHandler::changeSinkAvailabilityDB(const am_Availability_s & availability, const am_sinkID_t sinkID)
{
assert(sinkID!=0);
- assert(availability.availability>=A_MIN && availability.availability<=A_MAX);
- assert(availability.availabilityReason>=AR_MIN && availability.availabilityReason<=AR_MAX);
+ assert(availability.availability>=A_UNKNOWN && availability.availability<=A_MAX);
+ assert(availability.availabilityReason>=AR_UNKNOWN && availability.availabilityReason<=AR_MAX);
sqlite3_stmt* query = NULL;
int eCode = 0;
@@ -1006,7 +1006,7 @@ am_Error_e DatabaseHandler::changeSinkAvailabilityDB(const am_Availability_s & a
am_Error_e DatabaseHandler::changDomainStateDB(const am_DomainState_e domainState, const am_domainID_t domainID)
{
assert(domainID!=0);
- assert(domainState>=DS_MIN && domainState<=DS_MAX);
+ assert(domainState>=DS_UNKNOWN && domainState<=DS_MAX);
sqlite3_stmt* query = NULL;
int eCode = 0;
@@ -1039,7 +1039,7 @@ am_Error_e DatabaseHandler::changDomainStateDB(const am_DomainState_e domainStat
am_Error_e DatabaseHandler::changeSinkMuteStateDB(const am_MuteState_e muteState, const am_sinkID_t sinkID)
{
assert(sinkID!=0);
- assert(muteState>=MS_MIN && muteState<=MS_MAX);
+ assert(muteState>=MS_UNKNOWN && muteState<=MS_MAX);
sqlite3_stmt* query = NULL;
int eCode = 0;
@@ -1074,7 +1074,7 @@ am_Error_e DatabaseHandler::changeSinkMuteStateDB(const am_MuteState_e muteState
am_Error_e DatabaseHandler::changeMainSinkSoundPropertyDB(const am_MainSoundProperty_s & soundProperty, const am_sinkID_t sinkID)
{
- assert(soundProperty.type>=MSP_MIN && soundProperty.type<=MSP_MAX);
+ assert(soundProperty.type>=MSP_UNKNOWN && soundProperty.type<=MSP_MAX);
assert(sinkID!=0);
sqlite3_stmt* query = NULL;
@@ -1108,7 +1108,7 @@ am_Error_e DatabaseHandler::changeMainSinkSoundPropertyDB(const am_MainSoundProp
am_Error_e DatabaseHandler::changeMainSourceSoundPropertyDB(const am_MainSoundProperty_s & soundProperty, const am_sourceID_t sourceID)
{
- assert(soundProperty.type>=MSP_MIN && soundProperty.type<=MSP_MAX);
+ assert(soundProperty.type>=MSP_UNKNOWN && soundProperty.type<=MSP_MAX);
assert(sourceID!=0);
sqlite3_stmt* query = NULL;
@@ -1144,8 +1144,8 @@ am_Error_e DatabaseHandler::changeMainSourceSoundPropertyDB(const am_MainSoundPr
am_Error_e DatabaseHandler::changeSourceAvailabilityDB(const am_Availability_s & availability, const am_sourceID_t sourceID)
{
assert(sourceID!=0);
- assert(availability.availability>=A_MIN && availability.availability<=A_MAX);
- assert(availability.availabilityReason>=AR_MIN && availability.availabilityReason<=AR_MAX);
+ assert(availability.availability>=A_UNKNOWN && availability.availability<=A_MAX);
+ assert(availability.availabilityReason>=AR_UNKNOWN && availability.availabilityReason<=AR_MAX);
sqlite3_stmt* query = NULL;
int eCode = 0;
@@ -1180,7 +1180,7 @@ am_Error_e DatabaseHandler::changeSourceAvailabilityDB(const am_Availability_s &
am_Error_e DatabaseHandler::changeSystemPropertyDB(const am_SystemProperty_s & property)
{
- assert(property.type>=SYP_MIN && property.type<=SYP_MAX);
+ assert(property.type>=SYP_UNKNOWN && property.type<=SYP_MAX);
sqlite3_stmt* query = NULL;
int eCode = 0;
std::string command = "UPDATE " + std::string(SYSTEM_TABLE) + " set value=? WHERE type=?";
@@ -3795,7 +3795,7 @@ am_Error_e DatabaseHandler::getSoureState(const am_sourceID_t sourceID, am_Sourc
{
assert(sourceID!=0);
sqlite3_stmt* query = NULL;
- sourceState = SS_MIN;
+ sourceState = SS_UNKNNOWN;
std::string command = "SELECT sourceState FROM " + std::string(SOURCE_TABLE) + " WHERE sourceID=" + i2s(sourceID);
int eCode = 0;
sqlite3_prepare_v2(mDatabase, command.c_str(), -1, &query, NULL);
@@ -3814,7 +3814,7 @@ am_Error_e DatabaseHandler::getSoureState(const am_sourceID_t sourceID, am_Sourc
am_Error_e DatabaseHandler::changeSourceState(const am_sourceID_t sourceID, const am_SourceState_e sourceState)
{
assert(sourceID!=0);
- assert(sourceState>=SS_MIN && sourceState<=SS_MAX);
+ assert(sourceState>=SS_UNKNNOWN && sourceState<=SS_MAX);
sqlite3_stmt* query = NULL;
std::string command = "UPDATE " + std::string(SOURCE_TABLE) + " SET sourceState=? WHERE sourceID=" + i2s(sourceID);
int eCode = 0;
@@ -3946,7 +3946,7 @@ am_Error_e DatabaseHandler::getDomainState(const am_domainID_t domainID, am_Doma
{
assert(domainID!=0);
sqlite3_stmt* query = NULL;
- state = DS_MIN;
+ state = DS_UNKNOWN;
std::string command = "SELECT domainState FROM " + std::string(DOMAIN_TABLE) + " WHERE domainID=" + i2s(domainID);
int eCode = 0;
sqlite3_prepare_v2(mDatabase, command.c_str(), -1, &query, NULL);
@@ -4164,7 +4164,7 @@ am_Error_e DatabaseHandler::changeSourceVolume(const am_sourceID_t sourceID, con
am_Error_e DatabaseHandler::changeSourceSoundPropertyDB(const am_SoundProperty_s & soundProperty, const am_sourceID_t sourceID)
{
- assert(soundProperty.type>=SP_MIN && soundProperty.type<=SP_MAX);
+ assert(soundProperty.type>=SP_UNKNOWN && soundProperty.type<=SP_MAX);
assert(sourceID!=0);
sqlite3_stmt* query = NULL;
@@ -4199,7 +4199,7 @@ am_Error_e DatabaseHandler::changeSourceSoundPropertyDB(const am_SoundProperty_s
am_Error_e DatabaseHandler::changeSinkSoundPropertyDB(const am_SoundProperty_s & soundProperty, const am_sinkID_t sinkID)
{
- assert(soundProperty.type>=SP_MIN && soundProperty.type<=SP_MAX);
+ assert(soundProperty.type>=SP_UNKNOWN && soundProperty.type<=SP_MAX);
assert(sinkID!=0);
sqlite3_stmt* query = NULL;
@@ -4233,7 +4233,7 @@ am_Error_e DatabaseHandler::changeSinkSoundPropertyDB(const am_SoundProperty_s &
am_Error_e DatabaseHandler::changeCrossFaderHotSink(const am_crossfaderID_t crossfaderID, const am_HotSink_e hotsink)
{
assert(crossfaderID!=0);
- assert(hotsink>=HS_MIN && hotsink>=HS_MAX);
+ assert(hotsink>=HS_UNKNOWN && hotsink>=HS_MAX);
sqlite3_stmt* query = NULL;
int eCode = 0;
diff --git a/AudioManagerDaemon/src/Router.cpp b/AudioManagerDaemon/src/Router.cpp
index 9ed0f5b..c74989a 100644
--- a/AudioManagerDaemon/src/Router.cpp
+++ b/AudioManagerDaemon/src/Router.cpp
@@ -57,8 +57,14 @@ am_Error_e Router::getRoute(const bool onlyfree, const am_sourceID_t sourceID, c
std::vector<am_ConnectionFormat_e> listFormats, listPriorityConnectionFormats;
listPossibleConnectionFormats(sourceID, sinkID, listFormats);
+ //dummy route
+ am_Route_s route;
+ route.sinkID = sinkID;
+ route.sourceID = sourceID;
+ route.route.clear();
+
//get the prio of the Controller:
- mControlSender->getConnectionFormatChoice(sourceID, sinkID, listFormats, listPriorityConnectionFormats);
+ mControlSender->getConnectionFormatChoice(sourceID, sinkID, route, listFormats, listPriorityConnectionFormats);
//no possible connection, so no route ! But we report OK since there is no fault ...
if (listPriorityConnectionFormats.empty())
@@ -144,7 +150,7 @@ am_Error_e Router::getRoute(const bool onlyfree, const am_sourceID_t sourceID, c
//Step through the routes and try to use always the best connectionFormat
std::vector<am_RoutingElement_s>::iterator routingInterator = actualRoutingElement.begin();
gatewayIterator = listGatewayID.begin();
- if (findBestWay(actualRoutingElement, routingInterator, gatewayIterator) != E_OK)
+ if (findBestWay(sinkID, sourceID, actualRoutingElement, routingInterator, gatewayIterator) != E_OK)
{
continue;
}
@@ -170,7 +176,7 @@ void Router::listPossibleConnectionFormats(const am_sourceID_t sourceID, const a
set_intersection(listSourceFormats.begin(), listSourceFormats.end(), listSinkFormats.begin(), listSinkFormats.end(), inserter);
}
-am_Error_e Router::findBestWay(std::vector<am_RoutingElement_s> & listRoute, std::vector<am_RoutingElement_s>::iterator routeIterator, std::vector<am_gatewayID_t>::iterator gatewayIterator)
+am_Error_e Router::findBestWay(am_sinkID_t sinkID, am_sourceID_t sourceID, std::vector<am_RoutingElement_s> & listRoute, std::vector<am_RoutingElement_s>::iterator routeIterator, std::vector<am_gatewayID_t>::iterator gatewayIterator)
{
am_Error_e returnError = E_NOT_POSSIBLE;
std::vector<am_ConnectionFormat_e> listConnectionFormats;
@@ -198,8 +204,13 @@ am_Error_e Router::findBestWay(std::vector<am_RoutingElement_s> & listRoute, std
listMergeConnectionFormats = listConnectionFormats;
}
+ am_Route_s route;
+ route.sinkID = sinkID;
+ route.sourceID = sourceID;
+ route.route = listRoute;
+
//let the controller decide:
- mControlSender->getConnectionFormatChoice(routeIterator->sourceID, routeIterator->sinkID, listMergeConnectionFormats, listPriorityConnectionFormats);
+ mControlSender->getConnectionFormatChoice(routeIterator->sourceID, routeIterator->sinkID, route, listMergeConnectionFormats, listPriorityConnectionFormats);
//we have the list sorted after prios - now we try one after the other with the next part of the route
std::vector<am_ConnectionFormat_e>::iterator connectionFormatIterator = listPriorityConnectionFormats.begin();
@@ -219,7 +230,7 @@ am_Error_e Router::findBestWay(std::vector<am_RoutingElement_s> & listRoute, std
for (; connectionFormatIterator != listPriorityConnectionFormats.end(); ++connectionFormatIterator)
{
routeIterator->connectionFormat = *connectionFormatIterator;
- if ((returnError = findBestWay(listRoute, nextIterator, gatewayIterator)) == E_OK)
+ if ((returnError = findBestWay(sinkID, sourceID, listRoute, nextIterator, gatewayIterator)) == E_OK)
{
break;
}
diff --git a/AudioManagerDaemon/src/main.cpp b/AudioManagerDaemon/src/main.cpp
index ad0e3b8..bc74580 100644
--- a/AudioManagerDaemon/src/main.cpp
+++ b/AudioManagerDaemon/src/main.cpp
@@ -28,14 +28,18 @@
//todo: create systemd compatibility
//todo: all communication like all plugins loaded etc...
-//todo: seperate documentation of test from normal project
//todo: check the startup sequence. Dbus shall be activated last...
//todo: there is a bug in the visible flags of sinks and sources. fix it.
-//todo: make sure all configurations are tested
//todo: clean up startup sequences controller, command and routing interfaces----
+//todo: package generation only works if package directory exists...
#include <config.h>
+#ifdef WITH_TELNET
+#include "TelnetServer.h"
+#endif
+#ifdef WITH_SOCKETHANDLER_LOOP
#include <SocketHandler.h>
+#endif
#ifdef WITH_DBUS_WRAPPER
#include <dbus/DBusWrapper.h>
#endif
@@ -47,7 +51,6 @@
#include "CommandReceiver.h"
#include "ControlReceiver.h"
#include "DatabaseObserver.h"
-#include "TelnetServer.h"
#include "Router.h"
#include "DLTWrapper.h"
#include <sys/resource.h>
@@ -89,11 +92,11 @@ unsigned int telnetport = DEFAULT_TELNETPORT;
unsigned int maxConnections = MAX_TELNETCONNECTIONS;
int fd0, fd1, fd2;
-void OutOfMemoryHandler ()
+void OutOfMemoryHandler()
{
logError("No more memory - bye");
//todo: add gracefull dead here. Do what can be done persistence wise
- exit (1);
+ exit(1);
}
void daemonize()
@@ -225,9 +228,9 @@ static void signalHandler(int sig, siginfo_t *siginfo, void *context)
int main(int argc, char *argv[])
{
DLTWrapper::instance()->registerApp("AudioManagerDeamon", "AudioManagerDeamon");
- DLTWrapper::instance()->registerContext(AudioManager,"Main", "Main Context");
+ DLTWrapper::instance()->registerContext(AudioManager, "Main", "Main Context");
logInfo("The Audiomanager is started");
- log(&AudioManager,DLT_LOG_ERROR,"The version of the Audiomanager",DAEMONVERSION);
+ log(&AudioManager, DLT_LOG_ERROR, "The version of the Audiomanager", DAEMONVERSION);
listCommandPluginDirs.push_back(std::string(DEFAULT_PLUGIN_COMMAND_DIR));
listRoutingPluginDirs.push_back(std::string(DEFAULT_PLUGIN_ROUTING_DIR));
@@ -279,7 +282,7 @@ int main(int argc, char *argv[])
RoutingReceiver iRoutingReceiver(&iDatabaseHandler, &iRoutingSender, &iControlSender, &iSocketHandler, &iDBusWrapper);
ControlReceiver iControlReceiver(&iDatabaseHandler, &iRoutingSender, &iCommandSender, &iSocketHandler, &iRouter);
#ifdef WITH_TELNET
- TelnetServer iTelnetServer(&iSocketHandler,&iCommandSender,&iCommandReceiver,&iRoutingSender,&iRoutingReceiver,&iControlSender,&iControlReceiver,&iDatabaseHandler,&iRouter,telnetport,maxConnections);
+ TelnetServer iTelnetServer(&iSocketHandler, &iCommandSender, &iCommandReceiver, &iRoutingSender, &iRoutingReceiver, &iControlSender, &iControlReceiver, &iDatabaseHandler, &iRouter, telnetport, maxConnections);
#endif
#else /*WITH_SOCKETHANDLER_LOOP */
CommandReceiver iCommandReceiver(&iDatabaseHandler,&iControlSender,&iDBusWrapper);
@@ -296,7 +299,7 @@ int main(int argc, char *argv[])
#endif /*WITH_DBUS_WRAPPER*/
#ifdef WITH_TELNET
- DatabaseObserver iObserver(&iCommandSender, &iRoutingSender,&iTelnetServer);
+ DatabaseObserver iObserver(&iCommandSender, &iRoutingSender, &iTelnetServer);
#else
DatabaseObserver iObserver(&iCommandSender, &iRoutingSender);
#endif