diff options
Diffstat (limited to 'AudioManagerDaemon/include')
-rw-r--r-- | AudioManagerDaemon/include/CAmCommandReceiver.h | 97 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmCommandSender.h | 91 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmControlReceiver.h | 156 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmControlSender.h | 154 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmDatabaseHandlerMap.h | 495 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmDatabaseHandlerSQLite.h | 208 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmDatabaseObserver.h | 87 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmGraph.h | 630 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmLog.h | 129 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmRouter.h | 317 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmRoutingReceiver.h | 127 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmRoutingSender.h | 155 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmTelnetMenuHelper.h | 204 | ||||
-rw-r--r-- | AudioManagerDaemon/include/CAmTelnetServer.h | 100 | ||||
-rw-r--r-- | AudioManagerDaemon/include/IAmDatabaseHandler.h | 200 | ||||
-rw-r--r-- | AudioManagerDaemon/include/TAmPluginTemplate.h | 91 |
16 files changed, 0 insertions, 3241 deletions
diff --git a/AudioManagerDaemon/include/CAmCommandReceiver.h b/AudioManagerDaemon/include/CAmCommandReceiver.h deleted file mode 100644 index 0f30d81..0000000 --- a/AudioManagerDaemon/include/CAmCommandReceiver.h +++ /dev/null @@ -1,97 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmCommandReceiver.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef COMMANDRECEIVER_H_ -#define COMMANDRECEIVER_H_ - -#include "IAmCommand.h" - -namespace am -{ - -class IAmDatabaseHandler; -class CAmControlSender; -class CAmDbusWrapper; -class CAmSocketHandler; - -/** - * This class realizes the command Interface - */ -class CAmCommandReceiver: public IAmCommandReceive -{ -public: - CAmCommandReceiver(IAmDatabaseHandler* iDatabaseHandler, CAmControlSender* iControlSender, CAmSocketHandler* iSocketHandler); - CAmCommandReceiver(IAmDatabaseHandler* iDatabaseHandler, CAmControlSender* iControlSender, CAmSocketHandler* iSocketHandler, CAmDbusWrapper* iDBusWrapper); - ~CAmCommandReceiver(); - am_Error_e connect(const am_sourceID_t sourceID, const am_sinkID_t sinkID, am_mainConnectionID_t& mainConnectionID); - am_Error_e disconnect(const am_mainConnectionID_t mainConnectionID); - am_Error_e setVolume(const am_sinkID_t sinkID, const am_mainVolume_t volume); - am_Error_e volumeStep(const am_sinkID_t sinkID, const int16_t volumeStep); - am_Error_e setSinkMuteState(const am_sinkID_t sinkID, const am_MuteState_e muteState); - am_Error_e setMainSinkSoundProperty(const am_MainSoundProperty_s& soundProperty, const am_sinkID_t sinkID); - am_Error_e setMainSourceSoundProperty(const am_MainSoundProperty_s& soundProperty, const am_sourceID_t sourceID); - am_Error_e setSystemProperty(const am_SystemProperty_s& property); - am_Error_e getVolume(const am_sinkID_t sinkID, am_mainVolume_t& mainVolume) const; - am_Error_e getListMainConnections(std::vector<am_MainConnectionType_s>& listConnections) const; - am_Error_e getListMainSinks(std::vector<am_SinkType_s>& listMainSinks) const; - am_Error_e getListMainSources(std::vector<am_SourceType_s>& listMainSources) const; - am_Error_e getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_MainSoundProperty_s>& listSoundProperties) const; - am_Error_e getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_MainSoundProperty_s>& listSourceProperties) const; - am_Error_e getListSourceClasses(std::vector<am_SourceClass_s>& listSourceClasses) const; - am_Error_e getListSinkClasses(std::vector<am_SinkClass_s>& listSinkClasses) const; - am_Error_e getListSystemProperties(std::vector<am_SystemProperty_s>& listSystemProperties) const; - am_Error_e getTimingInformation(const am_mainConnectionID_t mainConnectionID, am_timeSync_t& delay) const; - am_Error_e getDBusConnectionWrapper(CAmDbusWrapper*& dbusConnectionWrapper) const; - am_Error_e getSocketHandler(CAmSocketHandler*& socketHandler) const; - void confirmCommandReady(const uint16_t handle, const am_Error_e error); - void confirmCommandRundown(const uint16_t handle, const am_Error_e error); - void getInterfaceVersion(std::string& version) const; - am_Error_e getListMainSinkNotificationConfigurations(const am_sinkID_t sinkID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations) const ; - am_Error_e getListMainSourceNotificationConfigurations(const am_sourceID_t sourceID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations) const ; - am_Error_e setMainSinkNotificationConfiguration(const am_sinkID_t sinkID, const am_NotificationConfiguration_s& mainNotificationConfiguration) ; - am_Error_e setMainSourceNotificationConfiguration(const am_sourceID_t sourceID, const am_NotificationConfiguration_s& mainNotificationConfiguration) ; - - uint16_t getStartupHandle(); //!< returns a startup handle - uint16_t getRundownHandle(); //!< returns a rundown handle - - void waitOnStartup(bool startup); //!< tells the ComandReceiver to start waiting for all handles to be confirmed - void waitOnRundown(bool rundown); //!< tells the ComandReceiver to start waiting for all handles to be confirmed - -private: - IAmDatabaseHandler* mDatabaseHandler; //!< pointer to the databasehandler - CAmControlSender* mControlSender; //!< pointer to the control sender - CAmDbusWrapper* mDBusWrapper; //!< pointer to the dbuswrapper - CAmSocketHandler* mSocketHandler; //!< pointer to the SocketHandler - - uint16_t handleCount; //!< counts all handles - std::vector<uint16_t> mListStartupHandles; //!< list of handles that wait for a confirm - std::vector<uint16_t> mListRundownHandles; //!< list of handles that wait for a confirm - bool mWaitStartup; //!< if true confirmation will be sent if list of handles = 0 - bool mWaitRundown; //!< if true confirmation will be sent if list of handles = 0 - am_Error_e mLastErrorStartup; - am_Error_e mLastErrorRundown; -}; - -} - -#endif /* COMMANDRECEIVER_H_ */ diff --git a/AudioManagerDaemon/include/CAmCommandSender.h b/AudioManagerDaemon/include/CAmCommandSender.h deleted file mode 100644 index 82363de..0000000 --- a/AudioManagerDaemon/include/CAmCommandSender.h +++ /dev/null @@ -1,91 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmCommandSender.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef COMMANDSENDER_H_ -#define COMMANDSENDER_H_ - -#ifdef UNIT_TEST -#include "../test/IAmCommandBackdoor.h" //we need this for the unit test -#endif - -#include "IAmCommand.h" - -namespace am -{ - -class CAmCommandReceiver; - - -/** - * This class is used to send data to the CommandInterface. - * All loaded plugins will be called when a callback is invoked. - */ -class CAmCommandSender -{ -public: - CAmCommandSender(const std::vector<std::string>& listOfPluginDirectories); - ~CAmCommandSender(); - am_Error_e startupInterfaces(CAmCommandReceiver* iCommandReceiver); - void setCommandReady(); - void setCommandRundown(); - void cbNewMainConnection(const am_MainConnectionType_s mainConnection); - void cbRemovedMainConnection(const am_mainConnectionID_t mainConnection); - void cbNewSink(am_SinkType_s sink); - void cbRemovedSink(const am_sinkID_t sink); - void cbNewSource(const am_SourceType_s source); - void cbRemovedSource(const am_sourceID_t source); - void cbNumberOfSinkClassesChanged(); - void cbNumberOfSourceClassesChanged(); - void cbMainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState); - void cbMainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s& soundProperty); - void cbMainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s& soundProperty); - void cbSinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s& availability); - void cbSourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s& availability); - void cbVolumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume); - void cbSinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState); - void cbSystemPropertyChanged(const am_SystemProperty_s& systemProperty); - void cbTimingInformationChanged(const am_mainConnectionID_t mainConnectionID, const am_timeSync_t time); - void getInterfaceVersion(std::string& version) const; - am_Error_e getListPlugins(std::vector<std::string>& interfaces) const; - void cbSinkUpdated(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties); - void cbSourceUpdated(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties); - void cbSinkNotification(const am_sinkID_t sinkID, const am_NotificationPayload_s& notification); - void cbSourceNotification(const am_sourceID_t sourceID, const am_NotificationPayload_s& notification); - void cbSinkMainNotificationConfigurationChanged(const am_sinkID_t sinkID, const am_NotificationConfiguration_s& mainNotificationConfiguration); - void cbSourceMainNotificationConfigurationChanged(const am_sourceID_t sourceID, const am_NotificationConfiguration_s& mainNotificationConfiguration); - -#ifdef UNIT_TEST - friend class IAmCommandBackdoor; //this is to get access to the loaded plugins and be able to exchange the interfaces -#endif -private: - void unloadLibraries(void); //!< unload the shared libraries - std::vector<IAmCommandSend*> mListInterfaces; //!< list of all interfaces - std::vector<void*> mListLibraryHandles; //!< list of all library handles. This information is used to unload the plugins correctly. - std::vector<std::string> mListLibraryNames; //!< list of all library names. This information is used for getListPlugins. - - CAmCommandReceiver *mCommandReceiver; -}; - -} - -#endif /* COMMANDSENDER_H_ */ diff --git a/AudioManagerDaemon/include/CAmControlReceiver.h b/AudioManagerDaemon/include/CAmControlReceiver.h deleted file mode 100644 index 3f39189..0000000 --- a/AudioManagerDaemon/include/CAmControlReceiver.h +++ /dev/null @@ -1,156 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmControlReceiver.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef CONTRONLRECEIVER_H_ -#define CONTRONLRECEIVER_H_ - -#include "IAmControl.h" - -namespace am -{ - -class CAmSocketHandler; -class IAmDatabaseHandler; -class CAmRoutingSender; -class CAmCommandSender; -class CAmRouter; -class CAmNodeStateCommunicator; - -/** - * This class is used to receive all commands from the control interface - */ -class CAmControlReceiver: public IAmControlReceive -{ -public: - CAmControlReceiver(IAmDatabaseHandler *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmCommandSender *iCommandSender, CAmSocketHandler *iSocketHandler, CAmRouter* iRouter); - ~CAmControlReceiver(); - am_Error_e getRoute(const bool onlyfree, const am_sourceID_t sourceID, const am_sinkID_t sinkID, std::vector<am_Route_s>& returnList); - am_Error_e connect(am_Handle_s& handle, am_connectionID_t& connectionID, const am_CustomConnectionFormat_t format, const am_sourceID_t sourceID, const am_sinkID_t sinkID); - am_Error_e disconnect(am_Handle_s& handle, const am_connectionID_t connectionID); - am_Error_e crossfade(am_Handle_s& handle, const am_HotSink_e hotSource, const am_crossfaderID_t crossfaderID, const am_CustomRampType_t rampType, const am_time_t rampTime); - am_Error_e abortAction(const am_Handle_s handle); - am_Error_e setSourceState(am_Handle_s& handle, const am_sourceID_t sourceID, const am_SourceState_e state); - am_Error_e setSinkVolume(am_Handle_s& handle, const am_sinkID_t sinkID, const am_volume_t volume, const am_CustomRampType_t ramp, const am_time_t time); - am_Error_e setSourceVolume(am_Handle_s& handle, const am_sourceID_t sourceID, const am_volume_t volume, const am_CustomRampType_t rampType, const am_time_t time); - am_Error_e setSinkSoundProperties(am_Handle_s& handle, const am_sinkID_t sinkID, const std::vector<am_SoundProperty_s>& soundProperty); - am_Error_e setSinkSoundProperty(am_Handle_s& handle, const am_sinkID_t sinkID, const am_SoundProperty_s& soundProperty); - am_Error_e setSourceSoundProperties(am_Handle_s& handle, const am_sourceID_t sourceID, const std::vector<am_SoundProperty_s>& soundProperty); - am_Error_e setSourceSoundProperty(am_Handle_s& handle, const am_sourceID_t sourceID, const am_SoundProperty_s& soundProperty); - am_Error_e setDomainState(const am_domainID_t domainID, const am_DomainState_e domainState); - am_Error_e enterDomainDB(const am_Domain_s& domainData, am_domainID_t& domainID); - am_Error_e enterMainConnectionDB(const am_MainConnection_s& mainConnectionData, am_mainConnectionID_t& connectionID); - am_Error_e enterSinkDB(const am_Sink_s& sinkData, am_sinkID_t& sinkID); - am_Error_e enterCrossfaderDB(const am_Crossfader_s& crossfaderData, am_crossfaderID_t& crossfaderID); - am_Error_e enterGatewayDB(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID); - am_Error_e enterConverterDB(const am_Converter_s & converterData, am_converterID_t & converterID); - am_Error_e enterSourceDB(const am_Source_s& sourceData, am_sourceID_t& sourceID); - am_Error_e enterSinkClassDB(const am_SinkClass_s& sinkClass, am_sinkClass_t& sinkClassID); - am_Error_e enterSourceClassDB(am_sourceClass_t& sourceClassID, const am_SourceClass_s& sourceClass); - am_Error_e changeSinkClassInfoDB(const am_SinkClass_s& sinkClass); - am_Error_e changeSourceClassInfoDB(const am_SourceClass_s& sourceClass); - am_Error_e enterSystemPropertiesListDB(const std::vector<am_SystemProperty_s>& listSystemProperties); - am_Error_e changeMainConnectionRouteDB(const am_mainConnectionID_t mainconnectionID, const std::vector<am_connectionID_t>& listConnectionID); - am_Error_e changeMainConnectionStateDB(const am_mainConnectionID_t mainconnectionID, const am_ConnectionState_e connectionState); - am_Error_e changeSinkMainVolumeDB(const am_mainVolume_t mainVolume, const am_sinkID_t sinkID); - am_Error_e changeSinkAvailabilityDB(const am_Availability_s& availability, const am_sinkID_t sinkID); - am_Error_e changDomainStateDB(const am_DomainState_e domainState, const am_domainID_t domainID); - am_Error_e changeSinkMuteStateDB(const am_MuteState_e muteState, const am_sinkID_t sinkID); - am_Error_e changeMainSinkSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sinkID_t sinkID); - am_Error_e changeMainSourceSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sourceID_t sourceID); - am_Error_e changeSourceAvailabilityDB(const am_Availability_s& availability, const am_sourceID_t sourceID); - am_Error_e changeSystemPropertyDB(const am_SystemProperty_s& property); - am_Error_e removeMainConnectionDB(const am_mainConnectionID_t mainConnectionID); - am_Error_e removeSinkDB(const am_sinkID_t sinkID); - am_Error_e removeSourceDB(const am_sourceID_t sourceID); - am_Error_e removeGatewayDB(const am_gatewayID_t gatewayID); - am_Error_e removeConverterDB(const am_converterID_t converterID); - am_Error_e removeCrossfaderDB(const am_crossfaderID_t crossfaderID); - am_Error_e removeDomainDB(const am_domainID_t domainID); - am_Error_e removeSinkClassDB(const am_sinkClass_t sinkClassID); - am_Error_e removeSourceClassDB(const am_sourceClass_t sourceClassID); - am_Error_e getSourceClassInfoDB(const am_sourceID_t sourceID, am_SourceClass_s& classInfo) const; - am_Error_e getSinkClassInfoDB(const am_sinkID_t sinkID, am_SinkClass_s& sinkClass) const; - am_Error_e getSinkInfoDB(const am_sinkID_t sinkID, am_Sink_s& sinkData) const; - am_Error_e getSourceInfoDB(const am_sourceID_t sourceID, am_Source_s& sourceData) const; - 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 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; - am_Error_e getListCrossfadersOfDomain(const am_domainID_t domainID, std::vector<am_crossfaderID_t>& listCrossfadersID) const; - am_Error_e getListGatewaysOfDomain(const am_domainID_t domainID, std::vector<am_gatewayID_t>& listGatewaysID) const; - am_Error_e getListConvertersOfDomain(const am_domainID_t domainID, std::vector<am_converterID_t>& listConverterID) const; - am_Error_e getListMainConnections(std::vector<am_MainConnection_s>& listMainConnections) const; - am_Error_e getListDomains(std::vector<am_Domain_s>& listDomains) const; - am_Error_e getListConnections(std::vector<am_Connection_s>& listConnections) const; - am_Error_e getListSinks(std::vector<am_Sink_s>& listSinks) const; - am_Error_e getListSources(std::vector<am_Source_s>& listSources) const; - am_Error_e getListSourceClasses(std::vector<am_SourceClass_s>& listSourceClasses) const; - am_Error_e getListHandles(std::vector<am_Handle_s>& listHandles) const; - am_Error_e getListCrossfaders(std::vector<am_Crossfader_s>& listCrossfaders) const; - am_Error_e getListGateways(std::vector<am_Gateway_s>& listGateways) const; - am_Error_e getListConverters(std::vector<am_Converter_s>& listConverters) const; - am_Error_e getListSinkClasses(std::vector<am_SinkClass_s>& listSinkClasses) const; - am_Error_e getListSystemProperties(std::vector<am_SystemProperty_s>& listSystemProperties) const; - void setCommandReady(); - void setCommandRundown(); - void setRoutingReady(); - void setRoutingRundown(); - void confirmControllerReady(const am_Error_e error); - void confirmControllerRundown(const am_Error_e error); - am_Error_e getSocketHandler(CAmSocketHandler*& socketHandler); - void getInterfaceVersion(std::string& version) const; - am_Error_e changeSourceDB(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomConnectionFormat_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) ; - am_Error_e changeSinkDB(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) ; - am_Error_e changeGatewayDB(const am_gatewayID_t gatewayID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix) ; - am_Error_e changeConverterDB(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix); - am_Error_e setVolumes(am_Handle_s& handle, const std::vector<am_Volumes_s>& listVolumes) ; - am_Error_e setSinkNotificationConfiguration(am_Handle_s& handle, const am_sinkID_t sinkID, const am_NotificationConfiguration_s& notificationConfiguration) ; - am_Error_e setSourceNotificationConfiguration(am_Handle_s& handle, const am_sourceID_t sourceID, const am_NotificationConfiguration_s& notificationConfiguration) ; - void sendMainSinkNotificationPayload(const am_sinkID_t sinkID, const am_NotificationPayload_s& notificationPayload) ; - void sendMainSourceNotificationPayload(const am_sourceID_t sourceID, const am_NotificationPayload_s& notificationPayload) ; - am_Error_e changeMainSinkNotificationConfigurationDB(const am_sinkID_t sinkID, const am_NotificationConfiguration_s& mainNotificationConfiguration) ; - am_Error_e changeMainSourceNotificationConfigurationDB(const am_sourceID_t sourceID, const am_NotificationConfiguration_s& mainNotificationConfiguration) ; - am_Error_e getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_MainSoundProperty_s>& listSoundproperties) const; - am_Error_e getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_MainSoundProperty_s>& listSoundproperties) const; - am_Error_e getListSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_SoundProperty_s>& listSoundproperties) const; - am_Error_e getListSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_SoundProperty_s>& listSoundproperties) const; - am_Error_e getMainSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getMainSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e resyncConnectionState(const am_domainID_t domainID, std::vector<am_Connection_s>& listOfExistingConnections); - -private: - IAmDatabaseHandler* mDatabaseHandler; //!< pointer tto the databasehandler - CAmRoutingSender* mRoutingSender; //!< pointer to the routing send interface. - CAmCommandSender* mCommandSender; //!< pointer to the command send interface - CAmSocketHandler* mSocketHandler; //!< pointer to the socketHandler - CAmRouter* mRouter; //!< pointer to the Router - CAmNodeStateCommunicator* mNodeStateCommunicator; -}; - -} - -#endif /* CONTRONLRECEIVER_H_ */ diff --git a/AudioManagerDaemon/include/CAmControlSender.h b/AudioManagerDaemon/include/CAmControlSender.h deleted file mode 100644 index 40ab379..0000000 --- a/AudioManagerDaemon/include/CAmControlSender.h +++ /dev/null @@ -1,154 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmControlSender.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef CONTROLSENDER_H_ -#define CONTROLSENDER_H_ - -#ifdef UNIT_TEST -#include "../test/IAmControlBackdoor.h" -#endif - -#include "IAmControl.h" -#include "CAmSocketHandler.h" -#include "unistd.h" - -namespace am -{ - -/** - * sends data to the commandInterface, takes the file of the library that needs to be loaded - */ -class CAmControlSender -{ -public: - CAmControlSender(std::string controlPluginFile,CAmSocketHandler* sockethandler); - CAmControlSender(); - ~CAmControlSender(); - am_Error_e startupController(IAmControlReceive* controlreceiveinterface) ; - void setControllerReady() ; - void setControllerRundown(const int16_t signal) ; - am_Error_e hookUserConnectionRequest(const am_sourceID_t sourceID, const am_sinkID_t sinkID, am_mainConnectionID_t& mainConnectionID) ; - am_Error_e hookUserDisconnectionRequest(const am_mainConnectionID_t connectionID) ; - am_Error_e hookUserSetMainSinkSoundProperty(const am_sinkID_t sinkID, const am_MainSoundProperty_s& soundProperty) ; - am_Error_e hookUserSetMainSourceSoundProperty(const am_sourceID_t sourceID, const am_MainSoundProperty_s& soundProperty) ; - am_Error_e hookUserSetSystemProperty(const am_SystemProperty_s& property) ; - am_Error_e hookUserVolumeChange(const am_sinkID_t SinkID, const am_mainVolume_t newVolume) ; - am_Error_e hookUserVolumeStep(const am_sinkID_t SinkID, const int16_t increment) ; - am_Error_e hookUserSetSinkMuteState(const am_sinkID_t sinkID, const am_MuteState_e muteState) ; - am_Error_e hookSystemRegisterDomain(const am_Domain_s& domainData, am_domainID_t& domainID) ; - am_Error_e hookSystemDeregisterDomain(const am_domainID_t domainID) ; - void hookSystemDomainRegistrationComplete(const am_domainID_t domainID) ; - am_Error_e hookSystemRegisterSink(const am_Sink_s& sinkData, am_sinkID_t& sinkID) ; - am_Error_e hookSystemDeregisterSink(const am_sinkID_t sinkID) ; - am_Error_e hookSystemRegisterSource(const am_Source_s& sourceData, am_sourceID_t& sourceID) ; - am_Error_e hookSystemDeregisterSource(const am_sourceID_t sourceID) ; - am_Error_e hookSystemRegisterGateway(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID) ; - am_Error_e hookSystemRegisterConverter(const am_Converter_s& converterData, am_converterID_t& converterID); - am_Error_e hookSystemDeregisterGateway(const am_gatewayID_t gatewayID) ; - am_Error_e hookSystemDeregisterConverter(const am_converterID_t converterID) ; - am_Error_e hookSystemRegisterCrossfader(const am_Crossfader_s& crossfaderData, am_crossfaderID_t& crossfaderID) ; - am_Error_e hookSystemDeregisterCrossfader(const am_crossfaderID_t crossfaderID) ; - 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) ; - void hookSystemSinkAvailablityStateChange(const am_sinkID_t sinkID, const am_Availability_s& availability) ; - void hookSystemSourceAvailablityStateChange(const am_sourceID_t sourceID, const am_Availability_s& availability) ; - void hookSystemDomainStateChange(const am_domainID_t domainID, const am_DomainState_e state) ; - void hookSystemReceiveEarlyData(const std::vector<am_EarlyData_s>& data) ; - void hookSystemSpeedChange(const am_speed_t speed) ; - void hookSystemTimingInformationChanged(const am_mainConnectionID_t mainConnectionID, const am_timeSync_t time) ; - void cbAckConnect(const am_Handle_s handle, const am_Error_e errorID) ; - void cbAckDisconnect(const am_Handle_s handle, const am_Error_e errorID) ; - void cbAckCrossFade(const am_Handle_s handle, const am_HotSink_e hostsink, const am_Error_e error) ; - void cbAckSetSinkVolumeChange(const am_Handle_s handle, const am_volume_t volume, const am_Error_e error) ; - void cbAckSetSourceVolumeChange(const am_Handle_s handle, const am_volume_t voulme, const am_Error_e error) ; - void cbAckSetSourceState(const am_Handle_s handle, const am_Error_e error) ; - void cbAckSetSourceSoundProperties(const am_Handle_s handle, const am_Error_e error) ; - void cbAckSetSourceSoundProperty(const am_Handle_s handle, const am_Error_e error) ; - void cbAckSetSinkSoundProperties(const am_Handle_s handle, const am_Error_e error) ; - void cbAckSetSinkSoundProperty(const am_Handle_s handle, const am_Error_e error) ; - am_Error_e getConnectionFormatChoice(const am_sourceID_t sourceID, const am_sinkID_t sinkID, const am_Route_s listRoute, const std::vector<am_CustomConnectionFormat_t> listPossibleConnectionFormats, std::vector<am_CustomConnectionFormat_t>& listPrioConnectionFormats) ; - void confirmCommandReady(const am_Error_e error) ; - void confirmRoutingReady(const am_Error_e error) ; - void confirmCommandRundown(const am_Error_e error) ; - void confirmRoutingRundown(const am_Error_e error) ; - void getInterfaceVersion(std::string& version) const ; - am_Error_e hookSystemUpdateSink(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) ; - am_Error_e hookSystemUpdateSource(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomConnectionFormat_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) ; - am_Error_e hookSystemUpdateGateway(const am_gatewayID_t gatewayID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFromats, const std::vector<bool>& convertionMatrix) ; - am_Error_e hookSystemUpdateConverter(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFromats, const std::vector<bool>& convertionMatrix); - void cbAckSetVolume(const am_Handle_s handle, const std::vector<am_Volumes_s>& listVolumes, const am_Error_e error) ; - void cbAckSetSinkNotificationConfiguration(const am_Handle_s handle, const am_Error_e error) ; - void cbAckSetSourceNotificationConfiguration(const am_Handle_s handle, const am_Error_e error) ; - void hookSinkNotificationDataChanged(const am_sinkID_t sinkID, const am_NotificationPayload_s& payload) ; - void hookSourceNotificationDataChanged(const am_sourceID_t sourceID, const am_NotificationPayload_s& payload) ; - am_Error_e hookUserSetMainSinkNotificationConfiguration(const am_sinkID_t sinkID, const am_NotificationConfiguration_s& notificationConfiguration) ; - am_Error_e hookUserSetMainSourceNotificationConfiguration(const am_sourceID_t sourceID, const am_NotificationConfiguration_s& notificationConfiguration) ; - void hookSystemSingleTimingInformationChanged(const am_connectionID_t connectionID, const am_timeSync_t time); - - void receiverCallback(const pollfd pollfd, const sh_pollHandle_t handle, void* userData); - bool checkerCallback(const sh_pollHandle_t handle, void* userData); - bool dispatcherCallback(const sh_pollHandle_t handle, void* userData); - - void setControllerRundownSafe(int16_t signal) - { - int16_t p(signal); - ssize_t result(-1); - result = write(mPipe[1], &p, sizeof(p)); - } - - TAmShPollFired<CAmControlSender> receiverCallbackT; - TAmShPollCheck<CAmControlSender> checkerCallbackT; - TAmShPollDispatch<CAmControlSender> dispatcherCallbackT; - - - //we need this here to call the rundown from the signal handler. In case everything screwed up - static void CallsetControllerRundown(int16_t signal) - { - if (mInstance) - mInstance->setControllerRundown(signal); - } - - //this static callback is used from the signal handler. It is used when a normal rundown is assumed and the mainloop is used to call rundown. - static void CallsetControllerRundownSafe(int16_t signal) - { - if (mInstance) - { - mInstance->setControllerRundownSafe(signal); - } - } - -#ifdef UNIT_TEST - friend class IAmControlBackdoor; -#endif -private: - int mPipe[2]; - void* mlibHandle; //!< pointer to the loaded control plugin interface - IAmControlSend* mController; //!< pointer to the ControlSend interface - static CAmControlSender* mInstance; - int16_t mSignal; -}; - -} - -#endif /* CONTROLSENDER_H_ */ diff --git a/AudioManagerDaemon/include/CAmDatabaseHandlerMap.h b/AudioManagerDaemon/include/CAmDatabaseHandlerMap.h deleted file mode 100644 index cf319f7..0000000 --- a/AudioManagerDaemon/include/CAmDatabaseHandlerMap.h +++ /dev/null @@ -1,495 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * -* \author Aleksandar Donchev, aleksander.donchev@partner.bmw.de BMW 2013 - * - * \file CAmDatabaseHandlerMap.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef MAPHANDLER_H_ -#define MAPHANDLER_H_ - -#include <stdint.h> -#include <limits.h> -#include <sstream> -#include <iostream> -#include <unordered_map> -#include <algorithm> -#include <assert.h> -#include <vector> -#include "IAmDatabaseHandler.h" - -namespace am -{ -#ifndef AM_MAP_CAPACITY - #define AM_MAP_CAPACITY 0 -#endif - -#ifndef AM_MAX_CONNECTIONS - #define AM_MAX_CONNECTIONS 0x1000 -#endif - -#ifndef AM_MAX_MAIN_CONNECTIONS - #define AM_MAX_MAIN_CONNECTIONS SHRT_MAX -#endif - - - -//todo: check the enum values before entering & changing in the database. -//todo: change asserts for dynamic boundary checks into failure answers.# -//todo: check autoincrement boundary and set to 16bit limits -//todo: If the sink is part of a gateway, the listconnectionFormats is copied to the gatewayInformation. Check this statement for sinks & sources -//todo: exchange last_insert_row id to be more safe -//todo: create test to ensure uniqueness of names throughout the database -//todo: enforce the uniqueness of names - -/** - * This class handles and abstracts the database - */ -class CAmDatabaseHandlerMap : public IAmDatabaseHandler -{ - bool mFirstStaticSink; //!< bool for dynamic range handling - bool mFirstStaticSource; //!< bool for dynamic range handling - bool mFirstStaticGateway; //!< bool for dynamic range handling - bool mFirstStaticConverter; //!< bool for dynamic range handling - bool mFirstStaticSinkClass; //!< bool for dynamic range handling - bool mFirstStaticSourceClass; //!< bool for dynamic range handling - bool mFirstStaticCrossfader; //!< bool for dynamic range handling - -public: - CAmDatabaseHandlerMap(); - virtual ~CAmDatabaseHandlerMap(); - am_Error_e enterDomainDB(const am_Domain_s& domainData, am_domainID_t& domainID); - am_Error_e enterMainConnectionDB(const am_MainConnection_s& mainConnectionData, am_mainConnectionID_t& connectionID); - am_Error_e enterSinkDB(const am_Sink_s& sinkData, am_sinkID_t& sinkID); - am_Error_e enterCrossfaderDB(const am_Crossfader_s& crossfaderData, am_crossfaderID_t& crossfaderID); - am_Error_e enterGatewayDB(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID); - am_Error_e enterConverterDB(const am_Converter_s & converterData, am_converterID_t & converterID); - am_Error_e enterSourceDB(const am_Source_s& sourceData, am_sourceID_t& sourceID); - am_Error_e enterConnectionDB(const am_Connection_s& connection, am_connectionID_t& connectionID); - am_Error_e enterSinkClassDB(const am_SinkClass_s& sinkClass, am_sinkClass_t& sinkClassID); - am_Error_e enterSourceClassDB(am_sourceClass_t& sourceClassID, const am_SourceClass_s& sourceClass); - am_Error_e enterSystemProperties(const std::vector<am_SystemProperty_s>& listSystemProperties); - am_Error_e changeMainConnectionRouteDB(const am_mainConnectionID_t mainconnectionID, const std::vector<am_connectionID_t>& listConnectionID); - am_Error_e changeMainConnectionStateDB(const am_mainConnectionID_t mainconnectionID, const am_ConnectionState_e connectionState); - am_Error_e changeSinkMainVolumeDB(const am_mainVolume_t mainVolume, const am_sinkID_t sinkID); - am_Error_e changeSinkAvailabilityDB(const am_Availability_s& availability, const am_sinkID_t sinkID); - am_Error_e changDomainStateDB(const am_DomainState_e domainState, const am_domainID_t domainID); - am_Error_e changeSinkMuteStateDB(const am_MuteState_e muteState, const am_sinkID_t sinkID); - am_Error_e changeMainSinkSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sinkID_t sinkID); - am_Error_e changeMainSourceSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sourceID_t sourceID); - am_Error_e changeSourceSoundPropertyDB(const am_SoundProperty_s& soundProperty, const am_sourceID_t sourceID); - am_Error_e changeSinkSoundPropertyDB(const am_SoundProperty_s& soundProperty, const am_sinkID_t sinkID); - am_Error_e changeSourceAvailabilityDB(const am_Availability_s& availability, const am_sourceID_t sourceID); - am_Error_e changeSystemPropertyDB(const am_SystemProperty_s& property); - am_Error_e changeDelayMainConnection(const am_timeSync_t & delay, const am_mainConnectionID_t & connectionID); - am_Error_e changeSinkClassInfoDB(const am_SinkClass_s& sinkClass); - am_Error_e changeSourceClassInfoDB(const am_SourceClass_s& sourceClass); - am_Error_e changeConnectionTimingInformation(const am_connectionID_t connectionID, const am_timeSync_t delay); - am_Error_e changeConnectionFinal(const am_connectionID_t connectionID); - am_Error_e changeSourceState(const am_sourceID_t sourceID, const am_SourceState_e sourceState); - am_Error_e changeSinkVolume(const am_sinkID_t sinkID, const am_volume_t volume); - am_Error_e changeSourceVolume(const am_sourceID_t sourceID, const am_volume_t volume); - am_Error_e changeCrossFaderHotSink(const am_crossfaderID_t crossfaderID, const am_HotSink_e hotsink); - am_Error_e removeMainConnectionDB(const am_mainConnectionID_t mainConnectionID); - am_Error_e removeSinkDB(const am_sinkID_t sinkID); - am_Error_e removeSourceDB(const am_sourceID_t sourceID); - am_Error_e removeGatewayDB(const am_gatewayID_t gatewayID); - am_Error_e removeConverterDB(const am_converterID_t converterID); - am_Error_e removeCrossfaderDB(const am_crossfaderID_t crossfaderID); - am_Error_e removeDomainDB(const am_domainID_t domainID); - am_Error_e removeSinkClassDB(const am_sinkClass_t sinkClassID); - am_Error_e removeSourceClassDB(const am_sourceClass_t sourceClassID); - am_Error_e removeConnection(const am_connectionID_t connectionID); - am_Error_e getSourceClassInfoDB(const am_sourceID_t sourceID, am_SourceClass_s& classInfo) const; - am_Error_e getSinkClassInfoDB(const am_sinkID_t sinkID, am_SinkClass_s& sinkClass) const; - 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 getSinkInfoDB(const am_sinkID_t sinkID, am_Sink_s& sinkData) const; - am_Error_e getSourceInfoDB(const am_sourceID_t sourceID, am_Source_s& sourceData) const; - am_Error_e getCrossfaderInfoDB(const am_crossfaderID_t crossfaderID, am_Crossfader_s& crossfaderData) const; - am_Error_e getMainConnectionInfoDB(const am_mainConnectionID_t mainConnectionID, am_MainConnection_s& mainConnectionData) const; - am_Error_e getSinkMainVolume(const am_sinkID_t sinkID, am_mainVolume_t& mainVolume) const; - am_Error_e getSinkVolume(const am_sinkID_t sinkID, am_volume_t& volume) const; - am_Error_e getSourceVolume(const am_sourceID_t sourceID, am_volume_t& volume) const; - am_Error_e getSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getMainSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getMainSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getListSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_SoundProperty_s>& listSoundproperties) const; - am_Error_e getListSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_SoundProperty_s>& listSoundproperties) 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; - am_Error_e getListCrossfadersOfDomain(const am_domainID_t domainID, std::vector<am_crossfaderID_t>& listGatewaysID) const; - am_Error_e getListGatewaysOfDomain(const am_domainID_t domainID, std::vector<am_gatewayID_t>& listGatewaysID) const; - am_Error_e getListConvertersOfDomain(const am_domainID_t domainID, std::vector<am_converterID_t>& listConvertersID) const; - am_Error_e getListMainConnections(std::vector<am_MainConnection_s>& listMainConnections) const; - am_Error_e getListDomains(std::vector<am_Domain_s>& listDomains) const; - am_Error_e getListConnections(std::vector<am_Connection_s>& listConnections) const; - am_Error_e getListSinks(std::vector<am_Sink_s>& listSinks) const; - am_Error_e getListSources(std::vector<am_Source_s>& lisSources) const; - am_Error_e getListSourceClasses(std::vector<am_SourceClass_s>& listSourceClasses) const; - am_Error_e getListCrossfaders(std::vector<am_Crossfader_s>& listCrossfaders) const; - am_Error_e getListGateways(std::vector<am_Gateway_s>& listGateways) const; - am_Error_e getListConverters(std::vector<am_Converter_s> & listConverters) const; - am_Error_e getListSinkClasses(std::vector<am_SinkClass_s>& listSinkClasses) const; - am_Error_e getListVisibleMainConnections(std::vector<am_MainConnectionType_s>& listConnections) const; - am_Error_e getListMainSinks(std::vector<am_SinkType_s>& listMainSinks) const; - am_Error_e getListMainSources(std::vector<am_SourceType_s>& listMainSources) const; - am_Error_e getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_MainSoundProperty_s>& listSoundProperties) const; - am_Error_e getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_MainSoundProperty_s>& listSourceProperties) const; - am_Error_e getListSystemProperties(std::vector<am_SystemProperty_s>& listSystemProperties) const; - am_Error_e getListSinkConnectionFormats(const am_sinkID_t sinkID, std::vector<am_CustomAvailabilityReason_t> & listConnectionFormats) const; - am_Error_e getListSourceConnectionFormats(const am_sourceID_t sourceID, std::vector<am_CustomAvailabilityReason_t> & listConnectionFormats) const; - am_Error_e getListGatewayConnectionFormats(const am_gatewayID_t gatewayID, std::vector<bool> & listConnectionFormat) const; - am_Error_e getTimingInformation(const am_mainConnectionID_t mainConnectionID, am_timeSync_t& delay) const; - am_Error_e getDomainOfSource(const am_sourceID_t sourceID, am_domainID_t& domainID) const; - am_Error_e getDomainOfSink(const am_sinkID_t sinkID, am_domainID_t& domainID) const; - am_Error_e getDomainOfCrossfader(const am_converterID_t crossfader, am_domainID_t& domainID) const; - am_Error_e getSoureState(const am_sourceID_t sourceID, am_SourceState_e& sourceState) const; - am_Error_e getDomainState(const am_domainID_t domainID, am_DomainState_e& state) const; - am_Error_e peekDomain(const std::string& name, am_domainID_t& domainID); - am_Error_e peekSink(const std::string& name, am_sinkID_t& sinkID); - am_Error_e peekSource(const std::string& name, am_sourceID_t& sourceID); - am_Error_e peekSinkClassID(const std::string& name, am_sinkClass_t& sinkClassID); - am_Error_e peekSourceClassID(const std::string& name, am_sourceClass_t& sourceClassID); - am_Error_e changeSourceDB(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomAvailabilityReason_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties); - am_Error_e changeSinkDB(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomAvailabilityReason_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties); - am_Error_e getListMainSinkNotificationConfigurations(const am_sinkID_t sinkID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations); - am_Error_e getListMainSourceNotificationConfigurations(const am_sourceID_t sourceID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations); - am_Error_e changeMainSinkNotificationConfigurationDB(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration); - am_Error_e changeMainSourceNotificationConfigurationDB(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration); - am_Error_e changeGatewayDB(const am_gatewayID_t gatewayID, const std::vector<am_CustomAvailabilityReason_t>& listSourceConnectionFormats, const std::vector<am_CustomAvailabilityReason_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix); - am_Error_e changeConverterDB(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix); - am_Error_e changeSinkNotificationConfigurationDB(const am_sinkID_t sinkID,const am_NotificationConfiguration_s notificationConfiguration); - am_Error_e changeSourceNotificationConfigurationDB(const am_sourceID_t sourceID,const am_NotificationConfiguration_s notificationConfiguration); - - bool existMainConnection(const am_mainConnectionID_t mainConnectionID) const; - bool existCrossFader(const am_crossfaderID_t crossfaderID) const; - bool existConnection(const am_Connection_s & connection) const; - bool existConnectionID(const am_connectionID_t connectionID) const; - bool existSource(const am_sourceID_t sourceID) const; - bool existSourceNameOrID(const am_sourceID_t sourceID, const std::string& name) const; - bool existSourceName(const std::string& name) const; - bool existSink(const am_sinkID_t sinkID) const; - bool existSinkNameOrID(const am_sinkID_t sinkID, const std::string& name) const; - bool existSinkName(const std::string& name) const; - bool existDomain(const am_domainID_t domainID) const; - bool existGateway(const am_gatewayID_t gatewayID) const; - bool existConverter(const am_converterID_t converterID) const; - bool existSinkClass(const am_sinkClass_t sinkClassID) const; - bool existSourceClass(const am_sourceClass_t sourceClassID) const; - void registerObserver(CAmDatabaseObserver *iObserver); - bool sourceVisible(const am_sourceID_t sourceID) const; - bool sinkVisible(const am_sinkID_t sinkID) const; - bool isComponentConnected(const am_Gateway_s & gateway) const; - bool isComponentConnected(const am_Converter_s & converter) const; - void dump( std::ostream & output ) const; - am_Error_e enumerateSources(std::function<void(const am_Source_s & element)> cb) const; - am_Error_e enumerateSinks(std::function<void(const am_Sink_s & element)> cb) const; - am_Error_e enumerateGateways(std::function<void(const am_Gateway_s & element)> cb) const; - am_Error_e enumerateConverters(std::function<void(const am_Converter_s & element)> cb) const; - /** - * The following structures extend the base structures with the field 'reserved'. - */ - -#define AM_SUBCLASS_BEGIN(Subclass, Class) \ - typedef struct Subclass : public Class\ - { - -#define AM_SUBCLASS_CONSTR(Subclass, Class) \ - Subclass():Class() - -#define AM_SUBCLASS_CONSTR_BODY()\ - {}; - -#define AM_SUBCLASS_COPY_OP_START(Subclass, Class) \ - Subclass & operator=(const Subclass & anObject)\ - {\ - if (this != &anObject)\ - {\ - Class::operator=(anObject); - -#define AM_SUBCLASS_COPY_OP_END()\ - }\ - return *this;\ - }; - -#define AM_SUBCLASS_OP(Subclass, Class) \ - Subclass & operator=(const Class & anObject)\ - {\ - if (this != &anObject)\ - Class::operator=(anObject);\ - return *this;\ - }; - -#define AM_SUBCLASS_END(Typedef) \ - void getDescription (std::string & outString) const;\ - } Typedef; - -#define AM_TYPEDEF_SUBCLASS_RESERVED_FLAG_BEGIN(Subclass, Class)\ - AM_SUBCLASS_BEGIN(Subclass, Class)\ - bool reserved;\ - AM_SUBCLASS_CONSTR(Subclass, Class)\ - ,reserved(false)\ - AM_SUBCLASS_CONSTR_BODY()\ - AM_SUBCLASS_COPY_OP_START(Subclass, Class)\ - reserved = anObject.reserved;\ - AM_SUBCLASS_COPY_OP_END()\ - AM_SUBCLASS_OP(Subclass, Class)\ - -#define AM_TYPEDEF_SUBCLASS_SOUND_PROPERTIES_BEGIN(Subclass, Class)\ - AM_SUBCLASS_BEGIN(Subclass, Class)\ - bool reserved;\ - std::unordered_map<am_CustomSoundPropertyType_t, int16_t> cacheSoundProperties;\ - std::unordered_map<am_CustomMainSoundPropertyType_t, int16_t> cacheMainSoundProperties;\ - AM_SUBCLASS_CONSTR(Subclass, Class)\ - ,reserved(false), cacheSoundProperties(), cacheMainSoundProperties()\ - AM_SUBCLASS_CONSTR_BODY()\ - AM_SUBCLASS_COPY_OP_START(Subclass, Class)\ - reserved = anObject.reserved;\ - cacheSoundProperties = anObject.cacheSoundProperties;\ - cacheMainSoundProperties = anObject.cacheMainSoundProperties;\ - AM_SUBCLASS_COPY_OP_END()\ - AM_SUBCLASS_OP(Subclass, Class)\ - -#define AM_TYPEDEF_SUBCLASS_BEGIN(Subclass, Class)\ - AM_SUBCLASS_BEGIN(Subclass, Class)\ - AM_SUBCLASS_COPY_OP_START(Subclass, Class)\ - AM_SUBCLASS_COPY_OP_END()\ - AM_SUBCLASS_OP(Subclass, Class)\ - - - AM_TYPEDEF_SUBCLASS_RESERVED_FLAG_BEGIN(am_Domain_Database_s,am_Domain_s) - AM_SUBCLASS_END(CAmDomain) - - AM_TYPEDEF_SUBCLASS_SOUND_PROPERTIES_BEGIN(am_Sink_Database_s,am_Sink_s) - void getSinkType(am_SinkType_s & sinkType) const;\ - AM_SUBCLASS_END(CAmSink) - - AM_TYPEDEF_SUBCLASS_SOUND_PROPERTIES_BEGIN(am_Source_Database_s,am_Source_s) - void getSourceType(am_SourceType_s & sourceType) const;\ - AM_SUBCLASS_END(CAmSource) - - AM_TYPEDEF_SUBCLASS_RESERVED_FLAG_BEGIN(am_Connection_Database_s,am_Connection_s) - AM_SUBCLASS_END(CAmConnection) - - /** - * The following structures extend the base structures with print capabilities. - */ - AM_TYPEDEF_SUBCLASS_BEGIN(am_MainConnection_Database_s, am_MainConnection_s) - void getMainConnectionType(am_MainConnectionType_s & connectionType) const;\ - AM_SUBCLASS_END(CAmMainConnection) - - AM_TYPEDEF_SUBCLASS_BEGIN(am_SourceClass_Database_s, am_SourceClass_s) - AM_SUBCLASS_END(CAmSourceClass) - - AM_TYPEDEF_SUBCLASS_BEGIN(am_SinkClass_Database_s, am_SinkClass_s) - AM_SUBCLASS_END(CAmSinkClass) - - AM_TYPEDEF_SUBCLASS_BEGIN(am_Gateway_Database_s, am_Gateway_s) - AM_SUBCLASS_END(CAmGateway) - - AM_TYPEDEF_SUBCLASS_BEGIN(am_Converter_Database_s, am_Converter_s) - AM_SUBCLASS_END(CAmConverter) - - AM_TYPEDEF_SUBCLASS_BEGIN(am_Crossfader_Database_s, am_Crossfader_s) - AM_SUBCLASS_END(CAmCrossfader) - - private: - typedef std::unordered_map<am_domainID_t, CAmDomain> CAmMapDomain; - typedef std::unordered_map<am_sourceClass_t, CAmSourceClass> CAmMapSourceClass; - typedef std::unordered_map<am_sinkClass_t, CAmSinkClass> CAmMapSinkClass; - typedef std::unordered_map<am_sinkID_t, CAmSink> CAmMapSink; - typedef std::unordered_map<am_sourceID_t, CAmSource> CAmMapSource; - typedef std::unordered_map<am_gatewayID_t, CAmGateway> CAmMapGateway; - typedef std::unordered_map<am_converterID_t, CAmConverter> CAmMapConverter; - typedef std::unordered_map<am_crossfaderID_t, CAmCrossfader> CAmMapCrossfader; - typedef std::unordered_map<am_connectionID_t, CAmConnection> CAmMapConnection; - typedef std::unordered_map<am_mainConnectionID_t, CAmMainConnection> CAmMapMainConnection; - typedef std::vector<am_SystemProperty_s> CAmVectorSystemProperties; - /** - * The following structure groups the map objects needed for the implementation. - * Every map object is coupled with an identifier, which hold the current value. - * DYNAMIC_ID_BOUNDARY is used as initial value everywhere a dynamic id is considered . - * The IDs can be increased through the method increaseID(...), which follows the AudioManager logic. - * For more information about the static and dynamic IDs, please see the documentation. - */ - typedef struct CAmMappedData - { - /** - * The structure encapsulates the id boundary and the current id value. - * It defines a range within the id can vary. - */ - struct am_Identifier_s - { - int16_t mMin; //!< min possible value - int16_t mMax; //!< max possible value - int16_t mCurrentValue; //!< current value - - am_Identifier_s():mMin(DYNAMIC_ID_BOUNDARY), mMax(SHRT_MAX), mCurrentValue(mMin){}; - am_Identifier_s(const int16_t & min, const int16_t & max):mMin(min), mMax(max), mCurrentValue(mMin){assert(min<max);}; - }; - - am_Identifier_s mCurrentDomainID; //!< domain ID - am_Identifier_s mCurrentSourceClassesID; //!< source classes ID - am_Identifier_s mCurrentSinkClassesID; //!< sink classes ID - am_Identifier_s mCurrentSinkID; //!< sink ID - am_Identifier_s mCurrentSourceID; //!< source ID - am_Identifier_s mCurrentGatewayID; //!< gateway ID - am_Identifier_s mCurrentConverterID; //!< converter ID - am_Identifier_s mCurrentCrossfaderID; //!< crossfader ID - am_Identifier_s mCurrentConnectionID; //!< connection ID - am_Identifier_s mCurrentMainConnectionID; //!< mainconnection ID - - CAmVectorSystemProperties mSystemProperties; //!< vector with system properties - CAmMapDomain mDomainMap; //!< map for domain structures - CAmMapSourceClass mSourceClassesMap; //!< map for source classes structures - CAmMapSinkClass mSinkClassesMap; //!< map for sink classes structures - CAmMapSink mSinkMap; //!< map for sink structures - CAmMapSource mSourceMap; //!< map for source structures - CAmMapGateway mGatewayMap; //!< map for gateway structures - CAmMapConverter mConverterMap; //!< map for converter structures - CAmMapCrossfader mCrossfaderMap; //!< map for crossfader structures - CAmMapConnection mConnectionMap; //!< map for connection structures - CAmMapMainConnection mMainConnectionMap; //!< map for main connection structures - - CAmMappedData(): //For Domain, MainConnections, Connections we don't have static IDs. - mCurrentDomainID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentSourceClassesID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentSinkClassesID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentSinkID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentSourceID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentGatewayID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentConverterID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentCrossfaderID(DYNAMIC_ID_BOUNDARY, SHRT_MAX), - mCurrentConnectionID(1, AM_MAX_CONNECTIONS), - mCurrentMainConnectionID(1, AM_MAX_MAIN_CONNECTIONS), - - mSystemProperties(), - mDomainMap(),mSourceClassesMap(), mSinkClassesMap(), mSinkMap(AM_MAP_CAPACITY), mSourceMap(AM_MAP_CAPACITY), - mGatewayMap(), mConverterMap(), mCrossfaderMap(), mConnectionMap(), mMainConnectionMap() - {}; - /** - * \brief Increases a given map ID. - * - * A common method implementing the logic for static and dynamic IDs except main connection ID. - * - * @param resultID Pointer to an output variable. - * @param sourceID Pointer to ID, which will be manipulated. - * @param desiredStaticID Not 0 for static IDs and 0 for dynamic IDs. - * Usually the static IDs are in interval [1 , DYNAMIC_ID_BOUNDARY]. Default is 0. - * @param preferedStaticIDBoundary A limit for a given dynamic ID. Default is DYNAMIC_ID_BOUNDARY. - * @return TRUE on successfully changed ID. - */ - bool increaseID(int16_t & resultID, am_Identifier_s & sourceID, int16_t const desiredStaticID); - /** - * \brief Increases the main connection ID. - * - * @param resultID Pointer to an output variable. - * @return TRUE on successfully changed ID. - */ - bool increaseMainConnectionID(int16_t & resultID); - - /** - * \brief Increases the connection ID. - * - * @param resultID Pointer to an output variable. - * @return TRUE on successfully changed ID. - */ - bool increaseConnectionID(int16_t & resultID); - - template <class TPrintObject> static void print (const TPrintObject & t, std::ostream & output) - { - std::string description; - t.getDescription( description ); - output << description; - } - template <typename TPrintMapKey,class TPrintMapObject> static void printMap (const std::unordered_map<TPrintMapKey, TPrintMapObject> & t, std::ostream & output) - { - typename std::unordered_map<TPrintMapKey, TPrintMapObject>::const_iterator iter = t.begin(); - for(; iter!=t.end(); iter++) - CAmMappedData::print(iter->second, output); - } - private: - template <typename TMapKey,class TMapObject> bool getNextConnectionID(int16_t & resultID, am_Identifier_s & sourceID, - const std::unordered_map<TMapKey, TMapObject> & map); - } CAmMappedData; - /* - * Helper methods. - */ - am_timeSync_t calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const; //!< calculates a new main connection delay - int16_t calculateDelayForRoute(const std::vector<am_connectionID_t>& listConnectionID); - bool insertSinkDB(const am_Sink_s & sinkData, am_sinkID_t & sinkID); - bool insertCrossfaderDB(const am_Crossfader_s & crossfaderData, am_crossfaderID_t & crossfaderID); - bool insertGatewayDB(const am_Gateway_s & gatewayData, am_gatewayID_t & gatewayID); - bool insertConverterDB(const am_Converter_s & converteData, am_converterID_t & converterID); - bool insertSourceDB(const am_Source_s & sourceData, am_sourceID_t & sourceID); - bool insertSinkClassDB(const am_SinkClass_s & sinkClass, am_sinkClass_t & sinkClassID); - bool insertSourceClassDB(am_sourceClass_t & sourceClassID, const am_SourceClass_s & sourceClass); - const am_Sink_Database_s * sinkWithNameOrID(const am_sinkID_t sinkID, const std::string & name) const; - const am_Source_Database_s * sourceWithNameOrID(const am_sourceID_t sourceID, const std::string & name) const; - template <class Component> bool isConnected(const Component & comp) const - { - return std::find_if(mMappedData.mConnectionMap.begin(), mMappedData.mConnectionMap.end(),[&](const std::pair<am_connectionID_t, am_Connection_Database_s>& rConnection){ - return (rConnection.second.sinkID == comp.sinkID ||rConnection.second.sourceID ==comp.sourceID);})!=mMappedData.mConnectionMap.end(); - } - void filterDuplicateNotificationConfigurationTypes(std::vector<am_NotificationConfiguration_s> & list) - { - std::vector<am_NotificationConfiguration_s> oldList(list); - list.clear(); - std::for_each(oldList.begin(), oldList.end(), [&](am_NotificationConfiguration_s & provided) { - std::vector<am_NotificationConfiguration_s>::iterator found = - std::find_if(list.begin(), list.end(), [&](am_NotificationConfiguration_s & stored) { - if (provided.type == stored.type) { - stored = provided; - return true; - } - return false; - } ); - if (found == list.end()) - list.push_back(provided); - } ); - } - - CAmDatabaseObserver *mpDatabaseObserver; //!< pointer to the Observer - ListConnectionFormat mListConnectionFormat; //!< list of connection formats - CAmMappedData mMappedData; //!< Internal structure encapsulating all the maps used in this class -#ifdef UNIT_TEST - public: - void setConnectionIDRange(const int16_t & min, const int16_t & max) - { - mMappedData.mCurrentConnectionID.mMin = min; - mMappedData.mCurrentConnectionID.mMax = max; - } - void setMainConnectionIDRange(const int16_t & min, const int16_t & max) - { - mMappedData.mCurrentMainConnectionID.mMin = min; - mMappedData.mCurrentMainConnectionID.mMax = max; - } - void setSinkIDRange(const int16_t & min, const int16_t & max) - { - mMappedData.mCurrentSinkID.mMin = min; - mMappedData.mCurrentSinkID.mMax = max; - } -#endif -}; - -} - -#endif /* MAPHANDLER_H_ */ diff --git a/AudioManagerDaemon/include/CAmDatabaseHandlerSQLite.h b/AudioManagerDaemon/include/CAmDatabaseHandlerSQLite.h deleted file mode 100644 index c9005e3..0000000 --- a/AudioManagerDaemon/include/CAmDatabaseHandlerSQLite.h +++ /dev/null @@ -1,208 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmDatabaseHandlerSQLite.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef DATABASEHANDLER_H_ -#define DATABASEHANDLER_H_ - -#include "IAmDatabaseHandler.h" -#include <map> -#include <sqlite3.h> - -namespace am -{ - -class CAmDatabaseObserver; -class CAmRoutingTree; -class CAmRoutingTreeItem; - -//todo: check the enum values before entering & changing in the database. -//todo: change asserts for dynamic boundary checks into failure answers.# -//todo: check autoincrement boundary and set to 16bit limits -//todo: If the sink is part of a gateway, the listconnectionFormats is copied to the gatewayInformation. Check this statement for sinks & sources -//todo: exchange last_insert_row id to be more safe -//todo: create test to ensure uniqueness of names throughout the database -//todo: enforce the uniqueness of names - -/** - * This class handles and abstracts the database - */ -class CAmDatabaseHandlerSQLite : public IAmDatabaseHandler -{ -private: - am_timeSync_t calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const; //!< calculates a new main connection delay - - CAmDatabaseObserver *mpDatabaseObserver; //!< pointer to the Observer - bool mFirstStaticSink; //!< bool for dynamic range handling - bool mFirstStaticSource; //!< bool for dynamic range handling - bool mFirstStaticGateway; //!< bool for dynamic range handling - bool mFirstStaticConverter; //!< bool for dynamic range handling - bool mFirstStaticSinkClass; //!< bool for dynamic range handling - bool mFirstStaticSourceClass; //!< bool for dynamic range handling - bool mFirstStaticCrossfader; //!< bool for dynamic range handling - ListConnectionFormat mListConnectionFormat; //!< list of connection formats - sqlite3 *mpDatabase; //!< pointer to the database - std::string mPath; //!< path to the database - bool sqQuery(const std::string& query); //!< queries the database - bool openDatabase(); //!< opens the database - void createTables(); //!< creates all tables from the static table -public: - CAmDatabaseHandlerSQLite(); - CAmDatabaseHandlerSQLite(std::string databasePath); - virtual ~CAmDatabaseHandlerSQLite(); - am_Error_e enterDomainDB(const am_Domain_s& domainData, am_domainID_t& domainID); - am_Error_e enterMainConnectionDB(const am_MainConnection_s& mainConnectionData, am_mainConnectionID_t& connectionID); - am_Error_e enterSinkDB(const am_Sink_s& sinkData, am_sinkID_t& sinkID); - am_Error_e enterCrossfaderDB(const am_Crossfader_s& crossfaderData, am_crossfaderID_t& crossfaderID); - am_Error_e enterGatewayDB(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID); - am_Error_e enterConverterDB(const am_Converter_s & converteData, am_converterID_t & converterID); - am_Error_e enterSourceDB(const am_Source_s& sourceData, am_sourceID_t& sourceID); - am_Error_e enterConnectionDB(const am_Connection_s& connection, am_connectionID_t& connectionID); - am_Error_e enterSinkClassDB(const am_SinkClass_s& sinkClass, am_sinkClass_t& sinkClassID); - am_Error_e enterSourceClassDB(am_sourceClass_t& sourceClassID, const am_SourceClass_s& sourceClass); - am_Error_e enterSystemProperties(const std::vector<am_SystemProperty_s>& listSystemProperties); - am_Error_e changeMainConnectionRouteDB(const am_mainConnectionID_t mainconnectionID, const std::vector<am_connectionID_t>& listConnectionID); - am_Error_e changeMainConnectionStateDB(const am_mainConnectionID_t mainconnectionID, const am_ConnectionState_e connectionState); - am_Error_e changeSinkMainVolumeDB(const am_mainVolume_t mainVolume, const am_sinkID_t sinkID); - am_Error_e changeSinkAvailabilityDB(const am_Availability_s& availability, const am_sinkID_t sinkID); - am_Error_e changDomainStateDB(const am_DomainState_e domainState, const am_domainID_t domainID); - am_Error_e changeSinkMuteStateDB(const am_MuteState_e muteState, const am_sinkID_t sinkID); - am_Error_e changeMainSinkSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sinkID_t sinkID); - am_Error_e changeMainSourceSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sourceID_t sourceID); - am_Error_e changeSourceSoundPropertyDB(const am_SoundProperty_s& soundProperty, const am_sourceID_t sourceID); - am_Error_e changeSinkSoundPropertyDB(const am_SoundProperty_s& soundProperty, const am_sinkID_t sinkID); - am_Error_e changeSourceAvailabilityDB(const am_Availability_s& availability, const am_sourceID_t sourceID); - am_Error_e changeSystemPropertyDB(const am_SystemProperty_s& property); - am_Error_e changeDelayMainConnection(const am_timeSync_t & delay, const am_mainConnectionID_t & connectionID); - am_Error_e changeSinkClassInfoDB(const am_SinkClass_s& sinkClass); - am_Error_e changeSourceClassInfoDB(const am_SourceClass_s& sourceClass); - am_Error_e changeConnectionTimingInformation(const am_connectionID_t connectionID, const am_timeSync_t delay); - am_Error_e changeConnectionFinal(const am_connectionID_t connectionID); - am_Error_e changeSourceState(const am_sourceID_t sourceID, const am_SourceState_e sourceState); - am_Error_e changeSinkVolume(const am_sinkID_t sinkID, const am_volume_t volume); - am_Error_e changeSourceVolume(const am_sourceID_t sourceID, const am_volume_t volume); - am_Error_e changeCrossFaderHotSink(const am_crossfaderID_t crossfaderID, const am_HotSink_e hotsink); - am_Error_e removeMainConnectionDB(const am_mainConnectionID_t mainConnectionID); - am_Error_e removeSinkDB(const am_sinkID_t sinkID); - am_Error_e removeSourceDB(const am_sourceID_t sourceID); - am_Error_e removeGatewayDB(const am_gatewayID_t gatewayID); - am_Error_e removeConverterDB(const am_converterID_t converterID); - am_Error_e removeCrossfaderDB(const am_crossfaderID_t crossfaderID); - am_Error_e removeDomainDB(const am_domainID_t domainID); - am_Error_e removeSinkClassDB(const am_sinkClass_t sinkClassID); - am_Error_e removeSourceClassDB(const am_sourceClass_t sourceClassID); - am_Error_e removeConnection(const am_connectionID_t connectionID); - am_Error_e getSourceClassInfoDB(const am_sourceID_t sourceID, am_SourceClass_s& classInfo) const; - am_Error_e getSinkClassInfoDB(const am_sinkID_t sinkID, am_SinkClass_s& sinkClass) const; - 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 getSinkInfoDB(const am_sinkID_t sinkID, am_Sink_s& sinkData) const; - am_Error_e getSourceInfoDB(const am_sourceID_t sourceID, am_Source_s& sourceData) const; - am_Error_e getCrossfaderInfoDB(const am_crossfaderID_t crossfaderID, am_Crossfader_s& crossfaderData) const; - am_Error_e getMainConnectionInfoDB(const am_mainConnectionID_t mainConnectionID, am_MainConnection_s& mainConnectionData) const; - am_Error_e getSinkMainVolume(const am_sinkID_t sinkID, am_mainVolume_t& mainVolume) const; - am_Error_e getSinkVolume(const am_sinkID_t sinkID, am_volume_t& volume) const; - am_Error_e getSourceVolume(const am_sourceID_t sourceID, am_volume_t& volume) const; - am_Error_e getMainSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getMainSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const; - am_Error_e getListSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_SoundProperty_s>& listSoundproperties) const; - am_Error_e getListSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_SoundProperty_s>& listSoundproperties) 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; - am_Error_e getListCrossfadersOfDomain(const am_domainID_t domainID, std::vector<am_crossfaderID_t>& listGatewaysID) const; - am_Error_e getListGatewaysOfDomain(const am_domainID_t domainID, std::vector<am_gatewayID_t>& listGatewaysID) const; - am_Error_e getListConvertersOfDomain(const am_domainID_t domainID, std::vector<am_converterID_t>& listConvertersID) const; - am_Error_e getListMainConnections(std::vector<am_MainConnection_s>& listMainConnections) const; - am_Error_e getListDomains(std::vector<am_Domain_s>& listDomains) const; - am_Error_e getListConnections(std::vector<am_Connection_s>& listConnections) const; - am_Error_e getListSinks(std::vector<am_Sink_s>& listSinks) const; - am_Error_e getListSources(std::vector<am_Source_s>& lisSources) const; - am_Error_e getListSourceClasses(std::vector<am_SourceClass_s>& listSourceClasses) const; - am_Error_e getListCrossfaders(std::vector<am_Crossfader_s>& listCrossfaders) const; - am_Error_e getListGateways(std::vector<am_Gateway_s>& listGateways) const; - am_Error_e getListConverters(std::vector<am_Converter_s> & listConverters) const; - am_Error_e getListSinkClasses(std::vector<am_SinkClass_s>& listSinkClasses) const; - am_Error_e getListVisibleMainConnections(std::vector<am_MainConnectionType_s>& listConnections) const; - am_Error_e getListMainSinks(std::vector<am_SinkType_s>& listMainSinks) const; - am_Error_e getListMainSources(std::vector<am_SourceType_s>& listMainSources) const; - am_Error_e getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_MainSoundProperty_s>& listSoundProperties) const; - am_Error_e getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_MainSoundProperty_s>& listSourceProperties) const; - am_Error_e getListSystemProperties(std::vector<am_SystemProperty_s>& listSystemProperties) const; - am_Error_e getListSinkConnectionFormats(const am_sinkID_t sinkID, std::vector<am_CustomAvailabilityReason_t> & listConnectionFormats) const; - am_Error_e getListSourceConnectionFormats(const am_sourceID_t sourceID, std::vector<am_CustomAvailabilityReason_t> & listConnectionFormats) const; - am_Error_e getListGatewayConnectionFormats(const am_gatewayID_t gatewayID, std::vector<bool> & listConnectionFormat) const; - am_Error_e getListConverterConnectionFormats(const am_converterID_t converterID, std::vector<bool> & listConnectionFormat) const; - am_Error_e getTimingInformation(const am_mainConnectionID_t mainConnectionID, am_timeSync_t& delay) const; - am_Error_e getDomainOfSource(const am_sourceID_t sourceID, am_domainID_t& domainID) const; - am_Error_e getDomainOfSink(const am_sinkID_t sinkID, am_domainID_t& domainID) const; - am_Error_e getDomainOfCrossfader(const am_crossfaderID_t crossfader, am_domainID_t& domainID) const; - am_Error_e getSoureState(const am_sourceID_t sourceID, am_SourceState_e& sourceState) const; - am_Error_e getDomainState(const am_domainID_t domainID, am_DomainState_e& state) const; - am_Error_e peekDomain(const std::string& name, am_domainID_t& domainID); - am_Error_e peekSink(const std::string& name, am_sinkID_t& sinkID); - am_Error_e peekSource(const std::string& name, am_sourceID_t& sourceID); - am_Error_e peekSinkClassID(const std::string& name, am_sinkClass_t& sinkClassID); - am_Error_e peekSourceClassID(const std::string& name, am_sourceClass_t& sourceClassID); - am_Error_e changeSourceDB(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomAvailabilityReason_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties); - am_Error_e changeSinkDB(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomAvailabilityReason_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties); - am_Error_e getListMainSinkNotificationConfigurations(const am_sinkID_t sinkID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations); - am_Error_e getListMainSourceNotificationConfigurations(const am_sourceID_t sourceID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations); - am_Error_e changeMainSinkNotificationConfigurationDB(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration); - am_Error_e changeMainSourceNotificationConfigurationDB(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration); - am_Error_e changeGatewayDB(const am_gatewayID_t gatewayID, const std::vector<am_CustomAvailabilityReason_t>& listSourceConnectionFormats, const std::vector<am_CustomAvailabilityReason_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix); - am_Error_e changeConverterDB(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix); - am_Error_e changeSinkNotificationConfigurationDB(const am_sinkID_t sinkID,const am_NotificationConfiguration_s notificationConfiguration); - am_Error_e changeSourceNotificationConfigurationDB(const am_sourceID_t sourceID,const am_NotificationConfiguration_s notificationConfiguration); - - bool existMainConnection(const am_mainConnectionID_t mainConnectionID) const; - bool existCrossFader(const am_crossfaderID_t crossfaderID) const; - bool existConnection(const am_Connection_s & connection) const; - bool existConnectionID(const am_connectionID_t connectionID) const; - bool existSource(const am_sourceID_t sourceID) const; - bool existSourceNameOrID(const am_sourceID_t sourceID, const std::string& name) const; - bool existSourceName(const std::string& name) const; - bool existSink(const am_sinkID_t sinkID) const; - bool existSinkNameOrID(const am_sinkID_t sinkID, const std::string& name) const; - bool existSinkName(const std::string& name) const; - bool existDomain(const am_domainID_t domainID) const; - bool existGateway(const am_gatewayID_t gatewayID) const; - bool existConverter(const am_converterID_t converterID) const; - bool existSinkClass(const am_sinkClass_t sinkClassID) const; - bool existSourceClass(const am_sourceClass_t sourceClassID) const; - void registerObserver(CAmDatabaseObserver *iObserver); - bool sourceVisible(const am_sourceID_t sourceID) const; - bool sinkVisible(const am_sinkID_t sinkID) const; - bool isComponentConnected(const am_Gateway_s & gateway) const; - bool isComponentConnected(const am_Converter_s & converter) const; - //todo: Implement dump for SQLite database handler - void dump( std::ostream & output) const { output << __FUNCTION__ << " not implemented!"; }; - am_Error_e enumerateSources(std::function<void(const am_Source_s & element)> cb) const; - am_Error_e enumerateSinks(std::function<void(const am_Sink_s & element)> cb) const; - am_Error_e enumerateGateways(std::function<void(const am_Gateway_s & element)> cb) const; - am_Error_e enumerateConverters(std::function<void(const am_Converter_s & element)> cb) const; -}; - -} - -#endif /* DATABASEHANDLER_H_ */ diff --git a/AudioManagerDaemon/include/CAmDatabaseObserver.h b/AudioManagerDaemon/include/CAmDatabaseObserver.h deleted file mode 100644 index 7d18be4..0000000 --- a/AudioManagerDaemon/include/CAmDatabaseObserver.h +++ /dev/null @@ -1,87 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmDatabaseObserver.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef DATABASEOBSERVER_H_ -#define DATABASEOBSERVER_H_ - -#include "audiomanagertypes.h" -#include <queue> -#include "CAmSerializer.h" - -namespace am -{ - -class CAmTelnetServer; -class CAmCommandSender; -class CAmRoutingSender; -class CAmSocketHandler; - -/** - * This class observes the Database and notifies other classes about important events, mainly the CommandSender. - */ -class CAmDatabaseObserver -{ -public: - CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler); - CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler, CAmTelnetServer *iTelnetServer); - ~CAmDatabaseObserver(); - void numberOfSinkClassesChanged(); - void numberOfSourceClassesChanged(); - void newSink(const am_Sink_s& sink); - void newSource(const am_Source_s& source); - void newDomain(const am_Domain_s& domain); - void newGateway(const am_Gateway_s& gateway); - void newConverter(const am_Converter_s& coverter); - void newCrossfader(const am_Crossfader_s& crossfader); - void newMainConnection(const am_MainConnectionType_s& mainConnection); - void removedMainConnection(const am_mainConnectionID_t mainConnection); - void removedSink(const am_sinkID_t sinkID, const bool visible); - void removedSource(const am_sourceID_t sourceID, const bool visible); - void removeDomain(const am_domainID_t domainID); - void removeGateway(const am_gatewayID_t gatewayID); - void removeConverter(const am_converterID_t converterID); - void removeCrossfader(const am_crossfaderID_t crossfaderID); - void mainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState); - void mainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s& SoundProperty); - void mainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s& SoundProperty); - void sinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s& availability); - void sourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s& availability); - void volumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume); - void sinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState); - void systemPropertyChanged(const am_SystemProperty_s& SystemProperty); - void timingInformationChanged(const am_mainConnectionID_t mainConnection, const am_timeSync_t time); - void sinkUpdated(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible); - void sourceUpdated(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible); - void sinkMainNotificationConfigurationChanged(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration); - void sourceMainNotificationConfigurationChanged(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration); - -private: - CAmCommandSender *mCommandSender; //!< pointer to the comandSender - CAmRoutingSender* mRoutingSender; //!< pointer to the routingSender - CAmTelnetServer* mTelnetServer; //!< pointer to the telnetserver - CAmSerializer mSerializer; //!< serializer to handle the CommandInterface via the mainloop -}; - -} - -#endif /* DATABASEOBSERVER_H_ */ diff --git a/AudioManagerDaemon/include/CAmGraph.h b/AudioManagerDaemon/include/CAmGraph.h deleted file mode 100644 index ff4a09c..0000000 --- a/AudioManagerDaemon/include/CAmGraph.h +++ /dev/null @@ -1,630 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Aleksandar Donchev, aleksander.donchev@partner.bmw.de BMW 2014 - * - * \file CAmGraph.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef GRAPH_H -#define GRAPH_H - -#include <functional> -#include <iostream> -#include <vector> -#include <map> -#include <list> -#include <stack> -#include <queue> -#include <algorithm> -#include <limits.h> -#include <iomanip> -#include <cstring> -#include <set> - - -namespace am -{ - /** - * Graph element status. - */ - typedef enum:uint8_t - { - GES_NOT_VISITED, - GES_IN_PROGRESS, - GES_VISITED - }am_GraphElementStatus_e; - - /** - * Callback parameter telling on which position in the path we are. - */ - typedef enum:uint8_t - { - GRAPH_PATH_START, //at the beginning of the path - GRAPH_PATH_MIDDLE, //in middle of the path - GRAPH_PATH_END //at the end of the path - }am_GraphPathPosition_e; - - - /** - * This class is base class for nodes and vertices. - */ - class CAmGraphElement - { - am_GraphElementStatus_e mStatus; //!< item status - public: - CAmGraphElement(): mStatus(GES_NOT_VISITED) { }; - ~CAmGraphElement() { }; - /** - * Setter and getter. - */ - void setStatus(const am_GraphElementStatus_e s) { mStatus = s; }; - am_GraphElementStatus_e getStatus() const { return mStatus; }; - }; - - template <class NodeData> class CAmNode : public CAmGraphElement - { - uint16_t mIndex; //!< uint16_t index used for direct access - NodeData mData; //!< NodeData user data - public: - CAmNode(const NodeData & in):CAmGraphElement(), mIndex(0), mData(in) { }; - CAmNode(const NodeData & in, const uint16_t index):CAmGraphElement(), mIndex(index), mData(in) { }; - ~CAmNode() { }; - /** - * Setters and getters. - */ - NodeData & getData() { return mData; } - uint16_t getIndex() const { return mIndex; } - void setIndex(uint16_t index) { mIndex = index; } - }; - - template <class NodeData, class VertexData> class CAmVertex : public CAmGraphElement - { - CAmNode<NodeData>* mpNode; //!< CAmNode<NodeData>* pointer to a node - VertexData mVertexData; //!< VertexData vertex user data - uint16_t mWeight; //!< uint16_t a positive value used in the shortest path algorithms - public: - CAmVertex(CAmNode<NodeData> *aNode, const VertexData & vertexData, const uint16_t weight):CAmGraphElement(), - mpNode(aNode), mVertexData(vertexData), mWeight(weight) { }; - ~CAmVertex() { }; - /** - * Setters and getters. - */ - CAmNode<NodeData>* getNode() const { return mpNode; } - VertexData & getData() { return mVertexData; } - uint16_t getWeight() const { return mWeight; } - void setWeight(const uint16_t weight) { mWeight=weight; } - }; - - /** - * Class representing a directed or undirected graph. It contains nodes and connections. - * T, V are types for custom user data. - */ - template <class T, class V> class CAmGraph - { - typedef typename std::vector<CAmNode<T>*> CAmListNodePtrs; - typedef typename std::list<CAmVertex<T,V>> CAmListVertices; - typedef typename std::list<CAmVertex<T,V>>::iterator CAmListVerticesItr; - typedef typename std::list<CAmVertex<T,V>>::const_iterator CAmListVerticesItrConst; - typedef typename std::list<CAmListVertices> CAmNodesAdjList; - typedef typename std::list<CAmListVertices>::iterator CAmNodesAdjListItr; - typedef typename std::list<CAmListVertices>::const_iterator CAmNodesAdjListItrConst; - typedef typename std::list<CAmNode<T>> CAmListNodes; - typedef typename std::list<CAmNode<T>>::iterator CAmListNodesItr; - typedef typename std::list<CAmNode<T>>::const_iterator CAmListNodesItrConst; - typedef typename std::vector<CAmNode<T>*> CAmNodeReferenceList; - typedef typename std::vector<CAmListVertices*> CAmVertexReferenceList; - - CAmListNodes mStoreNodes; //!< CAmListNodes list with all nodes - CAmNodesAdjList mStoreAdjList; //!< CAmNodesAdjList adjacency list - CAmNodeReferenceList mPointersNodes; //!< CAmNodeReferenceList vector with pointers to nodes for direct access - CAmVertexReferenceList mPointersAdjList; //!< CAmVertexReferenceList vector with pointers to vertices for direct access - bool mIsCyclic; //!< bool the graph has cycles or not - - /** - * Updates the node indexes after adding or removing nodes. - * - * @param fromIndex updates all nodes from given index. - */ - void updateIndexes(const int16_t fromIndex) - { - if( fromIndex<mPointersNodes.size() ) - { - for(auto iter = mPointersNodes.begin()+fromIndex; iter!=mPointersNodes.end(); iter++) - (*iter)->setIndex(iter-mPointersNodes.begin()); - } - } - - - /** - * Finds the shortest path and the minimal weights from given node. - * - * @param node start node. - * @param minDistance vector with all result distances. - * @param previous vector with previous nodes. - */ - - typedef uint16_t vertex_t; - typedef uint16_t weight_t; - - void findShortestsPathsFromNode(const CAmNode<T> & node, std::vector<weight_t> &minDistance, std::vector<CAmNode<T> *> &previous) - { - typename CAmListVertices::const_iterator nIter; - CAmListVertices * neighbors; - weight_t dist, weight, v, distanceThroughU; - CAmNode<T>* pU; - CAmVertex<T,V> * pVertex; - CAmNode<T> *pDstNode; - - size_t n = mPointersAdjList.size(); - std::set<std::pair<weight_t, CAmNode<T>*> > vertexQueue; - - minDistance.clear(); - minDistance.resize(n, std::numeric_limits<weight_t>::max()); - minDistance[node.getIndex()] = 0; - previous.clear(); - previous.resize(n, NULL); - - vertexQueue.insert(std::make_pair(minDistance[node.getIndex()], (CAmNode<T>*)&node)); - - while (!vertexQueue.empty()) - { - dist = vertexQueue.begin()->first; - pU = vertexQueue.begin()->second; - vertexQueue.erase(vertexQueue.begin()); - //todo: terminate the search at this position if you want the path to a target node ( if(pU==target)break; ) - - // Visit each edge exiting u - neighbors = mPointersAdjList[pU->getIndex()]; - nIter = neighbors->begin(); - for (; nIter != neighbors->end(); nIter++) - { - pVertex = (CAmVertex<T,V> *)&(*nIter); - pDstNode = pVertex->getNode(); - - v = pDstNode->getIndex(); - weight = pVertex->getWeight(); - distanceThroughU = dist + weight; - if (distanceThroughU < minDistance[pDstNode->getIndex()]) - { - vertexQueue.erase(std::make_pair(minDistance[v], pDstNode)); - minDistance[v] = distanceThroughU; - previous[v] = pU; - vertexQueue.insert(std::make_pair(minDistance[v], pDstNode)); - } - } - } - } - - /** - * Constructs a path to given node after findShortestsPathsFromNode has been called. - * - * @param node end node. - * @param previous vector with previous nodes. - * @param result result path. - */ - void constructShortestPathTo(const CAmNode<T> & node, const std::vector<CAmNode<T> *> &previous, CAmListNodePtrs & result) - { - CAmNode<T> * vertex = (CAmNode<T> *)&node; - - int i=0; - while ( (vertex = previous[vertex->getIndex()])!=NULL ) - { - result.insert(result.begin(), vertex); - i++; - } - if(i) - result.push_back((CAmNode<T> *)&node); - } - - /** - * Calls a function with every node from this path after findShortestsPathsFromNode has been called. - * The construction of the path is delegated to the caller. - * - * @param node end node. - * @param previous vector with previous nodes. - * @param cb callback which is mostly used for constructing. - */ - void constructShortestPathTo(const CAmNode<T> & node, const std::vector<CAmNode<T> *> &previous, std::function<void(const am_GraphPathPosition_e pos, CAmNode<T> &)> cb) - { - CAmNode<T> * vertex = (CAmNode<T> *)&node; - CAmNode<T> * prev = vertex; - int i=0; - while ( (vertex = previous[vertex->getIndex()])!=NULL ) - { - cb(i==0?GRAPH_PATH_START:GRAPH_PATH_MIDDLE, *prev); - prev = vertex; - i++; - } - if(i) - cb(GRAPH_PATH_END, *prev); - } - - /** - * Generates list with all possible paths to given destination node after findShortestsPathsFromNode has been called. - * Finding paths is observed through the callback. The caller is informed after a new path has been found. - * - * @param dst end node. - * @param visited vector with current path. - * @param cb callback which is mostly used for constructing. - */ - void goThroughAllPaths(const CAmNode<T> & dst, std::vector<CAmNode<T>*> & visited, std::function<void(const CAmNodeReferenceList & path)> cb) - { - CAmListVertices * nodes = mPointersAdjList[visited.back()->getIndex()]; - CAmListVerticesItrConst vItr(nodes->begin()); - for (; vItr != nodes->end(); ++vItr) - { - const CAmVertex<T,V> & vertex = (*vItr); - if(vertex.getNode()->getStatus()!=GES_NOT_VISITED) - continue; - if (vertex.getNode()==&dst) - { - vertex.getNode()->setStatus(GES_IN_PROGRESS); - visited.push_back(vertex.getNode()); - //notify observer - cb(visited); - //remove last node from the list - auto last = visited.end()-1; - visited.erase(last); - vertex.getNode()->setStatus(GES_NOT_VISITED); - break; - } - } - vItr = nodes->begin(); - //bfs like loop - for (; vItr != nodes->end(); ++vItr) - { - const CAmVertex<T,V> & vertex = (*vItr); - if(vertex.getNode()->getStatus()!=GES_NOT_VISITED||vertex.getNode()==&dst) - continue; - vertex.getNode()->setStatus(GES_IN_PROGRESS); - visited.push_back(vertex.getNode()); - goThroughAllPaths(dst, visited, cb); - //remove last node from the list - auto last = visited.end()-1; - visited.erase(last); - vertex.getNode()->setStatus(GES_NOT_VISITED); - } - } - - public: - explicit CAmGraph(const std::vector<T> &v):mStoreNodes(), mStoreAdjList(), mPointersNodes(), mPointersAdjList() - { - typedef typename std::vector<T>::const_iterator inItr; - inItr itr(v.begin()); - - for (; itr != v.end(); ++itr) - { - addNode(*itr); - } - - mIsCyclic = false; - }; - CAmGraph():mStoreNodes(), mStoreAdjList(), mPointersNodes(), mPointersAdjList(), mIsCyclic(false){}; - ~CAmGraph(){} - - const CAmListNodes & getNodes() const - { - return mStoreNodes; - } - - const CAmVertexReferenceList & getVertexList() const - { - return mPointersAdjList; - } - - /** - * Returns pointer to a node which data is equal to the given. - * @return pointer to a node or NULL. - */ - const CAmNode<T>* findNode(const T & in) - { - typename CAmNodeReferenceList::const_iterator itr (mPointersNodes.begin()); - - for (; itr != mPointersNodes.end(); ++itr) - { - if ((*itr)->getData() == in) { - return (*itr); - } - } - return NULL; - } - - /** - * Returns pointer to a vertex which two ends are equal to the given nodes. - * @return pointer to a vertex or NULL. - */ - const CAmVertex<T,V>* findVertex(const CAmNode<T> & edge1, const CAmNode<T> & edge2) const - { - const CAmNode<T> * pEdge2 = (CAmNode<T> *)&edge2; - const CAmListVertices * list = mPointersAdjList[edge1.getIndex()]; - CAmListVerticesItrConst result = std::find_if(list->begin(), list->end(), [&](const CAmVertex<T,V> & refObject){ - return refObject.getNode()==pEdge2; - }); - if(result!=list->end()) - return (CAmVertex<T,V>*)&(*result); - - return NULL; - } - - bool hasCycles() const - { - return mIsCyclic; - } - - - /** - * Adds a new node to the graph with given user data. - * @return reference to the newly inserted node. - */ - CAmNode<T> & addNode(const T & in) - { - size_t index = mStoreNodes.size(); - mStoreNodes.emplace_back(in, index); - mStoreAdjList.emplace_back(); - mPointersNodes.push_back(&mStoreNodes.back()); - mPointersAdjList.push_back(&mStoreAdjList.back()); - return mStoreNodes.back(); - } - - /** - * Removes a vertex with two ends equal to the given nodes . - */ - void removeVertex(const CAmNode<T> & edge1, const CAmNode<T> & edge2) - { - const CAmListVertices * list = mPointersAdjList[edge1.getIndex()]; - CAmListVerticesItr iter = std::find_if(list->begin(), list->end(), [&edge2](const CAmVertex<T,V> & refVertex){ - return (refVertex.getNode()==&edge2); - }); - if(iter!=list->end()) - list->erase(iter); - } - - /** - * Removes all vertices to given node . - */ - void removeAllVerticesToNode(const CAmNode<T> & node) - { - auto comparator = [&node](const CAmVertex<T,V> & refVertex){ - return (refVertex.getNode()==&node); - }; - auto itr = mPointersAdjList.begin(); - for(;itr!=mPointersAdjList.end();itr++) - { - CAmListVertices * vertices = *itr; - auto iterVert = std::find_if(vertices->begin(), vertices->end(), comparator); - if(iterVert!=vertices->end()) - vertices->erase(iterVert); - } - } - - /** - * Removes a node with given user data . - */ - void removeNode(const T & in) - { - CAmNode<T> * node = findNode(in); - if(node!=NULL) - removeNode(*node); - } - - /** - * Removes the given node from the graph . - */ - void removeNode(const CAmNode<T> & node) - { - uint16_t index = node.getIndex(); - removeAllVerticesToNode(node); - mPointersAdjList.erase(mPointersAdjList.begin()+index); - mPointersNodes.erase(mPointersNodes.begin()+index); - auto iter = std::find_if(mStoreNodes.begin(), mStoreNodes.end(), [&node](const CAmNode<T> & otherNode){ - return &otherNode==&node; - }); - if(iter!=mStoreNodes.end()) - mStoreNodes.erase(iter); - updateIndexes(index); - } - - /** - * Connect first with last node and set user data and weight to the vertex. - */ - void connectNodes(const CAmNode<T> & first, const CAmNode<T> & last, const V & vertexData, const int16_t weight = 1) - { - CAmListVertices * list = mPointersAdjList[first.getIndex()]; - CAmNode<T> * node = mPointersNodes[last.getIndex()]; - list->emplace_back(node, vertexData, weight); - } - - /** - * Exists any vertex with two given ends. - * @return TRUE on successfully changed ID. - */ - bool isAnyVertex(const CAmNode<T> & edge1, const CAmNode<T> & edge2) const - { - return findVertex(edge1, edge2)!=NULL; - } - - /** - * Sets the status of all nodes and vertices to GES_NOT_VISITED. - */ - void reset() - { - // set all nodes to GES_NOT_VISITED - std::for_each(mPointersNodes.begin(), mPointersNodes.end(), [](CAmNode<T> * refNode){ - if(refNode->getStatus()!= GES_NOT_VISITED) - refNode->setStatus(GES_NOT_VISITED); - }); - // set all vertices to GES_NOT_VISITED - auto action = [](CAmVertex<T,V> & refVertex){ - if(refVertex.getStatus()!= GES_NOT_VISITED) - refVertex.setStatus(GES_NOT_VISITED); - }; - auto itr1(mPointersAdjList.begin()); - for (; itr1 != mPointersAdjList.end(); ++itr1) - { - CAmListVertices * vertices = *itr1; - std::for_each(vertices->begin(), vertices->end(), action); - } - } - - /** - * Clears all nodes and vertices. - */ - void clear() - { - mStoreNodes.clear(); - mStoreAdjList.clear(); - mPointersAdjList.clear(); - mPointersNodes.clear(); - mPointersAdjList.clear(); - } - - /** - * Goes through all nodes and vertices and calls the callback. - */ - void trace(std::function<void(const CAmNode<T> &, const std::vector<CAmVertex<T,V>*> &)> cb) - { - std::for_each(mPointersNodes.begin(), mPointersNodes.end(), [&](CAmNode<T> * refNode){ - CAmListVertices * vertices = this->mPointersAdjList[refNode->getIndex()]; - std::vector<CAmVertex<T,V>*> list; - std::for_each(vertices->begin(), vertices->end(), [&list](CAmVertex<T,V> & refVertex){ - list.push_back(&refVertex); - }); - cb(*refNode, list); - }); - } - - /** - * Finds the shortest path from given node to all nodes in listTargets. - * - * @param source start node. - * @param listTargets destination nodes. - * @param resultPath list with all shortest paths. - */ - void getShortestPath(const CAmNode<T> & source, const CAmListNodePtrs & listTargets, std::vector<CAmListNodePtrs> & resultPath ) - { - const size_t numberOfNodes = mPointersNodes.size(); - if(numberOfNodes==0) - return; - - std::vector<weight_t> min_distance; - std::vector<CAmNode<T>*> previous; - findShortestsPathsFromNode(source, min_distance, previous); - - for(auto it=listTargets.begin(); it!=listTargets.end(); it++) - { - CAmNode<T> *node = *it; - resultPath.emplace_back(); - CAmListNodePtrs & path = resultPath.back(); - constructShortestPathTo(*node, previous, path); - if(path.empty()) - { - typename std::vector<CAmListNodePtrs>::iterator iter = resultPath.end(); - resultPath.erase(--iter); - } - } - } - - /** - * Finds the shortest path between two nodes. - * - * @param source start node. - * @param destination destination node. - * @param resultPath list with the found shortest paths. - */ - void getShortestPath(const CAmNode<T> & source, const CAmNode<T> & destination, CAmListNodePtrs & resultPath ) - { - const size_t numberOfNodes = mPointersNodes.size(); - if(numberOfNodes==0) - return; - std::vector<weight_t> min_distance; - std::vector<CAmNode<T>*> previous; - findShortestsPathsFromNode(source, min_distance, previous); - constructShortestPathTo(destination, previous, resultPath); - } - - /** - * Finds the shortest path from given node to all nodes in listTargets. - * Delegates the construction of the path to the caller. - * - * @param source start node. - * @param listTargets destination nodes. - * @param cb callabck. - */ - void getShortestPath(const CAmNode<T> & source, - const CAmListNodePtrs & listTargets, - std::function<void(const am_GraphPathPosition_e, CAmNode<T> &)> cb ) - { - const size_t numberOfNodes = mPointersNodes.size(); - if(numberOfNodes==0) - return; - - std::vector<weight_t> min_distance; - std::vector<CAmNode<T>*> previous; - findShortestsPathsFromNode(source, min_distance, previous); - - for(auto it=listTargets.begin(); it!=listTargets.end(); it++) - { - CAmNode<T>* node = *it; - constructShortestPathTo(*node, previous, cb); - } - } - - /** - * Finds the shortest path between two given nodes. - * Delegates the construction of the path to the caller. - * - * @param source start node. - * @param destination destination node. - * @param cb callabck. - */ - void getShortestPath(const CAmNode<T> & source, - const CAmNode<T> & destination, - std::function<void(const am_GraphPathPosition_e, CAmNode<T> &)> cb ) - { - const size_t numberOfNodes = mPointersNodes.size(); - if(numberOfNodes==0) - return; - - std::vector<weight_t> min_distance; - std::vector<CAmNode<T>*> previous; - findShortestsPathsFromNode(source, min_distance, previous); - constructShortestPathTo(destination, previous, cb); - } - - /** - * Finds all possible paths between two given nodes. - * Delegates the construction of the path to the caller. - * - * @param src start node. - * @param dst destination node. - * @param cb callabck. - */ - void getAllPaths(const CAmNode<T> & src, const CAmNode<T> & dst, std::function<void(const CAmNodeReferenceList & path)> cb) - { - CAmNodeReferenceList visited; - visited.push_back((CAmNode<T>*)&src); - ((CAmNode<T>*)&src)->setStatus(GES_VISITED); - goThroughAllPaths(dst, visited, cb); - reset(); - } - }; - -} - -#endif diff --git a/AudioManagerDaemon/include/CAmLog.h b/AudioManagerDaemon/include/CAmLog.h deleted file mode 100644 index 35c6a41..0000000 --- a/AudioManagerDaemon/include/CAmLog.h +++ /dev/null @@ -1,129 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * -* \author Aleksandar Donchev, aleksander.donchev@partner.bmw.de BMW 2013 - * - * \file CAmLog.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef CAMLOG_H_ -#define CAMLOG_H_ - -#include <iostream> -#include <iosfwd> -#include <stdio.h> -#include <stdexcept> -#include <fstream> -#include <stdlib.h> -#include <sstream> -#include <assert.h> - -/** - * Implements a basic logging mechanism that can be used to print debug information into a file or to the console. - * It can be used either as singleton through the appropriate method getDefaultLog() or as independent instantiated object. - * The default initializer sets the console as output for newly created objects. - * Example: CAmLogger << "Text"; //to print out through the singleton object directly to the console - */ - -#define DEFAULT_LOG_FOLDER "/tmp/" -#define DEFAULT_LOGFILE_PREFIX "am_dump_" -#define DEFAULT_LOGFILE_EXT ".log" - -#define DEL( aPointer ) delete aPointer, aPointer = NULL; - -/* */ -typedef enum { eCAmLogNone = 0, eCAmLogStdout = 1, eCAmLogFile = 2 } eCAmLogType; - -class CAmLog -{ -private: - /** - * Private classes which usually own (wrap) a stream object. They are responsible for creating and deleting it. - */ - class CAmLogger - { - protected: - std::ostream* mOutputStream; - public: - CAmLogger ():mOutputStream(NULL) {}; - virtual ~CAmLogger () { }; - virtual void log(const std::string& _s) - { - (*mOutputStream) << _s; - mOutputStream->flush(); - } - template <class T> - CAmLogger & operator << (const T & t) - { - (*mOutputStream) << t; - return (*this); - } - }; - - class CAmFileLogger : public CAmLogger - { - std::string mFilename; - public: - static void generateLogFilename(std::string &result); - explicit CAmFileLogger(const std::string& _s) : CAmLogger() - { - mFilename = _s; - mOutputStream = new std::ofstream(mFilename.c_str()); - } - ~CAmFileLogger(); - }; - - class CAmStdOutLogger : public CAmLogger - { - public: - CAmStdOutLogger() - { - mOutputStream = &std::cout; - } - }; - -private: - eCAmLogType mLogType; - CAmLogger* mLogger; - -protected: - void releaseLogger(); - void instantiateLogger( const eCAmLogType type); -public: - CAmLog(const eCAmLogType type ); - CAmLog(); - ~CAmLog(); - - static CAmLog *getDefaultLog(); - - void setLogType( const eCAmLogType type); - eCAmLogType getLogType() const; - - template <class T> - CAmLog & operator << (const T & t) - { - assert(mLogger!=NULL); - (*mLogger) << t; - return (*this); - } - }; - -#define CAmLogger (*CAmLog::getDefaultLog()) - - -#endif /* CAMLOG_H_ */ diff --git a/AudioManagerDaemon/include/CAmRouter.h b/AudioManagerDaemon/include/CAmRouter.h deleted file mode 100644 index fe41049..0000000 --- a/AudioManagerDaemon/include/CAmRouter.h +++ /dev/null @@ -1,317 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * \author Aleksandar Donchev, Aleksander.Donchev@partner.bmw.de BMW 2013,2014 - * - * \file CAmRouter.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef ROUTER_H_ -#define ROUTER_H_ - -#include <assert.h> -#include <vector> -#include <functional> -#include "audiomanagertypes.h" -#include "CAmGraph.h" -#include "IAmDatabaseHandler.h" - - -namespace am -{ -/** - * Optimal path search between a source and a sink is implemented with a graph which contains nodes - sinks, sources, gateways, converters. - * The nodes are identified by sinkID, sourceID, gatewayID, converterID. - * A possible connection between two nodes represents the facts that the nodes can be connected with one or more connectionFormats (Node[id=1] ---> Node[id=2]). - * It is assumption that the two nodes can be connected. The controller itself decides later whether the connection is possible or not. - * - */ - -/** - * Trace on/off. - */ -#if !defined(ROUTING_BUILD_CONNECTIONS) - #undef TRACE_GRAPH -#endif - -/** - * Default behavior is to do the search in one step without connections, which are identified during the search. - * Alternatively the search can be done in two steps. - */ -#if !defined(ROUTING_BUILD_CONNECTIONS) - #undef ROUTING_BUILD_CONNECTIONS -#endif - -#if defined(TRACE_GRAPH) -#if !defined(ROUTING_BUILD_CONNECTIONS) -#warning "You should define ROUTING_BUILD_CONNECTIONS in order to be able to see the connections in the trace." -#endif -#endif - -class CAmRouter; - -/** - * A structure used as user data in the graph nodes. - */ -struct am_RoutingNodeData_s -{ - typedef enum:uint8_t {SINK, SOURCE, GATEWAY, CONVERTER} am_NodeDataType_e; - am_NodeDataType_e type; //!< data type:sink, source, gateway or converter - union - { - am_Source_s *source; - am_Sink_s *sink; - am_Gateway_s *gateway; - am_Converter_s *converter; - } data; //!< union pointer to sink, source, gateway or converter - - am_RoutingNodeData_s():type(SINK) - {} - - bool operator==(const am_RoutingNodeData_s & anotherObject) const - { - bool result = false; - if(type==anotherObject.type) - { - result = true; - if(type==SINK) - result &= (data.sink->sinkID==anotherObject.data.sink->sinkID); - else if(type==SOURCE) - result &= (data.source->sourceID==anotherObject.data.source->sourceID); - else if(type==GATEWAY) - result &= (data.gateway->gatewayID==anotherObject.data.gateway->gatewayID); - else if(type==CONVERTER) - result &= (data.converter->converterID==anotherObject.data.converter->converterID); - } - return result; - }; - -#ifdef TRACE_GRAPH - void trace() const - { - if(type==SINK) - std::cout << "[SINK:" << data.sink->sinkID << ":" << data.sink->name << "(" << data.sink->domainID << ")" - << "]"; - else if(type==SOURCE) - std::cout << "[SOUR:" << data.source->sourceID << ":" << data.source->name << "(" << data.source->domainID << ")" - << "]"; - else if(type==GATEWAY) - std::cout << "[GATE:" << data.gateway->gatewayID << ":" << data.gateway->name << "(" << data.gateway->controlDomainID << ")" - << "]"; - else if(type==CONVERTER) - std::cout << "[CONV:" << data.converter->converterID << ":" << data.converter->name << "(" << data.converter->domainID << ")" - << "]"; - }; -#endif - - am_domainID_t domainID() const - { - if(type==SINK) - return data.sink->domainID; - else if(type==SOURCE) - return data.source->domainID; - else if(type==GATEWAY) - return data.gateway->controlDomainID; - else if(type==CONVERTER) - return data.converter->domainID; - return 0; - }; -}; - -typedef am_RoutingNodeData_s::am_NodeDataType_e CAmNodeDataType; -typedef CAmNode<am_RoutingNodeData_s> CAmRoutingNode; -typedef CAmGraph<am_RoutingNodeData_s, uint16_t> CAmRoutingGraph; -typedef CAmVertex<am_RoutingNodeData_s, uint16_t> CAmRoutingVertex; -typedef std::list<CAmRoutingVertex> CAmRoutingListVertices; -typedef std::vector<CAmRoutingListVertices*> CAmRoutingVertexReferenceList; - -class CAmControlSender; - - -/** - * Implements an autorouting algorithm for connecting sinks and sources via different audio domains. - */ -class CAmRouter -{ - IAmDatabaseHandler* mpDatabaseHandler; //!< pointer to database handler - CAmControlSender* mpControlSender; //!< pointer the controlsender - is used to retrieve information for the optimal route - bool mOnlyFreeConversionNodes; //!< bool flag whether only disconnected elements should be considered or not - CAmRoutingGraph mRoutingGraph; //!< graph object - std::map<am_domainID_t,std::vector<CAmRoutingNode*>> mNodeListSources; //!< map with pointers to nodes with sources, used for quick access - std::map<am_domainID_t,std::vector<CAmRoutingNode*>> mNodeListSinks; //!< map with pointers to nodes with sinks, used for quick access - std::map<am_domainID_t,std::vector<CAmRoutingNode*>> mNodeListGateways; //!< map with pointers to nodes with gateways, used for quick access - std::map<am_domainID_t,std::vector<CAmRoutingNode*>> mNodeListConverters;//!< map with pointers to nodes with converters, used for quick access - - am_Error_e determineConnectionFormatsForPath(am_Route_s & routeObjects, std::vector<CAmRoutingNode*> & nodes); - am_Error_e doConnectionFormatsForPath(am_Route_s & routeObjects, - std::vector<CAmRoutingNode*> & route, - std::vector<am_RoutingElement_s>::iterator routingElementIterator, - std::vector<CAmRoutingNode*>::iterator routeIterator); - - - /** - * Check whether given converter or gateway has been connected. - * - * @param comp converter or gateway . - */ - template <class Component> bool isComponentConnected(const Component & comp) - { - return mpDatabaseHandler->isComponentConnected(comp); - } - void generateAllPaths(const CAmRoutingNode & src, - const CAmRoutingNode & dst, - const bool includeCycles, - std::function<void(const std::vector<CAmRoutingNode*> & path)> cb); - void goThroughAllPaths(const CAmRoutingNode & dst, - std::vector<CAmRoutingNode*> & visited, - std::vector<am_domainID_t> & visitedDomains, - std::function<void(const std::vector<CAmRoutingNode*> & path)> cb); - -#ifdef ROUTING_BUILD_CONNECTIONS - /** - * Connects all converters to its sink and sources if possible. - * - */ - void constructConverterConnections(); - - /** - * Connects all gateways to its sink and sources if possible. - * - */ - void constructGatewayConnections(); - - /** - * Connects all sources to the sinks if possible. - * - */ - void constructSourceSinkConnections(); -#else - /** - * Construct a list with all vertices - */ - void getVerticesForNode(const CAmRoutingNode & node, CAmRoutingListVertices & list); - - /** - * Construct a list with all vertices from given source. - */ - void getVerticesForSource(const CAmRoutingNode & node, CAmRoutingListVertices & list); - - /** - * Construct a list with all vertices from given sink. - */ - void getVerticesForSink(const CAmRoutingNode & node, CAmRoutingListVertices & list); - - /** - * Construct a list with all vertices from given converter. - */ - void getVerticesForConverter(const CAmRoutingNode & node, CAmRoutingListVertices & list); - - /** - * Construct a list with all vertices from given gateway. - */ - void getVerticesForGateway(const CAmRoutingNode & node, CAmRoutingListVertices & list); -#endif - -public: - CAmRouter(IAmDatabaseHandler* iDatabaseHandler, CAmControlSender* iSender); - ~CAmRouter(); - - /** - * Finds all possible paths between given source and sink. - * - * @param onlyfree only disconnected elements should be included or not. - * @param sourceID starting point. - * @param sinkID ending point. - * @param returnList list with all possible paths - * @return E_OK on success(0 or more paths) or E_NOT_POSSIBLE on failure. - */ - am_Error_e getRoute(const bool onlyfree, const am_sourceID_t sourceID, const am_sinkID_t sinkID, std::vector<am_Route_s>& returnList); - am_Error_e getRoute(const bool onlyfree, const am_Source_s & aSource, const am_Sink_s & aSink, std::vector<am_Route_s> & listRoutes); - - am_Error_e getAllPaths(CAmRoutingNode & aSource, CAmRoutingNode & aSink, - std::vector<am_Route_s> & resultPath, std::vector<std::vector<CAmRoutingNode*>> & resultNodesPath, -#if !defined(ROUTING_BUILD_CONNECTIONS) - __attribute__((unused)) -#endif - const bool includeCycles = false); -#ifdef ROUTING_BUILD_CONNECTIONS - void getShortestPath(const CAmRoutingNode & source, const CAmRoutingNode & destination, std::vector<CAmRoutingNode*> & resultPath); - void getShortestPath(CAmRoutingNode & aSource, CAmRoutingNode & aSink, am_Route_s & resultPath, std::vector<CAmRoutingNode*> & resultNodesPath); -#endif - - static bool getAllowedFormatsFromConvMatrix( const std::vector<bool> & convertionMatrix, - const std::vector<am_CustomConnectionFormat_t> & listSourceFormats, - const std::vector<am_CustomConnectionFormat_t> & listSinkFormats, - std::vector<am_CustomConnectionFormat_t> & sourceFormats, - std::vector<am_CustomConnectionFormat_t> & sinkFormats); - static void listPossibleConnectionFormats(std::vector<am_CustomConnectionFormat_t> & inListSourceFormats, - std::vector<am_CustomConnectionFormat_t> & inListSinkFormats, - std::vector<am_CustomConnectionFormat_t> & outListFormats); - static bool getRestrictedOutputFormats(const std::vector<bool> & convertionMatrix, - const std::vector<am_CustomConnectionFormat_t> & listSourceFormats, - const std::vector<am_CustomConnectionFormat_t> & listSinkFormats, - const am_CustomConnectionFormat_t connectionFormat, - std::vector<am_CustomConnectionFormat_t> & listFormats); - static void getSourceSinkPossibleConnectionFormats(std::vector<CAmRoutingNode*>::iterator iteratorSource, - std::vector<CAmRoutingNode*>::iterator iteratorSink, - std::vector<am_CustomConnectionFormat_t> & outConnectionFormats); - - static bool shouldGoInDomain(const std::vector<am_domainID_t> & visitedDomains, const am_domainID_t nodeDomainID); - - /** - * Returns a sink node with given sinkID. - * - * @param sinkID sink id. - * @return pointer to node or NULL. - */ - CAmRoutingNode* sinkNodeWithID(const am_sinkID_t sinkID); - CAmRoutingNode* sinkNodeWithID(const am_sinkID_t sinkID, const am_domainID_t domainID); - - /** - * Returns a source node with given sourceID. - * - * @param sourceID source id. - * @return pointer to node or NULL. - */ - CAmRoutingNode* sourceNodeWithID(const am_sourceID_t sourceID); - CAmRoutingNode* sourceNodeWithID(const am_sourceID_t sourceID, const am_domainID_t domainID); - - /** - * Returns a converter node for given sinkID. - * - * @param sinkID sink id. - * @param domainID domain id. - * @return pointer to node or NULL. - */ - CAmRoutingNode* converterNodeWithSinkID(const am_sinkID_t sinkID, const am_domainID_t domainID); - - /** - * Returns a gateway node for given sinkID. - * - * @param sinkID sink id. - * @return pointer to node or NULL. - */ - CAmRoutingNode* gatewayNodeWithSinkID(const am_sinkID_t sinkID); - - void load(const bool onlyFree); - void clear(); -}; -} /* namespace am */ -#endif /* ROUTER_H_ */ - diff --git a/AudioManagerDaemon/include/CAmRoutingReceiver.h b/AudioManagerDaemon/include/CAmRoutingReceiver.h deleted file mode 100644 index 82626c6..0000000 --- a/AudioManagerDaemon/include/CAmRoutingReceiver.h +++ /dev/null @@ -1,127 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmRoutingReceiver.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef ROUTINGRECEIVER_H_ -#define ROUTINGRECEIVER_H_ - -#include "IAmRouting.h" - -namespace am -{ - -class CAmSocketHandler; -class CAmDbusWrapper; -class IAmDatabaseHandler; -class CAmRoutingSender; -class CAmControlSender; - -/** - * Implements the Receiving side of the RoutingPlugins. - */ -class CAmRoutingReceiver: public IAmRoutingReceive -{ -public: - CAmRoutingReceiver(IAmDatabaseHandler *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmControlSender *iControlSender, CAmSocketHandler *iSocketHandler); - CAmRoutingReceiver(IAmDatabaseHandler *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmControlSender *iControlSender, CAmSocketHandler *iSocketHandler, CAmDbusWrapper *iDBusWrapper); - ~CAmRoutingReceiver(); - void ackConnect(const am_Handle_s handle, const am_connectionID_t connectionID, const am_Error_e error); - void ackDisconnect(const am_Handle_s handle, const am_connectionID_t connectionID, const am_Error_e error); - void ackSetSinkVolumeChange(const am_Handle_s handle, const am_volume_t volume, const am_Error_e error); - void ackSetSourceVolumeChange(const am_Handle_s handle, const am_volume_t volume, const am_Error_e error); - void ackSetSourceState(const am_Handle_s handle, const am_Error_e error); - void ackSetSinkSoundProperties(const am_Handle_s handle, const am_Error_e error); - void ackSetSinkSoundProperty(const am_Handle_s handle, const am_Error_e error); - void ackSetSourceSoundProperties(const am_Handle_s handle, const am_Error_e error); - void ackSetSourceSoundProperty(const am_Handle_s handle, const am_Error_e error); - void ackCrossFading(const am_Handle_s handle, const am_HotSink_e hotSink, const am_Error_e error); - void ackSourceVolumeTick(const am_Handle_s handle, const am_sourceID_t sourceID, const am_volume_t volume); - void ackSinkVolumeTick(const am_Handle_s handle, const am_sinkID_t sinkID, const am_volume_t volume); - 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 registerGateway(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID); - am_Error_e registerConverter(const am_Converter_s& converterData, am_converterID_t& converterID); - am_Error_e deregisterGateway(const am_gatewayID_t gatewayID); - am_Error_e deregisterConverter(const am_converterID_t converterID); - am_Error_e peekSink(const std::string& name, am_sinkID_t& sinkID); - am_Error_e registerSink(const am_Sink_s& sinkData, am_sinkID_t& sinkID); - am_Error_e deregisterSink(const am_sinkID_t sinkID); - am_Error_e peekSource(const std::string& name, am_sourceID_t& sourceID); - am_Error_e registerSource(const am_Source_s& sourceData, am_sourceID_t& sourceID); - am_Error_e deregisterSource(const am_sourceID_t sourceID); - am_Error_e registerCrossfader(const am_Crossfader_s& crossfaderData, am_crossfaderID_t& crossfaderID); - am_Error_e deregisterCrossfader(const am_crossfaderID_t crossfaderID); - am_Error_e peekSourceClassID(const std::string& name, am_sourceClass_t& sourceClassID); - am_Error_e peekSinkClassID(const std::string& name, am_sinkClass_t& sinkClassID); - void hookInterruptStatusChange(const am_sourceID_t sourceID, const am_InterruptState_e interruptState); - void hookDomainRegistrationComplete(const am_domainID_t domainID); - void hookSinkAvailablityStatusChange(const am_sinkID_t sinkID, const am_Availability_s& availability); - void hookSourceAvailablityStatusChange(const am_sourceID_t sourceID, const am_Availability_s& availability); - void hookDomainStateChange(const am_domainID_t domainID, const am_DomainState_e domainState); - void hookTimingInformationChanged(const am_connectionID_t connectionID, const am_timeSync_t delay); - void sendChangedData(const std::vector<am_EarlyData_s>& earlyData); - am_Error_e getDBusConnectionWrapper(CAmDbusWrapper*& dbusConnectionWrapper) const; - am_Error_e getSocketHandler(CAmSocketHandler*& socketHandler) const; - void getInterfaceVersion(std::string& version) const; - void confirmRoutingReady(const uint16_t handle, const am_Error_e error); - void confirmRoutingRundown(const uint16_t handle, const am_Error_e error); - am_Error_e updateGateway(const am_gatewayID_t gatewayID, const std::vector<am_CustomConnectionFormat_t>& listSourceFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkFormats, const std::vector<bool>& convertionMatrix) ; - am_Error_e updateConverter(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkFormats, const std::vector<bool>& convertionMatrix); - am_Error_e updateSink(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) ; - am_Error_e updateSource(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomConnectionFormat_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) ; - void ackSetVolumes(const am_Handle_s handle, const std::vector<am_Volumes_s>& listvolumes, const am_Error_e error) ; - void ackSinkNotificationConfiguration(const am_Handle_s handle, const am_Error_e error) ; - void ackSourceNotificationConfiguration(const am_Handle_s handle, const am_Error_e error) ; - void hookSinkNotificationDataChange(const am_sinkID_t sinkID, const am_NotificationPayload_s& payload) ; - void hookSourceNotificationDataChange(const am_sourceID_t sourceID, const am_NotificationPayload_s& payload) ; - am_Error_e getDomainOfSink(const am_sinkID_t sinkID, am_domainID_t& domainID) const; - am_Error_e getDomainOfSource(const am_sourceID_t sourceID, am_domainID_t& domainID) const; - am_Error_e getDomainOfCrossfader(const am_crossfaderID_t crossfader, am_domainID_t& domainID) const; - - uint16_t getStartupHandle(); //!< returns a startup handle - uint16_t getRundownHandle(); //!< returns a rundown handle - - void waitOnStartup(bool startup); //!< tells the RoutingReceiver to start waiting for all handles to be confirmed - void waitOnRundown(bool rundown); //!< tells the RoutingReceiver to start waiting for all handles to be confirmed - -private: - IAmDatabaseHandler *mpDatabaseHandler; //!< pointer to the databaseHandler - CAmRoutingSender *mpRoutingSender; //!< pointer to the routingSender - CAmControlSender *mpControlSender; //!< pointer to the controlSender - CAmSocketHandler *mpSocketHandler; //!< pointer to sockethandler - CAmDbusWrapper *mpDBusWrapper; //!< pointer to dbuswrapper - - std::vector<uint16_t> mListStartupHandles; //!< list of handles that wait for a confirm - std::vector<uint16_t> mListRundownHandles; //!< list of handles that wait for a confirm - uint16_t handleCount; //!< counts all handles - bool mWaitStartup; //!< if true confirmation will be sent if list of handles = 0 - bool mWaitRundown; //!< if true confirmation will be sent if list of handles = 0 - - am_Error_e mLastStartupError; - am_Error_e mLastRundownError; - -}; - -} - -#endif /* ROUTINGRECEIVER_H_ */ diff --git a/AudioManagerDaemon/include/CAmRoutingSender.h b/AudioManagerDaemon/include/CAmRoutingSender.h deleted file mode 100644 index 4a23428..0000000 --- a/AudioManagerDaemon/include/CAmRoutingSender.h +++ /dev/null @@ -1,155 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file CAmRoutingSender.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef ROUTINGSENDER_H_ -#define ROUTINGSENDER_H_ - -#include "IAmRouting.h" -#include <map> - -#ifdef UNIT_TEST //this is needed to test RoutingSender -#include "../test/IAmRoutingBackdoor.h" -#endif - -namespace am -{ - -class CAmRoutingReceiver; - -/** - * Implements the RoutingSendInterface. Loads all plugins and dispatches calls to the plugins - */ -class CAmRoutingSender -{ -public: - CAmRoutingSender(const std::vector<std::string>& listOfPluginDirectories); - ~CAmRoutingSender(); - - am_Error_e removeHandle(const am_Handle_s& handle); - am_Error_e addDomainLookup(const am_Domain_s& domainData); - am_Error_e addSourceLookup(const am_Source_s& sourceData); - am_Error_e addSinkLookup(const am_Sink_s& sinkData); - am_Error_e addCrossfaderLookup(const am_Crossfader_s& crossfaderData); - am_Error_e removeDomainLookup(const am_domainID_t domainID); - am_Error_e removeSourceLookup(const am_sourceID_t sourceID); - am_Error_e removeSinkLookup(const am_sinkID_t sinkID); - am_Error_e removeCrossfaderLookup(const am_crossfaderID_t crossfaderID); - am_Error_e removeConnectionLookup(const am_connectionID_t connectionID); - - am_Error_e startupInterfaces(CAmRoutingReceiver* iRoutingReceiver); - void setRoutingReady(); - void setRoutingRundown(); - am_Error_e asyncAbort(const am_Handle_s& handle); - am_Error_e asyncConnect(am_Handle_s& handle, const am_connectionID_t connectionID, const am_sourceID_t sourceID, const am_sinkID_t sinkID, const am_CustomConnectionFormat_t connectionFormat); - am_Error_e asyncDisconnect(am_Handle_s& handle, const am_connectionID_t connectionID); - am_Error_e asyncSetSinkVolume(am_Handle_s& handle, const am_sinkID_t sinkID, const am_volume_t volume, const am_CustomRampType_t ramp, const am_time_t time); - am_Error_e asyncSetSourceVolume(am_Handle_s& handle, const am_sourceID_t sourceID, const am_volume_t volume, const am_CustomRampType_t ramp, const am_time_t time); - am_Error_e asyncSetSourceState(am_Handle_s& handle, const am_sourceID_t sourceID, const am_SourceState_e state); - am_Error_e asyncSetSinkSoundProperty(am_Handle_s& handle, const am_sinkID_t sinkID, const am_SoundProperty_s& soundProperty); - am_Error_e asyncSetSourceSoundProperties(am_Handle_s& handle, const std::vector<am_SoundProperty_s>& listSoundProperties, const am_sourceID_t sourceID); - am_Error_e asyncSetSinkSoundProperties(am_Handle_s& handle, const std::vector<am_SoundProperty_s>& listSoundProperties, const am_sinkID_t sinkID); - am_Error_e asyncSetSourceSoundProperty(am_Handle_s& handle, const am_sourceID_t sourceID, const am_SoundProperty_s& soundProperty); - am_Error_e asyncCrossFade(am_Handle_s& handle, const am_crossfaderID_t crossfaderID, const am_HotSink_e hotSink, const am_CustomRampType_t rampType, const am_time_t time); - am_Error_e setDomainState(const am_domainID_t domainID, const am_DomainState_e domainState); - am_Error_e getListHandles(std::vector<am_Handle_s> & listHandles) const; - am_Error_e getListPlugins(std::vector<std::string>& interfaces) const; - void getInterfaceVersion(std::string& version) const; - am_Error_e asyncSetVolumes(am_Handle_s& handle, const std::vector<am_Volumes_s>& listVolumes); - am_Error_e asyncSetSinkNotificationConfiguration(am_Handle_s& handle, const am_sinkID_t sinkID, const am_NotificationConfiguration_s& notificationConfiguration); - am_Error_e asyncSetSourceNotificationConfiguration(am_Handle_s& handle, const am_sourceID_t sourceID, const am_NotificationConfiguration_s& notificationConfiguration); - am_Error_e resyncConnectionState(const am_domainID_t domainID, std::vector<am_Connection_s>& listOfExistingConnections); - - struct InterfaceNamePairs //!< is used to pair interfaces with busnames - { - IAmRoutingSend* routingInterface; //!< pointer to the routingInterface - std::string busName; //!< the busname - }; - - class am_handleData_c //!< is used to store data related to handles - { - public: - union - { - am_sinkID_t sinkID; - am_sourceID_t sourceID; - am_crossfaderID_t crossfaderID; - am_connectionID_t connectionID; - am_DataType_u volumeID; - }; - - union - { - am_SoundProperty_s soundPropery; - am_SourceState_e sourceState; - am_volume_t volume; - am_HotSink_e hotSink; - std::vector<am_SoundProperty_s>* soundProperties; - std::vector<am_Volumes_s>* listVolumes; - am_NotificationConfiguration_s* notificationConfiguration; - }; - - }; - - am_Error_e returnHandleData(const am_Handle_s handle,CAmRoutingSender::am_handleData_c& handleData) const; //!< returns the handle data associated with a handle - am_Error_e returnHandleDataAndRemove(const am_Handle_s handle,CAmRoutingSender::am_handleData_c& handleData); //!< returns the handle data associated with a handle and removes the handle - -#ifdef UNIT_TEST //this is needed to test RoutingSender - friend class IAmRoutingBackdoor; -#endif - -private: - struct comparator //!< is needed to sort the handles in the map - { - bool operator()(const am_Handle_s& a, const am_Handle_s& b) const - { - return (a.handle<b.handle || (a.handle==b.handle && a.handleType<b.handleType)); - } - }; - - am_Handle_s createHandle(const am_handleData_c& handleData, const am_Handle_e type); //!< creates a handle - void unloadLibraries(void); //!< unloads all loaded plugins - - typedef std::map<am_domainID_t, IAmRoutingSend*> DomainInterfaceMap; //!< maps domains to interfaces - typedef std::map<am_sinkID_t, IAmRoutingSend*> SinkInterfaceMap; //!< maps sinks to interfaces - typedef std::map<am_sourceID_t, IAmRoutingSend*> SourceInterfaceMap; //!< maps sources to interfaces - typedef std::map<am_crossfaderID_t, IAmRoutingSend*> CrossfaderInterfaceMap; //!< maps crossfaders to interfaces - typedef std::map<am_connectionID_t, IAmRoutingSend*> ConnectionInterfaceMap; //!< maps connections to interfaces - typedef std::map<uint16_t, IAmRoutingSend*> HandleInterfaceMap; //!< maps handles to interfaces - typedef std::map<am_Handle_s, am_handleData_c, comparator> HandlesMap; //!< maps handleData to handles - - int16_t mHandleCount; //!< is used to create handles - HandlesMap mlistActiveHandles; //!< list of all currently "running" handles. - std::vector<void*> mListLibraryHandles; //!< list of all loaded pluginInterfaces - std::vector<InterfaceNamePairs> mListInterfaces; //!< list of busname/interface relation - ConnectionInterfaceMap mMapConnectionInterface; //!< map of connection to interfaces - CrossfaderInterfaceMap mMapCrossfaderInterface; //!< map of crossfaders to interface - DomainInterfaceMap mMapDomainInterface; //!< map of domains to interfaces - SinkInterfaceMap mMapSinkInterface; //!< map of sinks to interfaces - SourceInterfaceMap mMapSourceInterface; //!< map of sources to interfaces - HandleInterfaceMap mMapHandleInterface; //!< map of handles to interfaces - CAmRoutingReceiver *mpRoutingReceiver; //!< pointer to routing receiver -}; - -} - -#endif /* ROUTINGSENDER_H_ */ diff --git a/AudioManagerDaemon/include/CAmTelnetMenuHelper.h b/AudioManagerDaemon/include/CAmTelnetMenuHelper.h deleted file mode 100644 index 7038cb3..0000000 --- a/AudioManagerDaemon/include/CAmTelnetMenuHelper.h +++ /dev/null @@ -1,204 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * \author Frank Herchet, frank.fh.herchet@bmw.de BMW 2012 - * - * \file CAmTelnetMenuHelper.h - * For further information see http://www.genivi.org/. - * - */ - -// Local header -#ifndef CAMTELNETMENUHELPER_H_ -#define CAMTELNETMENUHELPER_H_ - -// Standard header -#include <iostream> -#include <queue> -#include <map> -#include <string> -#include <sstream> -#include <vector> -#include <sys/socket.h> -#include "audiomanagertypes.h" - -namespace am -{ - -class CAmTelnetServer; -class IAmDatabaseHandler; -class CAmCommandSender; -class CAmRoutingSender; -class CAmControlSender; -class CAmCommandReceiver; -class CAmRoutingReceiver; -class CAmControlReceiver; - -class CAmRouter; -class CAmSocketHandler; - -/** - * helper class for CAmTelnetServer - */ -class CAmTelnetMenuHelper -{ -public: - - enum EMainState - { - eRootState = 0, eListState, eInfoState, eGetState, eSetState - }; - - CAmTelnetMenuHelper(CAmSocketHandler *iSocketHandler, CAmCommandSender *iCommandSender, CAmCommandReceiver *iCommandReceiver, CAmRoutingSender *iRoutingSender, CAmRoutingReceiver *iRoutingReceiver, CAmControlSender *iControlSender, CAmControlReceiver *iControlReceiver, IAmDatabaseHandler *iDatabasehandler, CAmRouter *iRouter, CAmTelnetServer *iTelnetServer); - - ~CAmTelnetMenuHelper(); - - void newSocketConnection(int filedescriptor); - - void socketConnectionsClosed(int filedescriptor); - - void enterCmdQueue(std::queue<std::string> &CmdQueue, int &filedescriptor); - -private: - - void createCommandMaps(); - void sendError(int & filedescriptor, std::string error_string); - void sendTelnetLine(int & filedescriptor, std::stringstream &line); - void sendCurrentCmdPrompt(int &filedescriptor); - - // COMMON commands - static void oneStepBackCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void oneStepBackCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void exitCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void exitCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void helpCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void helpCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - - // ROOT commands - static void rootGetCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void rootGetCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void rootSetCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void rootSetCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void rootListCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void rootListCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void rootInfoCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void rootInfoCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - - // LIST commands - static void listConnectionsCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listConnectionsCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listSourcesCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listSourcesCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listSinksCommands(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listSinksCommandsExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listCrossfaders(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listCrossfadersExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listDomainsCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listDomainsCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listGatewaysCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listGatewaysCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listPluginsCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listPluginsCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listMainConnectionsCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listMainConnectionsCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listMainSourcesCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listMainSourcesCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void listMainSinksCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void listMainSinksCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - - // SET commands - static void setRoutingCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setRoutingCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setConnection(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setConnectionExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setDisconnectConnId(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setDisconnectConnIdExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setSourceSoundProperties(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setSourceSoundPropertiesExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setSinkSoundProperty(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setSinkSoundPropertyExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setSinkVolume(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setSinkVolumeExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setVolumeStep(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setVolumeStepExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setSinkMuteState(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setSinkMuteStateExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void setSourceSoundProperty(std::queue<std::string> & CmdQueue, int & filedescriptor); - void setSourceSoundPropertyExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - - // GET commands - static void getRoutingCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void getRoutingCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void getSenderversionCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void getSenderversionCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void getReceiverversionCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void getReceiverversionCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - - // INFO commands - static void infoSystempropertiesCommand(std::queue<std::string> & CmdQueue, int & filedescriptor); - void infoSystempropertiesCommandExec(std::queue<std::string> & CmdQueue, int & filedescriptor); - static void infoDumpCommand(std::queue<std::string>& CmdQueue, int& filedescriptor); - void infoDumpCommandExec(std::queue<std::string>& CmdQueue, int& filedescriptor); - -private: - - typedef void (*pCommandPrototype)(std::queue<std::string>& msg, int & filedescriptor); - - struct sCommandPrototypeInfo - { - std::string info; - pCommandPrototype CommandPrototype; - - // default contructor to set NULL - sCommandPrototypeInfo() : - info(""), CommandPrototype(NULL) - { - } - - // a small contructor - sCommandPrototypeInfo(std::string MyInfo, pCommandPrototype MyCommandPrototype) : - info(MyInfo), CommandPrototype(MyCommandPrototype) - { - } - }; - - typedef std::map<std::string, sCommandPrototypeInfo> tCommandMap; - std::map<int, EMainState> mCurrentMainStateMap; //!< int filedescriptor of socket connection; EMainState state of current telnet session - - static CAmTelnetMenuHelper* instance; - CAmTelnetServer *mpTelenetServer; - CAmSocketHandler *mpSocketHandler; - CAmCommandSender *mpCommandSender; - CAmCommandReceiver *mpCommandReceiver; - CAmRoutingSender *mpRoutingSender; - CAmRoutingReceiver *mpRoutingReceiver; - CAmControlSender *mpControlSender; - CAmControlReceiver *mpControlReceiver; - IAmDatabaseHandler *mpDatabasehandler; - CAmRouter *mpRouter; - - tCommandMap mRootCommands; - tCommandMap mListCommands; - tCommandMap mGetCommands; - tCommandMap mSetCommands; - tCommandMap mInfoCommands; - -}; -// class CAmTelnetMenuHelper -}// namespace am - -#endif // CAMTELNETMENUHELPER_H_ diff --git a/AudioManagerDaemon/include/CAmTelnetServer.h b/AudioManagerDaemon/include/CAmTelnetServer.h deleted file mode 100644 index 0e4c510..0000000 --- a/AudioManagerDaemon/include/CAmTelnetServer.h +++ /dev/null @@ -1,100 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * \author Frank Herchet, frank.fh.herchet@bmw.de BMW 2012 - * - * \file CAmTelnetServer.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef TELNETSERVER_H_ -#define TELNETSERVER_H_ - -#include <queue> -#include <map> -#include "CAmSocketHandler.h" -#include "CAmTelnetMenuHelper.h" - -namespace am -{ - -class IAmDatabaseHandler; -class CAmCommandSender; -class CAmRoutingSender; -class CAmControlSender; -class CAmCommandReceiver; -class CAmRoutingReceiver; -class CAmControlReceiver; -class CAmRouter; -class CAmTelnetMenuHelper; - -/** - * Implements a telnetserver that can be used to connect to the audiomanager, retrieve some information and use it. For debugging purposes. - * For example, launch a telnet session on port 6060: - * \code telnet localhost 6060 \endcode - * more details can be found at the README - */ -class CAmTelnetServer -{ -public: - CAmTelnetServer(CAmSocketHandler *iSocketHandler, CAmCommandSender *iCommandSender, CAmCommandReceiver *iCommandReceiver, CAmRoutingSender *iRoutingSender, CAmRoutingReceiver *iRoutingReceiver, CAmControlSender *iControlSender, CAmControlReceiver *iControlReceiver, IAmDatabaseHandler *iDatabasehandler, CAmRouter *iRouter, unsigned int servPort, unsigned int maxConnections); - ~CAmTelnetServer(); - void connectSocket(const pollfd pfd, const sh_pollHandle_t handle, void* userData); - void disconnectClient(int filedescriptor); - void receiveData(const pollfd pfd, const sh_pollHandle_t handle, void* userData); - bool dispatchData(const sh_pollHandle_t handle, void* userData); - bool check(const sh_pollHandle_t handle, void* userData); - TAmShPollFired<CAmTelnetServer> telnetConnectFiredCB; - TAmShPollFired<CAmTelnetServer> telnetReceiveFiredCB; - TAmShPollDispatch<CAmTelnetServer> telnetDispatchCB; - TAmShPollCheck<CAmTelnetServer> telnetCheckCB; -private: - - typedef void (*CommandPrototype)(std::vector<std::string>& msg, int filedescriptor); - typedef std::map<std::string, CommandPrototype> mMapCommand_t; - - void sliceCommand(const std::string& string, std::string& command, std::queue<std::string>& msg); - mMapCommand_t createCommandMap(); - struct connection_s - { - int filedescriptor; - sh_pollHandle_t handle; - }; - - static CAmTelnetServer* mpInstance; - CAmSocketHandler *mpSocketHandler; - CAmCommandSender *mpCommandSender; - CAmCommandReceiver *mpCommandReceiver; - CAmRoutingSender *mpRoutingSender; - CAmRoutingReceiver *mpRoutingReceiver; - CAmControlSender *mpControlSender; - CAmControlReceiver *mpControlReceiver; - IAmDatabaseHandler *mpDatabasehandler; - CAmRouter *mpRouter; - sh_pollHandle_t mConnecthandle; - std::queue<std::string> mListMessages; - std::vector<connection_s> mListConnections; - int mConnectFD; - unsigned int mServerPort; - unsigned int mMaxConnections; - CAmTelnetMenuHelper mTelnetMenuHelper; - -}; - -} /* namespace am */ -#endif /* TELNETSERVER_H_ */ diff --git a/AudioManagerDaemon/include/IAmDatabaseHandler.h b/AudioManagerDaemon/include/IAmDatabaseHandler.h deleted file mode 100644 index 30c1aaf..0000000 --- a/AudioManagerDaemon/include/IAmDatabaseHandler.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * -* \author Aleksandar Donchev, aleksander.donchev@partner.bmw.de BMW 2013 - * - * \file IAmDatabaseHandler.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef DATABASEHANDLERINTERFACE_H_ -#define DATABASEHANDLERINTERFACE_H_ - -#include "audiomanagertypes.h" -#include <map> -#include <vector> -#include <string> -#include <iostream> -#include <functional> -#include "audiomanagerconfig.h" - -namespace am -{ - -class CAmDatabaseObserver; -class CAmRoutingTree; -class CAmRoutingTreeItem; - - -//enum { DYNAMIC_ID_BOUNDARY = 100 }; //!< the value below is reserved for staticIDs, the value above will be assigned to dynamically registered items - -//todo: check the enum values before entering & changing in the database. -//todo: change asserts for dynamic boundary checks into failure answers.# -//todo: check autoincrement boundary and set to 16bit limits -//todo: If the sink is part of a gateway, the listconnectionFormats is copied to the gatewayInformation. Check this statement for sinks & sources -//todo: exchange last_insert_row id to be more safe -//todo: create test to ensure uniqueness of names throughout the database -//todo: enforce the uniqueness of names - -typedef std::map<am_gatewayID_t, std::vector<bool> > ListConnectionFormat; //!< type for list of connection formats - -/** - * This class handles and abstracts the database - */ - -class IAmDatabaseHandler -{ -public: - IAmDatabaseHandler () {}; - virtual ~IAmDatabaseHandler () {}; - virtual am_Error_e enterDomainDB(const am_Domain_s& domainData, am_domainID_t& domainID) = 0; - virtual am_Error_e enterMainConnectionDB(const am_MainConnection_s& mainConnectionData, am_mainConnectionID_t& connectionID) = 0; - virtual am_Error_e enterSinkDB(const am_Sink_s& sinkData, am_sinkID_t& sinkID) = 0; - virtual am_Error_e enterCrossfaderDB(const am_Crossfader_s& crossfaderData, am_crossfaderID_t& crossfaderID) = 0; - virtual am_Error_e enterGatewayDB(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID) = 0; - virtual am_Error_e enterConverterDB(const am_Converter_s & converteData, am_converterID_t & converterID) = 0; - virtual am_Error_e enterSourceDB(const am_Source_s& sourceData, am_sourceID_t& sourceID) = 0; - virtual am_Error_e enterConnectionDB(const am_Connection_s& connection, am_connectionID_t& connectionID) = 0; - virtual am_Error_e enterSinkClassDB(const am_SinkClass_s& sinkClass, am_sinkClass_t& sinkClassID) = 0; - virtual am_Error_e enterSourceClassDB(am_sourceClass_t& sourceClassID, const am_SourceClass_s& sourceClass) = 0; - virtual am_Error_e enterSystemProperties(const std::vector<am_SystemProperty_s>& listSystemProperties) = 0; - virtual am_Error_e changeMainConnectionRouteDB(const am_mainConnectionID_t mainconnectionID, const std::vector<am_connectionID_t>& listConnectionID) = 0; - virtual am_Error_e changeMainConnectionStateDB(const am_mainConnectionID_t mainconnectionID, const am_ConnectionState_e connectionState) = 0; - virtual am_Error_e changeSinkMainVolumeDB(const am_mainVolume_t mainVolume, const am_sinkID_t sinkID) = 0; - virtual am_Error_e changeSinkAvailabilityDB(const am_Availability_s& availability, const am_sinkID_t sinkID) = 0; - virtual am_Error_e changDomainStateDB(const am_DomainState_e domainState, const am_domainID_t domainID) = 0; - virtual am_Error_e changeSinkMuteStateDB(const am_MuteState_e muteState, const am_sinkID_t sinkID) = 0; - virtual am_Error_e changeMainSinkSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sinkID_t sinkID) = 0; - virtual am_Error_e changeMainSourceSoundPropertyDB(const am_MainSoundProperty_s& soundProperty, const am_sourceID_t sourceID) = 0; - virtual am_Error_e changeSourceSoundPropertyDB(const am_SoundProperty_s& soundProperty, const am_sourceID_t sourceID) = 0; - virtual am_Error_e changeSinkSoundPropertyDB(const am_SoundProperty_s& soundProperty, const am_sinkID_t sinkID) = 0; - virtual am_Error_e changeSourceAvailabilityDB(const am_Availability_s& availability, const am_sourceID_t sourceID) = 0; - virtual am_Error_e changeSystemPropertyDB(const am_SystemProperty_s& property) = 0; - virtual am_Error_e changeDelayMainConnection(const am_timeSync_t & delay, const am_mainConnectionID_t & connectionID) = 0; - virtual am_Error_e changeSinkClassInfoDB(const am_SinkClass_s& sinkClass) = 0; - virtual am_Error_e changeSourceClassInfoDB(const am_SourceClass_s& sourceClass) = 0; - virtual am_Error_e changeConnectionTimingInformation(const am_connectionID_t connectionID, const am_timeSync_t delay) = 0; - virtual am_Error_e changeConnectionFinal(const am_connectionID_t connectionID) = 0; - virtual am_Error_e changeSourceState(const am_sourceID_t sourceID, const am_SourceState_e sourceState) = 0; - virtual am_Error_e changeSinkVolume(const am_sinkID_t sinkID, const am_volume_t volume) = 0; - virtual am_Error_e changeSourceVolume(const am_sourceID_t sourceID, const am_volume_t volume) = 0; - virtual am_Error_e changeCrossFaderHotSink(const am_crossfaderID_t crossfaderID, const am_HotSink_e hotsink) = 0; - virtual am_Error_e removeMainConnectionDB(const am_mainConnectionID_t mainConnectionID) = 0; - virtual am_Error_e removeSinkDB(const am_sinkID_t sinkID) = 0; - virtual am_Error_e removeSourceDB(const am_sourceID_t sourceID) = 0; - virtual am_Error_e removeGatewayDB(const am_gatewayID_t gatewayID) = 0; - virtual am_Error_e removeConverterDB(const am_converterID_t converterID) = 0; - virtual am_Error_e removeCrossfaderDB(const am_crossfaderID_t crossfaderID) = 0; - virtual am_Error_e removeDomainDB(const am_domainID_t domainID) = 0; - virtual am_Error_e removeSinkClassDB(const am_sinkClass_t sinkClassID) = 0; - virtual am_Error_e removeSourceClassDB(const am_sourceClass_t sourceClassID) = 0; - virtual am_Error_e removeConnection(const am_connectionID_t connectionID) = 0; - virtual am_Error_e getSourceClassInfoDB(const am_sourceID_t sourceID, am_SourceClass_s& classInfo) const = 0; - virtual am_Error_e getSinkClassInfoDB(const am_sinkID_t sinkID, am_SinkClass_s& sinkClass) const = 0; - virtual am_Error_e getGatewayInfoDB(const am_gatewayID_t gatewayID, am_Gateway_s& gatewayData) const = 0; - virtual am_Error_e getConverterInfoDB(const am_converterID_t converterID, am_Converter_s& converterData) const = 0; - virtual am_Error_e getSinkInfoDB(const am_sinkID_t sinkID, am_Sink_s& sinkData) const = 0; - virtual am_Error_e getSourceInfoDB(const am_sourceID_t sourceID, am_Source_s& sourceData) const = 0; - virtual am_Error_e getCrossfaderInfoDB(const am_crossfaderID_t crossfaderID, am_Crossfader_s& crossfaderData) const = 0; - virtual am_Error_e getMainConnectionInfoDB(const am_mainConnectionID_t mainConnectionID, am_MainConnection_s& mainConnectionData) const = 0; - virtual am_Error_e getSinkMainVolume(const am_sinkID_t sinkID, am_mainVolume_t& mainVolume) const = 0; - virtual am_Error_e getSinkVolume(const am_sinkID_t sinkID, am_volume_t& volume) const = 0; - virtual am_Error_e getSourceVolume(const am_sourceID_t sourceID, am_volume_t& volume) const = 0; - virtual am_Error_e getSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const = 0; - virtual am_Error_e getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const = 0; - virtual am_Error_e getListSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_SoundProperty_s>& listSoundproperties) const =0; - virtual am_Error_e getListSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_SoundProperty_s>& listSoundproperties) const =0; - virtual am_Error_e getMainSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const = 0; - virtual am_Error_e getMainSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const = 0; - virtual am_Error_e getListSinksOfDomain(const am_domainID_t domainID, std::vector<am_sinkID_t>& listSinkID) const = 0; - virtual am_Error_e getListSourcesOfDomain(const am_domainID_t domainID, std::vector<am_sourceID_t>& listSourceID) const = 0; - virtual am_Error_e getListCrossfadersOfDomain(const am_domainID_t domainID, std::vector<am_crossfaderID_t>& listGatewaysID) const = 0; - virtual am_Error_e getListGatewaysOfDomain(const am_domainID_t domainID, std::vector<am_gatewayID_t>& listGatewaysID) const = 0; - virtual am_Error_e getListConvertersOfDomain(const am_domainID_t domainID, std::vector<am_converterID_t>& listConvertersID) const = 0; - virtual am_Error_e getListMainConnections(std::vector<am_MainConnection_s>& listMainConnections) const = 0; - virtual am_Error_e getListDomains(std::vector<am_Domain_s>& listDomains) const = 0; - virtual am_Error_e getListConnections(std::vector<am_Connection_s>& listConnections) const = 0; - virtual am_Error_e getListSinks(std::vector<am_Sink_s>& listSinks) const = 0; - virtual am_Error_e getListSources(std::vector<am_Source_s>& lisSources) const = 0; - virtual am_Error_e getListSourceClasses(std::vector<am_SourceClass_s>& listSourceClasses) const = 0; - virtual am_Error_e getListCrossfaders(std::vector<am_Crossfader_s>& listCrossfaders) const = 0; - virtual am_Error_e getListGateways(std::vector<am_Gateway_s>& listGateways) const = 0; - virtual am_Error_e getListConverters(std::vector<am_Converter_s> & listConverters) const = 0; - virtual am_Error_e getListSinkClasses(std::vector<am_SinkClass_s>& listSinkClasses) const = 0; - virtual am_Error_e getListVisibleMainConnections(std::vector<am_MainConnectionType_s>& listConnections) const = 0; - virtual am_Error_e getListMainSinks(std::vector<am_SinkType_s>& listMainSinks) const = 0; - virtual am_Error_e getListMainSources(std::vector<am_SourceType_s>& listMainSources) const = 0; - virtual am_Error_e getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_MainSoundProperty_s>& listSoundProperties) const = 0; - virtual am_Error_e getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_MainSoundProperty_s>& listSourceProperties) const = 0; - virtual am_Error_e getListSystemProperties(std::vector<am_SystemProperty_s>& listSystemProperties) const = 0; - virtual am_Error_e getListSinkConnectionFormats(const am_sinkID_t sinkID, std::vector<am_CustomConnectionFormat_t> & listConnectionFormats) const = 0; - virtual am_Error_e getListSourceConnectionFormats(const am_sourceID_t sourceID, std::vector<am_CustomConnectionFormat_t> & listConnectionFormats) const = 0; - virtual am_Error_e getListGatewayConnectionFormats(const am_gatewayID_t gatewayID, std::vector<bool> & listConnectionFormat) const = 0; - virtual am_Error_e getTimingInformation(const am_mainConnectionID_t mainConnectionID, am_timeSync_t& delay) const = 0; - virtual am_Error_e getDomainOfSource(const am_sourceID_t sourceID, am_domainID_t& domainID) const = 0; - virtual am_Error_e getDomainOfSink(const am_sinkID_t sinkID, am_domainID_t& domainID) const = 0; - virtual am_Error_e getDomainOfCrossfader(const am_crossfaderID_t crossfader, am_domainID_t& domainID) const = 0; - virtual am_Error_e getSoureState(const am_sourceID_t sourceID, am_SourceState_e& sourceState) const = 0; - virtual am_Error_e getDomainState(const am_domainID_t domainID, am_DomainState_e& state) const = 0; - virtual am_Error_e peekDomain(const std::string& name, am_domainID_t& domainID) = 0; - virtual am_Error_e peekSink(const std::string& name, am_sinkID_t& sinkID) = 0; - virtual am_Error_e peekSource(const std::string& name, am_sourceID_t& sourceID) = 0; - virtual am_Error_e peekSinkClassID(const std::string& name, am_sinkClass_t& sinkClassID) = 0; - virtual am_Error_e peekSourceClassID(const std::string& name, am_sourceClass_t& sourceClassID) = 0; - virtual am_Error_e changeSourceDB(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_SoundProperty_s>& listSoundProperties, const std::vector<am_CustomConnectionFormat_t>& listConnectionFormats, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) = 0; - virtual am_Error_e changeSinkDB(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) = 0; - virtual am_Error_e getListMainSinkNotificationConfigurations(const am_sinkID_t sinkID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations) = 0; - virtual am_Error_e getListMainSourceNotificationConfigurations(const am_sourceID_t sourceID, std::vector<am_NotificationConfiguration_s>& listMainNotificationConfigurations) = 0; - virtual am_Error_e changeMainSinkNotificationConfigurationDB(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration) = 0; - virtual am_Error_e changeMainSourceNotificationConfigurationDB(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration) = 0; - virtual am_Error_e changeGatewayDB(const am_gatewayID_t gatewayID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix) = 0; - virtual am_Error_e changeConverterDB(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix) = 0; - virtual am_Error_e changeSinkNotificationConfigurationDB(const am_sinkID_t sinkID,const am_NotificationConfiguration_s notificationConfiguration) = 0; - virtual am_Error_e changeSourceNotificationConfigurationDB(const am_sourceID_t sourceID,const am_NotificationConfiguration_s notificationConfiguration) = 0; - - virtual bool existMainConnection(const am_mainConnectionID_t mainConnectionID) const = 0; - virtual bool existCrossFader(const am_crossfaderID_t crossfaderID) const = 0; - virtual bool existConnection(const am_Connection_s & connection) const = 0; - virtual bool existConnectionID(const am_connectionID_t connectionID) const = 0; - virtual bool existSource(const am_sourceID_t sourceID) const = 0; - virtual bool existSourceNameOrID(const am_sourceID_t sourceID, const std::string& name) const = 0; - virtual bool existSourceName(const std::string& name) const = 0; - virtual bool existSink(const am_sinkID_t sinkID) const = 0; - virtual bool existSinkNameOrID(const am_sinkID_t sinkID, const std::string& name) const = 0; - virtual bool existSinkName(const std::string& name) const = 0; - virtual bool existDomain(const am_domainID_t domainID) const = 0; - virtual bool existGateway(const am_gatewayID_t gatewayID) const = 0; - virtual bool existSinkClass(const am_sinkClass_t sinkClassID) const = 0; - virtual bool existSourceClass(const am_sourceClass_t sourceClassID) const = 0; - virtual void registerObserver(CAmDatabaseObserver *iObserver) = 0; - virtual bool sourceVisible(const am_sourceID_t sourceID) const = 0; - virtual bool sinkVisible(const am_sinkID_t sinkID) const = 0; - virtual bool isComponentConnected(const am_Gateway_s & gateway) const = 0; - virtual bool isComponentConnected(const am_Converter_s & converter) const = 0; - virtual am_timeSync_t calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const = 0; //!< calculates a new main connection delay - virtual void dump( std::ostream & output) const = 0 ; - virtual am_Error_e enumerateSources(std::function<void(const am_Source_s & element)> cb) const = 0 ; - virtual am_Error_e enumerateSinks(std::function<void(const am_Sink_s & element)> cb) const = 0 ; - virtual am_Error_e enumerateGateways(std::function<void(const am_Gateway_s & element)> cb) const = 0 ; - virtual am_Error_e enumerateConverters(std::function<void(const am_Converter_s & element)> cb) const = 0 ; - -}; - - -} - -#endif /* DATABASEHANDLERINTERFACE_H_ */ diff --git a/AudioManagerDaemon/include/TAmPluginTemplate.h b/AudioManagerDaemon/include/TAmPluginTemplate.h deleted file mode 100644 index f000fbe..0000000 --- a/AudioManagerDaemon/include/TAmPluginTemplate.h +++ /dev/null @@ -1,91 +0,0 @@ -/** - * SPDX license identifier: MPL-2.0 - * - * Copyright (C) 2012, BMW AG - * - * This file is part of GENIVI Project AudioManager. - * - * Contributions are licensed to the GENIVI Alliance under one or more - * Contribution License Agreements. - * - * \copyright - * This Source Code Form is subject to the terms of the - * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with - * this file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * - * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012 - * - * \file TAmPluginTemplate.h - * For further information see http://www.genivi.org/. - * - */ - -#ifndef PLUGINTEMPLATE_H_ -#define PLUGINTEMPLATE_H_ - -#include <dlfcn.h> -#include <libgen.h> -#include "CAmDltWrapper.h" - -namespace am -{ - -/** - * * This template tries to load a library and cast to a class - * @param libname the full path to the library to be loaded - * @param libraryHandle the handle to the library that gets returned - * @return returns the pointer to the class to be loaded - */ -template<class T> T* getCreateFunction(const std::string& libname, void*& libraryHandle) -{ - - logInfo("getCreateFunction : Trying to load library with name: ",libname); - - // cut off directories - char* fileWithPath = const_cast<char*>(libname.c_str()); - std::string libFileName = basename(fileWithPath); - - // cut off "lib" in front and cut off .so end" - std::string createFunctionName = libFileName.substr(3, libFileName.length() - 6) + "Factory"; - // open library - dlerror(); // Clear any existing error - libraryHandle = dlopen(libname.c_str(), RTLD_LAZY ); - const char* dlopen_error = dlerror(); - if (!libraryHandle || dlopen_error) - { - logError("getCreateFunction : dlopen failed",dlopen_error); - return (0); - } - - // get entry point from shared lib - dlerror(); // Clear any existing error - - union - { - void* voidPointer; - T* typedPointer; - } functionPointer; - - // Note: direct cast is not allowed by ISO C++. e.g. - // T* createFunction = reinterpret_cast<T*>(dlsym(libraryHandle, createFunctionName.c_str())); - // compiler warning: "forbids casting between pointer-to-function and pointer-to-object" - - functionPointer.voidPointer = dlsym(libraryHandle, createFunctionName.c_str()); - T* createFunction = functionPointer.typedPointer; - - const char* dlsym_error = dlerror(); - if (!createFunction || dlsym_error) - { - logError("getCreateFunction: Failed to load shared lib entry point",dlsym_error); - } - else - { - logInfo("getCreateFunction : loaded successfully plugin", createFunctionName); - } - return (createFunction); -} - -} - -#endif /* PLUGINTEMPLATE_H_ */ |