summaryrefslogtreecommitdiff
path: root/PluginRoutingInterfaceCAPI
diff options
context:
space:
mode:
Diffstat (limited to 'PluginRoutingInterfaceCAPI')
-rwxr-xr-xPluginRoutingInterfaceCAPI/fidl/RoutingInterface.fidl61
-rw-r--r--PluginRoutingInterfaceCAPI/include/CAmRoutingSenderCommon.h1
-rw-r--r--PluginRoutingInterfaceCAPI/include/CAmRoutingService.h6
-rw-r--r--PluginRoutingInterfaceCAPI/src/CAmRoutingSenderCommon.cpp12
-rw-r--r--PluginRoutingInterfaceCAPI/src/CAmRoutingService.cpp23
-rw-r--r--PluginRoutingInterfaceCAPI/test/CAmRoutingInterfaceCAPITests.cpp105
-rw-r--r--PluginRoutingInterfaceCAPI/test/MockIAmRoutingReceive.h6
7 files changed, 211 insertions, 3 deletions
diff --git a/PluginRoutingInterfaceCAPI/fidl/RoutingInterface.fidl b/PluginRoutingInterfaceCAPI/fidl/RoutingInterface.fidl
index 9ff485a..c0a3759 100755
--- a/PluginRoutingInterfaceCAPI/fidl/RoutingInterface.fidl
+++ b/PluginRoutingInterfaceCAPI/fidl/RoutingInterface.fidl
@@ -454,6 +454,25 @@ A client should notify himself to this attribute in order to know the current st
am_gatewayID_t gatewayID
am_Error_e ^error
}
+ }
+
+ <**
+ @description : registers a converter. (at)return E_OK on succes, E_ALREADY_EXISTENT if already registered E_UNKOWN on error
+ **>
+ method registerConverter {
+ in {
+
+ <**
+ @description : In a fixed setup, the gatewayID must be below 100. In a dynamic setup, the gatewayID shall be 0. listSourceFormats and listSinkFormats are empty at registration time. Values are taken over when sources and sinks are registered.
+
+
+ **>
+ am_Converter_s converterData
+ }
+ out {
+ am_converterID_t converterID
+ am_Error_e ^error
+ }
}
<**
@@ -472,6 +491,22 @@ A client should notify himself to this attribute in order to know the current st
am_Error_e ^error
}
}
+
+ <**
+ @description : deregisters a converter. Also removes all sinks and sources of the controlling domain.
+ **>
+ method deregisterConverter {
+ in {
+
+ <**
+ @description : domainID of the control domain
+ **>
+ am_converterID_t converterID
+ }
+ out {
+ am_Error_e ^error
+ }
+ }
<**
@description : This function returns the ID to the given sinkName. If already a sink is registered with this name, it will return the corresponding ID, if not it will reserve an ID but not register the sink. The other parameters of the sink will be overwritten when the sink is registered.
@@ -715,9 +750,29 @@ Is used by the Controller to know when all expected domains are finally register
am_Error_e ^error
}
}
-
- <**
- @description : updates data of an gateway. (at)return E_OK on success, E_NON_EXISTENT if the sinkID is not valid.
+
+ <**
+ @description : updates data of an converter. (at)return E_OK on success, E_NON_EXISTENT if the converterID is not valid.
+ **>
+ method updateConverter {
+ in {
+
+ <**
+ @description : This is the new converter data that has been updated. Please note that changing source and sink IDs,
+
+ **>
+ am_converterID_t converterID
+ am_ConnectionFormat_L listSourceFormats
+ am_ConnectionFormat_L listSinkFormats
+ am_Convertion_L convertionMatrix
+ }
+ out {
+ am_Error_e ^error
+ }
+ }
+
+ <**
+ @description : updates data of an sink. (at)return E_OK on success, E_NON_EXISTENT if the sinkID is not valid.
**>
method updateSink {
in {
diff --git a/PluginRoutingInterfaceCAPI/include/CAmRoutingSenderCommon.h b/PluginRoutingInterfaceCAPI/include/CAmRoutingSenderCommon.h
index 92f4190..352ed63 100644
--- a/PluginRoutingInterfaceCAPI/include/CAmRoutingSenderCommon.h
+++ b/PluginRoutingInterfaceCAPI/include/CAmRoutingSenderCommon.h
@@ -36,6 +36,7 @@ extern void CAmConvertCAPI2AM(const org::genivi::am::am_SoundProperty_s &, am::a
extern void CAmConvertCAPI2AM(const org::genivi::am::am_MainSoundProperty_s &, am::am_MainSoundProperty_s & );
extern void CAmConvertCAPI2AM(const org::genivi::am::am_NotificationConfiguration_s & , am::am_NotificationConfiguration_s & );
extern void CAmConvertCAPI2AM(const org::genivi::am::am_Gateway_s & , am::am_Gateway_s & );
+extern void CAmConvertCAPI2AM(const org::genivi::am::am_Converter_s & , am::am_Converter_s & );
extern void CAmConvertCAPI2AM(const org::genivi::am::am_Crossfader_s & , am::am_Crossfader_s & );
extern void CAmConvertCAPI2AM(const org::genivi::am::am_EarlyData_s & , am::am_EarlyData_s & );
extern void CAmConvertCAPI2AM(const org::genivi::am::am_EarlyData_u &, am::am_EarlyData_u & );
diff --git a/PluginRoutingInterfaceCAPI/include/CAmRoutingService.h b/PluginRoutingInterfaceCAPI/include/CAmRoutingService.h
index 066d2d1..503cd1f 100644
--- a/PluginRoutingInterfaceCAPI/include/CAmRoutingService.h
+++ b/PluginRoutingInterfaceCAPI/include/CAmRoutingService.h
@@ -81,8 +81,12 @@ public:
void registerGateway(org::genivi::am::am_Gateway_s gatewayData, org::genivi::am::am_gatewayID_t& gatewayID, org::genivi::am::am_Error_e& error);
+ void registerConverter(org::genivi::am::am_Converter_s aData, org::genivi::am::am_converterID_t& converterID, org::genivi::am::am_Error_e& error);
+
void deregisterGateway(org::genivi::am::am_gatewayID_t gatewayID, org::genivi::am::am_Error_e& returnError);
+ void deregisterConverter(org::genivi::am::am_converterID_t converterID, org::genivi::am::am_Error_e& returnError);
+
void peekSink(std::string name, org::genivi::am::am_sinkID_t& sinkID, org::genivi::am::am_Error_e& error);
void registerSink(org::genivi::am::am_Sink_s sinkData, org::genivi::am::am_sinkID_t& sinkID, org::genivi::am::am_Error_e& error);
@@ -119,6 +123,8 @@ public:
void updateGateway(org::genivi::am::am_gatewayID_t gatewayID, org::genivi::am::am_ConnectionFormat_L listSourceFormats, org::genivi::am::am_ConnectionFormat_L listSinkFormats, org::genivi::am::am_Convertion_L convertionMatrix, org::genivi::am::am_Error_e& error);
+ void updateConverter(org::genivi::am::am_converterID_t converterID, org::genivi::am::am_ConnectionFormat_L listSourceFormats, org::genivi::am::am_ConnectionFormat_L listSinkFormats, org::genivi::am::am_Convertion_L convertionMatrix, org::genivi::am::am_Error_e& error);
+
void updateSink(org::genivi::am::am_sinkID_t sinkID, org::genivi::am::am_sinkClass_t sinkClassID, org::genivi::am::am_SoundProperty_L listSoundProperties, org::genivi::am::am_ConnectionFormat_L listConnectionFormats, org::genivi::am::am_MainSoundProperty_L listMainSoundProperties, org::genivi::am::am_Error_e& error);
void updateSource(org::genivi::am::am_sourceID_t sourceID, org::genivi::am::am_sourceClass_t sourceClassID, org::genivi::am::am_SoundProperty_L listSoundProperties, org::genivi::am::am_ConnectionFormat_L listConnectionFormats, org::genivi::am::am_MainSoundProperty_L listMainSoundProperties, org::genivi::am::am_Error_e& error);
diff --git a/PluginRoutingInterfaceCAPI/src/CAmRoutingSenderCommon.cpp b/PluginRoutingInterfaceCAPI/src/CAmRoutingSenderCommon.cpp
index 68d360d..be1bdfc 100644
--- a/PluginRoutingInterfaceCAPI/src/CAmRoutingSenderCommon.cpp
+++ b/PluginRoutingInterfaceCAPI/src/CAmRoutingSenderCommon.cpp
@@ -183,6 +183,18 @@ void CAmConvertCAPI2AM(const org::genivi::am::am_Gateway_s & source, am::am_Gate
destination.convertionMatrix = source.convertionMatrix;
}
+void CAmConvertCAPI2AM(const org::genivi::am::am_Converter_s & source, am::am_Converter_s & destination)
+{
+ destination.sinkID = source.sinkID;
+ destination.converterID = source.converterID;
+ destination.name = source.name;
+ destination.sourceID = source.sourceID;
+ destination.domainID = source.domainID;
+ CAmConvertCAPIVector2AM(source.listSourceFormats, destination.listSourceFormats);
+ CAmConvertCAPIVector2AM(source.listSinkFormats, destination.listSinkFormats);
+ destination.convertionMatrix = source.convertionMatrix;
+}
+
void CAmConvertCAPI2AM(const org::genivi::am::am_EarlyData_u & source, am::am_EarlyData_u & destination)
{
if(source.isType<org::genivi::am::am_volume_t>())
diff --git a/PluginRoutingInterfaceCAPI/src/CAmRoutingService.cpp b/PluginRoutingInterfaceCAPI/src/CAmRoutingService.cpp
index 61e113f..2ee2f44 100644
--- a/PluginRoutingInterfaceCAPI/src/CAmRoutingService.cpp
+++ b/PluginRoutingInterfaceCAPI/src/CAmRoutingService.cpp
@@ -184,10 +184,21 @@ void CAmRoutingService::registerGateway(org::genivi::am::am_Gateway_s gatewayDat
error = static_cast<org::genivi::am::am_Error_e>(mpIAmRoutingReceive->registerGateway(converted, gatewayID));
}
+void CAmRoutingService::registerConverter(org::genivi::am::am_Converter_s aData, org::genivi::am::am_converterID_t& converterID, org::genivi::am::am_Error_e& error) {
+ assert(mpIAmRoutingReceive);
+ am_Converter_s converted;
+ CAmConvertCAPI2AM(aData, converted);
+ error = static_cast<org::genivi::am::am_Error_e>(mpIAmRoutingReceive->registerConverter(converted, converterID));
+}
+
void CAmRoutingService::deregisterGateway(org::genivi::am::am_gatewayID_t gatewayID, org::genivi::am::am_Error_e& returnError) {
returnError = static_cast<org::genivi::am::am_Error_e>(mpIAmRoutingReceive->deregisterGateway(gatewayID));
}
+void CAmRoutingService::deregisterConverter(org::genivi::am::am_converterID_t converterID, org::genivi::am::am_Error_e& returnError) {
+ returnError = static_cast<org::genivi::am::am_Error_e>(mpIAmRoutingReceive->deregisterConverter(converterID));
+}
+
void CAmRoutingService::peekSink(std::string name, org::genivi::am::am_sinkID_t& sinkID, org::genivi::am::am_Error_e& error) {
assert(mpIAmRoutingReceive);
error = static_cast<org::genivi::am::am_Error_e>(mpIAmRoutingReceive->peekSink(name, sinkID));
@@ -315,6 +326,18 @@ void CAmRoutingService::updateGateway(org::genivi::am::am_gatewayID_t gatewayID,
error = (org::genivi::am::am_Error_e)mpIAmRoutingReceive->updateGateway(gatewayID, destinationSourceConnectionFormats, destinationSinkConnectionFormats, convertionMatrix);
}
+void CAmRoutingService::updateConverter(org::genivi::am::am_converterID_t converterID, org::genivi::am::am_ConnectionFormat_L listSourceFormats, org::genivi::am::am_ConnectionFormat_L listSinkFormats, org::genivi::am::am_Convertion_L convertionMatrix, org::genivi::am::am_Error_e& error) {
+
+ assert(mpIAmRoutingReceive);
+ std::vector<am_CustomConnectionFormat_t> destinationSourceConnectionFormats;
+ CAmConvertCAPIVector2AM(listSourceFormats, destinationSourceConnectionFormats);
+
+ std::vector<am_CustomConnectionFormat_t> destinationSinkConnectionFormats;
+ CAmConvertCAPIVector2AM(listSinkFormats, destinationSinkConnectionFormats);
+
+ error = (org::genivi::am::am_Error_e)mpIAmRoutingReceive->updateConverter(converterID, destinationSourceConnectionFormats, destinationSinkConnectionFormats, convertionMatrix);
+}
+
void CAmRoutingService::updateSink(org::genivi::am::am_sinkID_t sinkID, org::genivi::am::am_sinkClass_t sinkClassID, org::genivi::am::am_SoundProperty_L listSoundProperties, org::genivi::am::am_ConnectionFormat_L listConnectionFormats, org::genivi::am::am_MainSoundProperty_L listMainSoundProperties, org::genivi::am::am_Error_e& error) {
assert(mpIAmRoutingReceive);
std::vector<am_SoundProperty_s> dstListSoundProperties;
diff --git a/PluginRoutingInterfaceCAPI/test/CAmRoutingInterfaceCAPITests.cpp b/PluginRoutingInterfaceCAPI/test/CAmRoutingInterfaceCAPITests.cpp
index 83fa6e9..7999c73 100644
--- a/PluginRoutingInterfaceCAPI/test/CAmRoutingInterfaceCAPITests.cpp
+++ b/PluginRoutingInterfaceCAPI/test/CAmRoutingInterfaceCAPITests.cpp
@@ -719,6 +719,69 @@ TEST_F(CAmRoutingInterfaceCAPITests, deregisterGateway)
EXPECT_TRUE(Mock::VerifyAndClearExpectations(env->mpRoutingReceive));
}
+MATCHER_P(IsConverterDataEqualTo, value, "") {
+ auto lh = arg;
+ return lh.converterID == value.converterID &&
+ lh.name == value.name &&
+ lh.sinkID == value.sinkID &&
+ lh.sourceID == value.sourceID &&
+ lh.domainID == value.domainID &&
+ lh.listSourceFormats == value.listSourceFormats &&
+ lh.listSinkFormats == value.listSinkFormats &&
+ lh.convertionMatrix == value.convertionMatrix;
+}
+
+TEST_F(CAmRoutingInterfaceCAPITests, registerConverter)
+{
+ ASSERT_TRUE(env->mIsServiceAvailable);
+ if(env->mIsServiceAvailable)
+ {
+ CallStatus callStatus = CallStatus::NOT_AVAILABLE;
+ org::genivi::am::am_Error_e error = org::genivi::am::am_Error_e::E_UNKNOWN;
+
+ org::genivi::am::am_ConnectionFormat_L listSourceFormats;
+ listSourceFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_ANALOG));
+ listSourceFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_AUTO));
+ org::genivi::am::am_ConnectionFormat_L listSinkFormats;
+ listSinkFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_AUTO));
+ listSinkFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_ANALOG));
+ org::genivi::am::am_Convertion_L convertionMatrix;
+ convertionMatrix.push_back(1);
+ convertionMatrix.push_back(0);
+
+ org::genivi::am::am_converterID_t converterID = 0;
+ org::genivi::am::am_Converter_s gateway(converterID, "name", 103, 104, 105, listSourceFormats, listSinkFormats, convertionMatrix);
+ am_Converter_s amGateway;
+ CAmConvertCAPI2AM(gateway, amGateway);
+
+ ON_CALL(*env->mpRoutingReceive, registerConverter(_, _)).WillByDefault(Return(E_OK));
+ EXPECT_CALL(*env->mpRoutingReceive, registerConverter(IsConverterDataEqualTo(amGateway), _)).WillOnce(DoAll(actionRegisterGateway(), Return(E_OK)));
+ env->mProxy->registerConverter(gateway, callStatus, converterID, error);
+ ASSERT_EQ( converterID, TEST_ID_1 );
+ ASSERT_EQ( error, org::genivi::am::am_Error_e::E_OK );
+ ASSERT_EQ( callStatus, CallStatus::SUCCESS );
+ }
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(env->mpRoutingReceive));
+}
+
+TEST_F(CAmRoutingInterfaceCAPITests, deregisterConverter)
+{
+ ASSERT_TRUE(env->mIsServiceAvailable);
+ if(env->mIsServiceAvailable)
+ {
+ CallStatus callStatus = CallStatus::NOT_AVAILABLE;
+ org::genivi::am::am_Error_e error = org::genivi::am::am_Error_e::E_UNKNOWN;
+ org::genivi::am::am_converterID_t converterID = TEST_ID_1;
+
+ ON_CALL(*env->mpRoutingReceive, deregisterConverter(_)).WillByDefault(Return(E_OK));
+ EXPECT_CALL(*env->mpRoutingReceive, deregisterConverter(converterID)).WillOnce(Return(E_OK));
+ env->mProxy->deregisterConverter(converterID, callStatus, error);
+ ASSERT_EQ( error, org::genivi::am::am_Error_e::E_OK );
+ ASSERT_EQ( callStatus, CallStatus::SUCCESS );
+ }
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(env->mpRoutingReceive));
+}
+
ACTION(actionPeek){
arg1=TEST_ID_1;
}
@@ -1281,6 +1344,48 @@ TEST_F(CAmRoutingInterfaceCAPITests, updateGateway)
EXPECT_TRUE(Mock::VerifyAndClearExpectations(env->mpRoutingReceive));
}
+TEST_F(CAmRoutingInterfaceCAPITests, updateConverter)
+{
+ ASSERT_TRUE(env->mIsServiceAvailable);
+ if(env->mIsServiceAvailable)
+ {
+ CallStatus callStatus = CallStatus::NOT_AVAILABLE;
+ am_Error_e error = E_OK;
+ org::genivi::am::am_converterID_t testID = TEST_ID_1;
+
+ org::genivi::am::am_ConnectionFormat_L listSourceFormats;
+ listSourceFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_ANALOG));
+ listSourceFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_AUTO));
+
+ org::genivi::am::am_ConnectionFormat_L listSinkFormats;
+ listSinkFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_AUTO));
+ listSinkFormats.push_back(static_cast<org::genivi::am::am_CustomConnectionFormat_t>(CF_GENIVI_ANALOG));
+
+ org::genivi::am::am_Convertion_L convertionMatrix;
+ convertionMatrix.push_back(1);
+ convertionMatrix.push_back(0);
+
+ std::vector<am_CustomConnectionFormat_t> am_listSourceFormats;
+ am_listSourceFormats.push_back(CF_GENIVI_ANALOG);
+ am_listSourceFormats.push_back(CF_GENIVI_AUTO);
+
+ std::vector<am_CustomConnectionFormat_t> am_listSinkFormats;
+ am_listSinkFormats.push_back(CF_GENIVI_AUTO);
+ am_listSinkFormats.push_back(CF_GENIVI_ANALOG);
+
+ std::vector<bool> am_convertionMatrix;
+ am_convertionMatrix.push_back(1);
+ am_convertionMatrix.push_back(0);
+ ON_CALL(*env->mpRoutingReceive, updateConverter(_, _, _, _)).WillByDefault(Return(E_OK));
+ EXPECT_CALL(*env->mpRoutingReceive, updateConverter(testID, am_listSourceFormats, am_listSinkFormats, am_convertionMatrix)).Times(1);
+
+ org::genivi::am::am_Error_e CAPIError;
+ env->mProxy->updateConverter(testID, listSourceFormats, listSinkFormats, convertionMatrix, callStatus,CAPIError);
+ ASSERT_EQ( callStatus, CallStatus::SUCCESS );
+ }
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(env->mpRoutingReceive));
+}
+
MATCHER_P(IsSoundPropertiesArrayEqualTo, value, "") {
auto lh = arg;
diff --git a/PluginRoutingInterfaceCAPI/test/MockIAmRoutingReceive.h b/PluginRoutingInterfaceCAPI/test/MockIAmRoutingReceive.h
index c2736d6..1443219 100644
--- a/PluginRoutingInterfaceCAPI/test/MockIAmRoutingReceive.h
+++ b/PluginRoutingInterfaceCAPI/test/MockIAmRoutingReceive.h
@@ -60,8 +60,12 @@ class MockIAmRoutingReceive : public IAmRoutingReceive {
am_Error_e(const am_domainID_t domainID));
MOCK_METHOD2(registerGateway,
am_Error_e(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID));
+ MOCK_METHOD2(registerConverter,
+ am_Error_e(const am_Converter_s& converterData, am_converterID_t& converterID));
MOCK_METHOD1(deregisterGateway,
am_Error_e(const am_gatewayID_t gatewayID));
+ MOCK_METHOD1(deregisterConverter,
+ am_Error_e(const am_converterID_t converterID));
MOCK_METHOD2(peekSink,
am_Error_e(const std::string& name, am_sinkID_t& sinkID));
MOCK_METHOD2(registerSink,
@@ -106,6 +110,8 @@ class MockIAmRoutingReceive : public IAmRoutingReceive {
void(const uint16_t handle, const am_Error_e error));
MOCK_METHOD4(updateGateway,
am_Error_e(const am_gatewayID_t gatewayID, const std::vector<am_CustomConnectionFormat_t>& listSourceFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkFormats, const std::vector<bool>& convertionMatrix));
+ MOCK_METHOD4(updateConverter,
+ am_Error_e(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkFormats, const std::vector<bool>& convertionMatrix));
MOCK_METHOD5(updateSink,
am_Error_e(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomConnectionFormat_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties));
MOCK_METHOD5(updateSource,