summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Koch <martin.koch@ese.de>2020-06-26 12:21:50 +0200
committerMartin Koch <martin.koch@ese.de>2020-07-01 14:37:32 +0200
commitefe1f88f36383ab1f1ad657e14e4fd4885eaf55f (patch)
tree4a312c4a5f83a617b2dd4c39838b459249080dc7
parent3270ab2427164fa41c3bcb4e2662ea625f926d84 (diff)
downloadaudiomanager-efe1f88f36383ab1f1ad657e14e4fd4885eaf55f.tar.gz
AM: change handling or registerEarlyConnection
- use type am_Route_s for announcement from routing side - register also main connection internally - forward route details to controller Signed-off-by: Martin Koch <martin.koch@ese.de>
-rw-r--r--AudioManagerCore/include/CAmControlReceiver.h1
-rw-r--r--AudioManagerCore/include/CAmControlSender.h2
-rw-r--r--AudioManagerCore/include/CAmRoutingReceiver.h2
-rw-r--r--AudioManagerCore/src/CAmControlReceiver.cpp5
-rw-r--r--AudioManagerCore/src/CAmControlSender.cpp4
-rw-r--r--AudioManagerCore/src/CAmRoutingReceiver.cpp43
-rw-r--r--include/IAmControl.h9
-rw-r--r--include/IAmRouting.h4
8 files changed, 52 insertions, 18 deletions
diff --git a/AudioManagerCore/include/CAmControlReceiver.h b/AudioManagerCore/include/CAmControlReceiver.h
index a7cb394..73aac03 100644
--- a/AudioManagerCore/include/CAmControlReceiver.h
+++ b/AudioManagerCore/include/CAmControlReceiver.h
@@ -103,6 +103,7 @@ public:
am_Error_e getGatewayInfoDB(const am_gatewayID_t gatewayID, am_Gateway_s &gatewayData) const;
am_Error_e getConverterInfoDB(const am_converterID_t converterID, am_Converter_s &converterData) const;
am_Error_e getCrossfaderInfoDB(const am_crossfaderID_t crossfaderID, am_Crossfader_s &crossfaderData) const;
+ am_Error_e getConnectionInfoDB(const am_connectionID_t connectionID, am_Connection_s &connectionData) const;
am_Error_e getMainConnectionInfoDB(const am_mainConnectionID_t mainConnectionID, am_MainConnection_s &mainConnectionData) const;
am_Error_e getListSinksOfDomain(const am_domainID_t domainID, std::vector<am_sinkID_t> &listSinkID) const;
am_Error_e getListSourcesOfDomain(const am_domainID_t domainID, std::vector<am_sourceID_t> &listSourceID) const;
diff --git a/AudioManagerCore/include/CAmControlSender.h b/AudioManagerCore/include/CAmControlSender.h
index 494f7f3..f90116d 100644
--- a/AudioManagerCore/include/CAmControlSender.h
+++ b/AudioManagerCore/include/CAmControlSender.h
@@ -72,7 +72,7 @@ public:
am_Error_e hookSystemRegisterCrossfader(const am_Crossfader_s &crossfaderData, am_crossfaderID_t &crossfaderID);
am_Error_e hookSystemDeregisterCrossfader(const am_crossfaderID_t crossfaderID);
am_Error_e hookSystemRegisterEarlyConnection(am_domainID_t domainID
- , const am_MainConnection_s &mainConnectionData);
+ , const am_MainConnection_s &mainConnectionData, const am_Route_s &route);
void hookSystemSinkVolumeTick(const am_Handle_s handle, const am_sinkID_t sinkID, const am_volume_t volume);
void hookSystemSourceVolumeTick(const am_Handle_s handle, const am_sourceID_t sourceID, const am_volume_t volume);
void hookSystemInterruptStateChange(const am_sourceID_t sourceID, const am_InterruptState_e interruptState);
diff --git a/AudioManagerCore/include/CAmRoutingReceiver.h b/AudioManagerCore/include/CAmRoutingReceiver.h
index 3f85ba7..fe12ccd 100644
--- a/AudioManagerCore/include/CAmRoutingReceiver.h
+++ b/AudioManagerCore/include/CAmRoutingReceiver.h
@@ -60,7 +60,7 @@ public:
am_Error_e peekDomain(const std::string &name, am_domainID_t &domainID);
am_Error_e registerDomain(const am_Domain_s &domainData, am_domainID_t &domainID);
am_Error_e deregisterDomain(const am_domainID_t domainID);
- am_Error_e registerEarlyConnection(am_domainID_t domainID, const std::vector< am_Connection_s > &route
+ am_Error_e registerEarlyConnection(am_domainID_t domainID, const am_Route_s &route
, am_ConnectionState_e state);
am_Error_e registerGateway(const am_Gateway_s &gatewayData, am_gatewayID_t &gatewayID);
am_Error_e registerConverter(const am_Converter_s &converterData, am_converterID_t &converterID);
diff --git a/AudioManagerCore/src/CAmControlReceiver.cpp b/AudioManagerCore/src/CAmControlReceiver.cpp
index bbd1116..737e659 100644
--- a/AudioManagerCore/src/CAmControlReceiver.cpp
+++ b/AudioManagerCore/src/CAmControlReceiver.cpp
@@ -291,6 +291,11 @@ am_Error_e CAmControlReceiver::getSourceInfoDB(const am_sourceID_t sourceID, am_
return (mDatabaseHandler->getSourceInfoDB(sourceID, sourceData));
}
+am_Error_e CAmControlReceiver::getConnectionInfoDB(const am_connectionID_t connectionID, am_Connection_s &connectionData) const
+{
+ return (mDatabaseHandler->getConnectionInfoDB(connectionID, connectionData));
+}
+
am_Error_e CAmControlReceiver::getMainConnectionInfoDB(const am_mainConnectionID_t mainConnectionID, am_MainConnection_s &mainConnectionData) const
{
return (mDatabaseHandler->getMainConnectionInfoDB(mainConnectionID, mainConnectionData));
diff --git a/AudioManagerCore/src/CAmControlSender.cpp b/AudioManagerCore/src/CAmControlSender.cpp
index 0d28dfb..6bd4f07 100644
--- a/AudioManagerCore/src/CAmControlSender.cpp
+++ b/AudioManagerCore/src/CAmControlSender.cpp
@@ -320,10 +320,10 @@ am_Error_e CAmControlSender::hookSystemDeregisterCrossfader(const am_crossfaderI
}
am_Error_e CAmControlSender::hookSystemRegisterEarlyConnection(am_domainID_t domainID
- , const am_MainConnection_s &mainConnectionData)
+ , const am_MainConnection_s &mainConnectionData, const am_Route_s &route)
{
assert(mController);
- return mController->hookSystemRegisterEarlyMainConnection(domainID, mainConnectionData);
+ return mController->hookSystemRegisterEarlyMainConnection(domainID, mainConnectionData, route);
}
void CAmControlSender::hookSystemSinkVolumeTick(const am_Handle_s handle, const am_sinkID_t sinkID, const am_volume_t volume)
diff --git a/AudioManagerCore/src/CAmRoutingReceiver.cpp b/AudioManagerCore/src/CAmRoutingReceiver.cpp
index 8f4d1ba..29aea65 100644
--- a/AudioManagerCore/src/CAmRoutingReceiver.cpp
+++ b/AudioManagerCore/src/CAmRoutingReceiver.cpp
@@ -247,37 +247,58 @@ am_Error_e CAmRoutingReceiver::deregisterDomain(const am_domainID_t domainID)
}
am_Error_e CAmRoutingReceiver::registerEarlyConnection(am_domainID_t domainID
- , const std::vector< am_Connection_s > &route, am_ConnectionState_e state)
+ , const am_Route_s &route, am_ConnectionState_e state)
{
- if (route.size() < 1)
+ const auto &segmentList = route.route;
+ if (segmentList.size() < 1)
{
- logWarning(__METHOD_NAME__, "route empty");
+ logError(__METHOD_NAME__, "empty route from domain", domainID);
return E_NOT_POSSIBLE;
}
am_MainConnection_s mainConnectionData;
- mainConnectionData.sourceID = route.front().sourceID;
- mainConnectionData.sinkID = route.back().sinkID;
+ mainConnectionData.sourceID = segmentList.front().sourceID;
+ mainConnectionData.sinkID = segmentList.back().sinkID;
mainConnectionData.connectionState = state;
- mainConnectionData.listConnectionID.reserve(route.size());
- for (auto & conn : route)
+ mainConnectionData.listConnectionID.reserve(segmentList.size());
+ for (const auto &segment : segmentList)
{
- am_connectionID_t connectionID;
- am_Error_e success = mpDatabaseHandler->enterConnectionDB(conn, connectionID);
+ am_Connection_s conn;
+ conn.sourceID = segment.sourceID;
+ conn.sinkID = segment.sinkID;
+ conn.connectionFormat = segment.connectionFormat;
+ conn.connectionID = 0;
+ am_Error_e success = mpDatabaseHandler->enterConnectionDB(conn, conn.connectionID);
switch (success)
{
case E_OK:
case E_ALREADY_EXISTS:
case E_NO_CHANGE:
- mainConnectionData.listConnectionID.push_back(connectionID);
+ mainConnectionData.listConnectionID.push_back(conn.connectionID);
break;
default:
+ logError(__METHOD_NAME__, "failed to enter connection segment", conn.sourceID
+ , "to", conn.sinkID, "from domain", domainID, "error=", success);
return success;
}
}
- return mpControlSender->hookSystemRegisterEarlyConnection(domainID, mainConnectionData);
+ am_Error_e success = mpDatabaseHandler->enterMainConnectionDB(mainConnectionData, mainConnectionData.mainConnectionID);
+ switch (success)
+ {
+ case E_OK:
+ case E_ALREADY_EXISTS:
+ case E_NO_CHANGE:
+ break;
+
+ default:
+ logError(__METHOD_NAME__, "failed to enter main connection", mainConnectionData.sourceID
+ , "to", mainConnectionData.sinkID, "from domain", domainID, "error=", success);
+ return success;
+ }
+
+ return mpControlSender->hookSystemRegisterEarlyConnection(domainID, mainConnectionData, route);
}
am_Error_e CAmRoutingReceiver::registerGateway(const am_Gateway_s &gatewayData, am_gatewayID_t &gatewayID)
diff --git a/include/IAmControl.h b/include/IAmControl.h
index d393b56..e3fe74c 100644
--- a/include/IAmControl.h
+++ b/include/IAmControl.h
@@ -439,6 +439,12 @@ public:
*/
virtual am_Error_e getCrossfaderInfoDB(const am_crossfaderID_t crossfaderID, am_Crossfader_s& crossfaderData) const =0;
/**
+ * returns details of a connection, including involved sources and sinks
+ * @return E_OK on success, E_DATABASE_ERROR on error, E_NON_EXISTENT if
+ * crossfader was not found
+ */
+ virtual am_Error_e getConnectionInfoDB(const am_connectionID_t connectionID, am_Connection_s& connectionData) const =0;
+ /**
* returns sources and the sink of a crossfader
* @return E_OK on success, E_DATABASE_ERROR on error, E_NON_EXISTENT if
* crossfader was not found
@@ -882,6 +888,7 @@ public:
*
* @param domainID: home domain announcing this early connection
* @param mainConnectionData: details of main connection
+ * @param route: route details as requested from routing side
*
* @return success indicator. Controller should use E_OK on success,
* E_ALREADY_EXISTS or E_NO_CHANGE if given connection is already registered,
@@ -889,7 +896,7 @@ public:
* E_NOT_POSSIBLE if feature is not supported by the controller
*/
virtual am_Error_e hookSystemRegisterEarlyMainConnection(am_domainID_t domainID
- , const am_MainConnection_s &mainConnectionData)
+ , const am_MainConnection_s &mainConnectionData, const am_Route_s &route)
{
return E_NOT_POSSIBLE; // empty default implementation
}
diff --git a/include/IAmRouting.h b/include/IAmRouting.h
index c58c721..b86e782 100644
--- a/include/IAmRouting.h
+++ b/include/IAmRouting.h
@@ -144,7 +144,7 @@ public:
* Support announcement of audio connections already active at AM startup
*
* @param domainID: home domain announcing this early connection
- * @param route: list of sub-connections (populated with unspecified connectionID=0 field)
+ * @param route: list of connection segments
* @param state: either stable CS_CONNECTED, CS_DISCONNECTED, CS_SUSPENDED
* or transient CS_CONNECTING, CS_DISCONNECTING
*
@@ -154,7 +154,7 @@ public:
* CS_CONNECTING or CS_DISCONNECTING, a secondary registerEarlyConnection()
* call is expected once a stable state is reached
*/
- virtual am_Error_e registerEarlyConnection(am_domainID_t domainID, const std::vector< am_Connection_s > &route
+ virtual am_Error_e registerEarlyConnection(am_domainID_t domainID, const am_Route_s &route
, am_ConnectionState_e state) = 0;
/**