From e124310a45e6e7798a077fa44ef3ee518193b2cf Mon Sep 17 00:00:00 2001 From: christian mueller Date: Thu, 9 Feb 2012 17:20:18 +0100 Subject: [PATCH] * modify RoutingSender Async to match with TestHMI * modify ControlSenderPlugin to have dummy behaviour --- AudioManagerDaemon/src/main.cpp | 1 + CHANGELOG | 5 ++ PluginControlInterface/include/ControlSender.h | 39 ++++++++-- PluginControlInterface/src/ControlSender.cpp | 82 ++++++++++++---------- .../src/RoutingSenderAsync.cpp | 20 +++--- includes/config.h | 10 +-- 6 files changed, 99 insertions(+), 58 deletions(-) diff --git a/AudioManagerDaemon/src/main.cpp b/AudioManagerDaemon/src/main.cpp index 54c4639..82bac88 100644 --- a/AudioManagerDaemon/src/main.cpp +++ b/AudioManagerDaemon/src/main.cpp @@ -33,6 +33,7 @@ //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: add getMainConnectionData in commandreceive interface to retrieve infos about mainconnections #include #include #ifdef WITH_DBUS_WRAPPER diff --git a/CHANGELOG b/CHANGELOG index d8d19a6..bfc4fdb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +commit 2ddacca29eccd4192add2b17ad6af357b52ea29b +Author: Frank Herchet + + * fix some methods in CAmTelnetMenuHelper + commit a0042153abf05408409d06c5183efe0905b18055 Author: Frank Herchet diff --git a/PluginControlInterface/include/ControlSender.h b/PluginControlInterface/include/ControlSender.h index d21856b..bd8d88f 100644 --- a/PluginControlInterface/include/ControlSender.h +++ b/PluginControlInterface/include/ControlSender.h @@ -96,20 +96,49 @@ private: class findHandle { - am_Handle_s mHandle; + handleStatus mHandle; public: - explicit findHandle(am_Handle_s handle) : + explicit findHandle(handleStatus handle) : mHandle(handle) { } - bool operator()(handleStatus* handle) const + bool operator()(const handleStatus& handle) const { - return (handle->handle.handle == mHandle.handle); + return (handle.handle.handle == mHandle.handle.handle); + } + }; + + struct checkHandle + { + + handleStatus mHandleStatus; + explicit checkHandle(const handleStatus& value) : + mHandleStatus(value) + { + } + + bool operator()(const handleStatus &value) + { + return !value.status; + } + }; + + struct checkMainConnectionID + { + am_MainConnection_s mMainConnection; + explicit checkMainConnectionID(const am_MainConnection_s& mainConnection) : + mMainConnection(mainConnection) + { + } + bool operator()(const am_MainConnection_s& mainConnection) + { + if (mMainConnection.connectionID == mainConnection.connectionID) + return true; + return false; } }; std::vector mListOpenConnections; - ; }; #endif /* CONTROLSENDER_H_ */ diff --git a/PluginControlInterface/src/ControlSender.cpp b/PluginControlInterface/src/ControlSender.cpp index c65059d..4592459 100644 --- a/PluginControlInterface/src/ControlSender.cpp +++ b/PluginControlInterface/src/ControlSender.cpp @@ -26,6 +26,7 @@ #include "ControlSender.h" #include "control/ControlReceiveInterface.h" #include +#include using namespace am; @@ -40,8 +41,7 @@ extern "C" void destroyControlPluginInterface(ControlSendInterface* controlSendI } ControlSenderPlugin::ControlSenderPlugin() : - mControlReceiveInterface(NULL), - mListOpenConnections() + mControlReceiveInterface(NULL), mListOpenConnections() { } @@ -83,29 +83,40 @@ am_Error_e ControlSenderPlugin::hookUserConnectionRequest(const am_sourceID_t so for (; it != listRoutes[0].route.end(); ++it) { mControlReceiveInterface->connect(handle, connectionID, it->connectionFormat, it->sourceID, it->sinkID); - //this is primitive and works only for one connect at a time... otherwise the handles get mixed up! handleStatus status; - status.handle=handle; - status.status=false; + status.handle = handle; + status.status = false; listHandleStaus.push_back(status); } am_MainConnection_s mainConnectionData; - mainConnectionData.connectionID=0; - mainConnectionData.connectionState=CS_CONNECTING; - mainConnectionData.delay=0; - mainConnectionData.route=listRoutes[0]; - mControlReceiveInterface->enterMainConnectionDB(mainConnectionData,mainConnectionID); + mainConnectionData.connectionID = 0; + mainConnectionData.connectionState = CS_CONNECTING; + mainConnectionData.delay = 0; + mainConnectionData.route = listRoutes[0]; + mControlReceiveInterface->enterMainConnectionDB(mainConnectionData, mainConnectionID); mainConnectionSet set; - set.connectionID=mainConnectionID; - set.listHandleStaus=listHandleStaus; + set.connectionID = mainConnectionID; + set.listHandleStaus = listHandleStaus; mListOpenConnections.push_back(set); return E_OK; } am_Error_e ControlSenderPlugin::hookUserDisconnectionRequest(const am_mainConnectionID_t connectionID) { - (void) connectionID; - return E_NOT_USED; +// //first check if there is a connectionID like that +// std::vector listMainConnections; +// mControlReceiveInterface->getListMainConnections(listMainConnections); +// std::vector::iterator it(listMainConnections.begin()); +// am_MainConnection_s mainConnection; +// mainConnection=connectionID; +// if(listMainConnections.end()==(it=std::find(listMainConnections.begin(),listMainConnections.end(),checkMainConnectionID(mainConnection)))) +// return E_NON_EXISTENT; +// +// std::vector::iterator routeIterator(it->route.route.begin()); +// for(;routeIterator!=it->route.route.end();++routeIterator) +// { +// mControlReceiveInterface->disconnect(handle,routeIterator->) +// } } am_Error_e ControlSenderPlugin::hookUserSetMainSinkSoundProperty(const am_sinkID_t sinkID, const am_MainSoundProperty_s & soundProperty) @@ -270,31 +281,26 @@ void ControlSenderPlugin::hookSystemTimingInformationChanged(const am_mainConnec void ControlSenderPlugin::cbAckConnect(const am_Handle_s handle, const am_Error_e errorID) { - (void)errorID; - //here is no error check !!!! - //\todo: add error check here - //\todo: algorith can be much better written here + (void) errorID; + //\todo:error checking std::vector::iterator it(mListOpenConnections.begin()); -// for(;it!=mListOpenConnections.end();++it) -// { -// std::vector::iterator hit; -// hit=std::find_if(it->listHandleStaus.begin(),it->listHandleStaus.end(),findHandle); -// } -// -// bool allOk = true; -// std::list::iterator it(mListOpenHandles.begin()); -// -// for (; it != mListOpenHandles.end(); ++it) -// { -// if (it->handle.handle == handle.handle) -// it->ok = true; -// allOk = allOk && it->ok; -// } -// -// if (allOk) -// { -// mControlReceiveInterface->changeMainConnectionStateDB(mCurrentID,CS_CONNECTED); -// } + for (; it != mListOpenConnections.end(); ++it) + { + std::vector::iterator hit; + handleStatus status; + status.status=true; + status.handle=handle; + hit = std::find_if(it->listHandleStaus.begin(), it->listHandleStaus.end(), findHandle(status)); + if (hit == it->listHandleStaus.end()) + continue; + hit->status=true; + if (it->listHandleStaus.end()==std::find_if(it->listHandleStaus.begin(),it->listHandleStaus.end(),checkHandle(status))) + { + mControlReceiveInterface->changeMainConnectionStateDB(it->connectionID, CS_CONNECTED); + mListOpenConnections.erase(it); + break; + } + } } void ControlSenderPlugin::cbAckDisconnect(const am_Handle_s handle, const am_Error_e errorID) diff --git a/PluginRoutingInterfaceAsync/src/RoutingSenderAsync.cpp b/PluginRoutingInterfaceAsync/src/RoutingSenderAsync.cpp index 0b0b027..5027452 100644 --- a/PluginRoutingInterfaceAsync/src/RoutingSenderAsync.cpp +++ b/PluginRoutingInterfaceAsync/src/RoutingSenderAsync.cpp @@ -247,7 +247,7 @@ pPool(pool), // //a timeout happened if(errno == ETIMEDOUT) { - logError("Worker::timedWait timeout waiting error"); + logInfo("Worker::timedWait timed out - no bug !"); return (false); } else //failure in waiting, nevertheless, we quit the thread... @@ -768,12 +768,12 @@ std::vector AsyncRoutingSender::createSinkTable() std::vector listMainSoundProperties; am_MainSoundProperty_s msp; - msp.type=MSP_BASS; - msp.value=5; + msp.type = MSP_BASS; + msp.value = 5; listMainSoundProperties.push_back(msp); - msp.type=MSP_MID; + msp.type = MSP_MID; listMainSoundProperties.push_back(msp); - msp.type=MSP_TREBLE; + msp.type = MSP_TREBLE; listMainSoundProperties.push_back(msp); for (int16_t i = 0; i <= 10; i++) { @@ -787,11 +787,11 @@ std::vector AsyncRoutingSender::createSinkTable() item.available.availability = A_AVAILABLE; item.available.availabilityReason = AR_UNKNOWN; item.listSoundProperties.push_back(sp); - item.listMainSoundProperties=listMainSoundProperties; + item.listMainSoundProperties = listMainSoundProperties; item.visible = true; item.listConnectionFormats.push_back(CF_ANALOG); - item.muteState=MS_MUTED; - item.mainVolume=0; + item.muteState = MS_MUTED; + item.mainVolume = 0; table.push_back(item); } return (table); @@ -831,7 +831,7 @@ void AsyncRoutingSender::insertConnectionSafe(am_connectionID_t connectionID, am void AsyncRoutingSender::removeHandleSafe(uint16_t handle) { pthread_mutex_lock(&mMapHandleWorkerMutex); - if (mMapHandleWorker.erase(handle)) + if (!mMapHandleWorker.erase(handle)) { logError("AsyncRoutingSender::removeHandle could not remove handle"); } @@ -841,7 +841,7 @@ void AsyncRoutingSender::removeHandleSafe(uint16_t handle) void AsyncRoutingSender::removeConnectionSafe(am_connectionID_t connectionID) { pthread_mutex_lock(&mMapConnectionMutex); - if (mMapConnectionIDRoute.erase(connectionID)) + if (!mMapConnectionIDRoute.erase(connectionID)) { logError("AsyncRoutingSender::removeConnectionSafe could not remove connection"); } diff --git a/includes/config.h b/includes/config.h index 0ba258a..a055ddd 100644 --- a/includes/config.h +++ b/includes/config.h @@ -1,7 +1,7 @@ #ifndef _CONFIG_H #define _CONFIG_H -#define DAEMONVERSION "ver-0.0.1-37-ga004215" +#define DAEMONVERSION "ver-0.0.9-14-g2ddacca" #define WITH_DBUS_WRAPPER #define WITH_SOCKETHANDLER_LOOP @@ -10,9 +10,9 @@ #define WITH_TELNET #define GLIB_DBUS_TYPES_TOLERANT -#define DEFAULT_PLUGIN_COMMAND_DIR "/home/demo/git/AudioManager/bin/plugins/command" -#define DEFAULT_PLUGIN_ROUTING_DIR "/home/demo/git/AudioManager/bin/plugins/routing" -#define CONTROLLER_PLUGIN "/home/demo/git/AudioManager/bin/plugins/control/libPluginControlInterface.so" +#define DEFAULT_PLUGIN_COMMAND_DIR "/home/christian/workspace/AudioManager/bin/plugins/command" +#define DEFAULT_PLUGIN_ROUTING_DIR "/home/christian/workspace/AudioManager/bin/plugins/routing" +#define CONTROLLER_PLUGIN "/home/christian/workspace/AudioManager/bin/plugins/control/libPluginControlInterface.so" #define DEFAULT_TELNETPORT 6060 #define MAX_TELNETCONNECTIONS 3 @@ -20,6 +20,6 @@ #define DBUS_SERVICE_PREFIX "org.genivi.audiomanager" #define DBUS_SERVICE_OBJECT_PATH "/org/genivi/audiomanager" -#define INTROSPECTION_COMMAND_XML_FILE "/home/demo/git/AudioManager/includes/dbus/CommandInterface.xml" +#define INTROSPECTION_COMMAND_XML_FILE "/home/christian/workspace/AudioManager/includes/dbus/CommandInterface.xml" #endif /* _CONFIG_H */ -- 2.7.4