summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon
diff options
context:
space:
mode:
authorchristian mueller <christian.ei.mueller@bmw.de>2012-02-07 15:59:38 +0100
committerchristian mueller <christian.ei.mueller@bmw.de>2012-02-07 15:59:38 +0100
commitf00468f45b72e2693b79af30665f683967deb5a7 (patch)
treee60b273fd55e2c450b4321ebed2701dbd226a43a /AudioManagerDaemon
parente6b739cc7e901ca8637bf3f5a72f5956cd764249 (diff)
downloadaudiomanager-f00468f45b72e2693b79af30665f683967deb5a7.tar.gz
* restructered document generation. Now only the functions of the daemon are generated
* sockethandler: take [0] instead of .front. added todo to make sockethandler faster * added test for local routing
Diffstat (limited to 'AudioManagerDaemon')
-rw-r--r--AudioManagerDaemon/CMakeLists.txt16
-rw-r--r--AudioManagerDaemon/src/SocketHandler.cpp19
-rw-r--r--AudioManagerDaemon/test/routing/routingTest.cpp64
3 files changed, 84 insertions, 15 deletions
diff --git a/AudioManagerDaemon/CMakeLists.txt b/AudioManagerDaemon/CMakeLists.txt
index b10c8fb..e14f222 100644
--- a/AudioManagerDaemon/CMakeLists.txt
+++ b/AudioManagerDaemon/CMakeLists.txt
@@ -89,14 +89,14 @@ IF(WITH_TESTS)
add_subdirectory (test)
ENDIF(WITH_TESTS)
-IF(WITH_DOCUMENTATION)
- file(MAKE_DIRECTORY ${DOC_OUTPUT_PATH})
- configure_file(${DOXY_FILE} ${DOC_OUTPUT_PATH}/Doxyfile @ONLY IMMEDIATE)
- add_custom_target (Docs ALL
- COMMAND ${DOXYGEN_EXECUTABLE} ${DOC_OUTPUT_PATH}/Doxyfile WORKING_DIRECTORY ${DOC_OUTPUT_PATH}
- SOURCES ${PROJECT_BINARY_DIR} ${DOC_OUTPUT_PATH}/Doxyfile
- )
-ENDIF(WITH_DOCUMENTATION)
+#IF(WITH_DOCUMENTATION)
+# file(MAKE_DIRECTORY ${DOC_OUTPUT_PATH})
+# configure_file(${DOXY_FILE} ${DOC_OUTPUT_PATH}/Doxyfile @ONLY IMMEDIATE)
+# add_custom_target (Docs ALL
+# COMMAND ${DOXYGEN_EXECUTABLE} ${DOC_OUTPUT_PATH}/Doxyfile WORKING_DIRECTORY ${DOC_OUTPUT_PATH}
+# SOURCES ${PROJECT_BINARY_DIR} ${DOC_OUTPUT_PATH}/Doxyfile
+# )
+#ENDIF(WITH_DOCUMENTATION)
INSTALL(TARGETS AudioManager
RUNTIME
diff --git a/AudioManagerDaemon/src/SocketHandler.cpp b/AudioManagerDaemon/src/SocketHandler.cpp
index eb02db4..fa7fee4 100644
--- a/AudioManagerDaemon/src/SocketHandler.cpp
+++ b/AudioManagerDaemon/src/SocketHandler.cpp
@@ -35,6 +35,7 @@
#include "DLTWrapper.h"
//todo: implement time correction if timer was interrupted by call
+//todo: change hitlist to a list that holds all information, because entering and removing items will be cheaper than with std::vector
using namespace am;
@@ -85,7 +86,8 @@ void SocketHandler::start_listenting()
shPollPrepare *prep = NULL;
for (; prepIter != mListPoll.end(); ++prepIter)
{
- if ((prep = prepIter->prepareCB) != NULL) prep->Call(prepIter->handle, prepIter->userData);
+ if ((prep = prepIter->prepareCB) != NULL)
+ prep->Call(prepIter->handle, prepIter->userData);
}
if (mRecreatePollfds)
@@ -100,7 +102,7 @@ void SocketHandler::start_listenting()
#ifdef WITH_PPOLL
timespec buffertime;
- if ((pollStatus = ppoll(&mfdPollingArray.front(), mfdPollingArray.size(), insertTime(buffertime), &sigmask)) < 0)
+ if ((pollStatus = ppoll(&mfdPollingArray[0], mfdPollingArray.size(), insertTime(buffertime), &sigmask)) < 0)
{
if (errno == EINTR)
{
@@ -109,14 +111,14 @@ void SocketHandler::start_listenting()
}
else
{
- logError("SocketHandler::start_listenting ppoll returned with error",errno);
+ logError("SocketHandler::start_listenting ppoll returned with error", errno);
exit(0);
}
}
#else
//sigprocmask (SIG_SETMASK, &mask, &oldmask);
- if((pollStatus=poll(&mfdPollingArray.front(),mfdPollingArray.size(),timespec2ms(mTimeout)))<0)
+ if((pollStatus=poll(&mfdPollingArray[0],mfdPollingArray.size(),timespec2ms(mTimeout)))<0)
{
if(errno==EINTR)
@@ -144,7 +146,8 @@ void SocketHandler::start_listenting()
do
{
it = std::find_if(it, mfdPollingArray.end(), onlyFiredEvents);
- if (it != mfdPollingArray.end()) hitList.push_back(std::distance(mfdPollingArray.begin(), it++));
+ if (it != mfdPollingArray.end())
+ hitList.push_back(std::distance(mfdPollingArray.begin(), it++));
} while (it != mfdPollingArray.end());
@@ -153,7 +156,8 @@ void SocketHandler::start_listenting()
for (; hListIt != hitList.end(); ++hListIt)
{
shPollFired* fire = NULL;
- if ((fire = listPoll.at(*hListIt).firedCB) != NULL) fire->Call(mfdPollingArray.at(*hListIt), listPoll.at(*hListIt).handle, listPoll.at(*hListIt).userData);
+ if ((fire = listPoll.at(*hListIt).firedCB) != NULL)
+ fire->Call(mfdPollingArray.at(*hListIt), listPoll.at(*hListIt).handle, listPoll.at(*hListIt).userData);
}
//stage 2, lets ask around if some dispatching is necessary, if not, they are taken from the hitlist
@@ -217,7 +221,8 @@ void SocketHandler::stop_listening()
*/
am_Error_e SocketHandler::addFDPoll(const int fd, const int16_t event, shPollPrepare *prepare, shPollFired *fired, shPollCheck *check, shPollDispatch *dispatch, void* userData, sh_pollHandle_t& handle)
{
- if (!fdIsValid(fd)) return E_NON_EXISTENT;
+ if (!fdIsValid(fd))
+ return E_NON_EXISTENT;
sh_poll_s pollData;
pollData.pollfdValue.fd = fd;
diff --git a/AudioManagerDaemon/test/routing/routingTest.cpp b/AudioManagerDaemon/test/routing/routingTest.cpp
index 463bbfd..d160e1a 100644
--- a/AudioManagerDaemon/test/routing/routingTest.cpp
+++ b/AudioManagerDaemon/test/routing/routingTest.cpp
@@ -77,6 +77,70 @@ ACTION(returnConnectionFormat){
arg3=arg2;
}
+//test that checks just sinks and source in a domain
+TEST_F(routingTest,simpleRoute2withDomain)
+{
+ EXPECT_CALL(pMockInterface,cbNumberOfSourcesChanged()).Times(1);
+ EXPECT_CALL(pMockInterface,cbNumberOfSinksChanged()).Times(1);
+ EXPECT_CALL(pMockControlInterface,getConnectionFormatChoice(_,_,_,_)).WillRepeatedly(DoAll(returnConnectionFormat(), Return(E_OK)));
+
+ //initialize 2 domains
+ am_Domain_s domain1;
+ am_domainID_t domainID1;
+
+ domain1.domainID = 0;
+ domain1.name = "domain1";
+ domain1.busname = "domain1bus";
+ domain1.state = DS_CONTROLLED;
+
+ ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain1,domainID1));
+
+ am_Source_s source;
+ am_sourceID_t sourceID;
+
+ source.domainID = domainID1;
+ source.name = "source1";
+ source.sourceState = SS_ON;
+ source.sourceID = 0;
+ source.sourceClassID = 5;
+ source.listConnectionFormats.push_back(CF_ANALOG);
+
+ ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
+
+ am_Sink_s sink;
+ am_sinkID_t sinkID;
+
+ sink.domainID = domainID1;
+ sink.name = "sink1";
+ sink.sinkID = 0;
+ sink.sinkClassID = 5;
+ sink.muteState = MS_MUTED;
+ sink.listConnectionFormats.push_back(CF_ANALOG);
+
+ ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
+
+ std::vector<am_Route_s> listRoutes;
+ std::vector<am_RoutingElement_s> listRoutingElements;
+ am_RoutingElement_s hopp1;
+
+ hopp1.sinkID = sinkID;
+ hopp1.sourceID = sourceID;
+ hopp1.domainID = domainID1;
+ hopp1.connectionFormat = source.listConnectionFormats[0];
+
+ listRoutingElements.push_back(hopp1);
+
+ am_Route_s compareRoute;
+ compareRoute.route = listRoutingElements;
+ compareRoute.sinkID = sinkID;
+ compareRoute.sourceID = sourceID;
+
+ ASSERT_EQ(E_OK, pRouter.getRoute(true,sourceID,sinkID,listRoutes));
+ ASSERT_EQ(1, listRoutes.size());
+ ASSERT_TRUE(pCF.compareRoute(compareRoute,listRoutes[0]));
+
+}
+
//test that checks just 2 domains, one sink one source with only one connection format each
TEST_F(routingTest,simpleRoute2DomainsOnlyFree)
{