diff options
author | Frank Herchet <frank.fh.herchet@bmw.de> | 2012-02-22 09:43:32 +0100 |
---|---|---|
committer | Frank Herchet <frank.fh.herchet@bmw.de> | 2012-02-22 09:43:32 +0100 |
commit | 065d7f02aef0dc9f7e4bbf2627dcf3dad7a3280c (patch) | |
tree | 37d24bc497b6b467e8c8066a6c44fea36a6d8081 /AudioManagerDaemon/src | |
parent | 9c209bd92d9400012765d86fc5bd51ddfe266071 (diff) | |
parent | 479a20f551b66406a4a6770fe09d17e23d38ed14 (diff) | |
download | audiomanager-065d7f02aef0dc9f7e4bbf2627dcf3dad7a3280c.tar.gz |
Merge branch 'master' of qmuc300924:AudioManager
Diffstat (limited to 'AudioManagerDaemon/src')
-rw-r--r-- | AudioManagerDaemon/src/ControlReceiver.cpp | 14 | ||||
-rw-r--r-- | AudioManagerDaemon/src/ControlSender.cpp | 9 | ||||
-rw-r--r-- | AudioManagerDaemon/src/DatabaseHandler.cpp | 42 | ||||
-rw-r--r-- | AudioManagerDaemon/src/Router.cpp | 21 | ||||
-rw-r--r-- | AudioManagerDaemon/src/main.cpp | 21 |
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 |