From 721aed89269292b07bdd21361828612c34640bde Mon Sep 17 00:00:00 2001 From: Aleksandar Donchev Date: Fri, 21 Jun 2013 16:38:56 +0200 Subject: First version Map implementation of database handler with unit tests ( ticket 38 ) Signed-off-by: Christian Linke --- AudioManagerDaemon/include/CAmCommandReceiver.h | 8 +- AudioManagerDaemon/include/CAmControlReceiver.h | 8 +- AudioManagerDaemon/include/CAmDatabaseHandler.h | 37 +- .../include/CAmDatabaseHandlerInterface.h | 192 ++++++++++ AudioManagerDaemon/include/CAmMapHandler.h | 394 +++++++++++++++++++++ AudioManagerDaemon/include/CAmRouter.h | 6 +- AudioManagerDaemon/include/CAmRoutingReceiver.h | 8 +- 7 files changed, 614 insertions(+), 39 deletions(-) create mode 100644 AudioManagerDaemon/include/CAmDatabaseHandlerInterface.h create mode 100644 AudioManagerDaemon/include/CAmMapHandler.h (limited to 'AudioManagerDaemon/include') diff --git a/AudioManagerDaemon/include/CAmCommandReceiver.h b/AudioManagerDaemon/include/CAmCommandReceiver.h index 8f9aa06..56f26d1 100644 --- a/AudioManagerDaemon/include/CAmCommandReceiver.h +++ b/AudioManagerDaemon/include/CAmCommandReceiver.h @@ -27,7 +27,7 @@ namespace am { -class CAmDatabaseHandler; +class CAmDatabaseHandlerInterface; class CAmControlSender; class CAmDbusWrapper; class CAmSocketHandler; @@ -38,8 +38,8 @@ class CAmSocketHandler; class CAmCommandReceiver: public IAmCommandReceive { public: - CAmCommandReceiver(CAmDatabaseHandler* iDatabaseHandler, CAmControlSender* iControlSender, CAmSocketHandler* iSocketHandler); - CAmCommandReceiver(CAmDatabaseHandler* iDatabaseHandler, CAmControlSender* iControlSender, CAmSocketHandler* iSocketHandler, CAmDbusWrapper* iDBusWrapper); + CAmCommandReceiver(CAmDatabaseHandlerInterface* iDatabaseHandler, CAmControlSender* iControlSender, CAmSocketHandler* iSocketHandler); + CAmCommandReceiver(CAmDatabaseHandlerInterface* 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); @@ -75,7 +75,7 @@ public: void waitOnRundown(bool rundown); //!< tells the ComandReceiver to start waiting for all handles to be confirmed private: - CAmDatabaseHandler* mDatabaseHandler; //!< pointer to the databasehandler + CAmDatabaseHandlerInterface* mDatabaseHandler; //!< pointer to the databasehandler CAmControlSender* mControlSender; //!< pointer to the control sender CAmDbusWrapper* mDBusWrapper; //!< pointer to the dbuswrapper CAmSocketHandler* mSocketHandler; //!< pointer to the SocketHandler diff --git a/AudioManagerDaemon/include/CAmControlReceiver.h b/AudioManagerDaemon/include/CAmControlReceiver.h index 11e295d..ca0c3f5 100644 --- a/AudioManagerDaemon/include/CAmControlReceiver.h +++ b/AudioManagerDaemon/include/CAmControlReceiver.h @@ -28,7 +28,7 @@ namespace am { class CAmSocketHandler; -class CAmDatabaseHandler; +class CAmDatabaseHandlerInterface; class CAmRoutingSender; class CAmCommandSender; class CAmRouter; @@ -40,8 +40,8 @@ class CAmNodeStateCommunicator; class CAmControlReceiver: public IAmControlReceive { public: - CAmControlReceiver(CAmDatabaseHandler *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmCommandSender *iCommandSender, CAmSocketHandler *iSocketHandler, CAmRouter* iRouter, CAmNodeStateCommunicator* iNodeStateCommunicator); - CAmControlReceiver(CAmDatabaseHandler *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmCommandSender *iCommandSender, CAmSocketHandler *iSocketHandler, CAmRouter* iRouter); + CAmControlReceiver(CAmDatabaseHandlerInterface *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmCommandSender *iCommandSender, CAmSocketHandler *iSocketHandler, CAmRouter* iRouter, CAmNodeStateCommunicator* iNodeStateCommunicator); + CAmControlReceiver(CAmDatabaseHandlerInterface *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& returnList); am_Error_e connect(am_Handle_s& handle, am_connectionID_t& connectionID, const am_ConnectionFormat_e format, const am_sourceID_t sourceID, const am_sinkID_t sinkID); @@ -137,7 +137,7 @@ public: NsmErrorStatus_e sendLifecycleRequestCompleteNSM(const uint32_t RequestId, const NsmErrorStatus_e status) ; private: - CAmDatabaseHandler* mDatabaseHandler; //!< pointer tto the databasehandler + CAmDatabaseHandlerInterface* 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 diff --git a/AudioManagerDaemon/include/CAmDatabaseHandler.h b/AudioManagerDaemon/include/CAmDatabaseHandler.h index 4341c01..1adc4d6 100644 --- a/AudioManagerDaemon/include/CAmDatabaseHandler.h +++ b/AudioManagerDaemon/include/CAmDatabaseHandler.h @@ -22,10 +22,8 @@ #ifndef DATABASEHANDLER_H_ #define DATABASEHANDLER_H_ -#include "audiomanagertypes.h" +#include "CAmDatabaseHandlerInterface.h" #include -#include -#include #include namespace am @@ -35,7 +33,6 @@ class CAmDatabaseObserver; class CAmRoutingTree; class CAmRoutingTreeItem; -#define 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 @@ -47,9 +44,18 @@ class CAmRoutingTreeItem; /** * This class handles and abstracts the database */ -class CAmDatabaseHandler +class CAmDatabaseHandler : public CAmDatabaseHandlerInterface { +private: + am_timeSync_t calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const; //!< calculates a new main connection delay + bool sqQuery(const std::string& query); //!< queries the database + bool openDatabase(); //!< opens the database + void createTables(); //!< creates all tables from the static table + sqlite3 *mpDatabase; //!< pointer to the database + std::string mPath; //!< path to the database + public: + CAmDatabaseHandler(); CAmDatabaseHandler(std::string databasePath); ~CAmDatabaseHandler(); am_Error_e enterDomainDB(const am_Domain_s& domainData, am_domainID_t& domainID); @@ -148,8 +154,8 @@ public: bool existMainConnection(const am_mainConnectionID_t mainConnectionID) const; bool existcrossFader(const am_crossfaderID_t crossfaderID) const; - bool existConnection(const am_Connection_s connection); - bool existConnectionID(const am_connectionID_t connectionID); + 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; @@ -163,23 +169,6 @@ public: void registerObserver(CAmDatabaseObserver *iObserver); bool sourceVisible(const am_sourceID_t sourceID) const; bool sinkVisible(const am_sinkID_t sinkID) const; - -private: - am_timeSync_t calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const; //!< calculates a new main connection delay - bool sqQuery(const std::string& query); //!< queries the database - bool openDatabase(); //!< opens the database - void createTables(); //!< creates all tables from the static table - sqlite3 *mpDatabase; //!< pointer to the database - std::string mPath; //!< path to the database - 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 mFirstStaticSinkClass; //!< bool for dynamic range handling - bool mFirstStaticSourceClass; //!< bool for dynamic range handling - bool mFirstStaticCrossfader; //!< bool for dynamic range handling - typedef std::map > ListConnectionFormat; //!< type for list of connection formats - ListConnectionFormat mListConnectionFormat; //!< list of connection formats }; } diff --git a/AudioManagerDaemon/include/CAmDatabaseHandlerInterface.h b/AudioManagerDaemon/include/CAmDatabaseHandlerInterface.h new file mode 100644 index 0000000..58d97bc --- /dev/null +++ b/AudioManagerDaemon/include/CAmDatabaseHandlerInterface.h @@ -0,0 +1,192 @@ +/** + * 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 CAmDatabaseHandlerInterface.h + * For further information see http://www.genivi.org/. + * + */ + +#ifndef DATABASEHANDLERINTERFACE_H_ +#define DATABASEHANDLERINTERFACE_H_ + +#include "audiomanagertypes.h" +#include +#include +#include + +namespace am +{ + +class CAmDatabaseObserver; +class CAmRoutingTree; +class CAmRoutingTreeItem; + +#define 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 > ListConnectionFormat; //!< type for list of connection formats + +/** + * This class handles and abstracts the database + */ + +class CAmDatabaseHandlerInterface +{ +protected: + virtual am_timeSync_t calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const = 0; //!< 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 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 + +public: + CAmDatabaseHandlerInterface(): mpDatabaseObserver(NULL), // + mFirstStaticSink(true), // + mFirstStaticSource(true), // + mFirstStaticGateway(true), // + mFirstStaticSinkClass(true), // + mFirstStaticSourceClass(true), // + mFirstStaticCrossfader(true), // + mListConnectionFormat() + {}; + virtual ~CAmDatabaseHandlerInterface() {}; + + 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 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& listSystemProperties) = 0; + virtual am_Error_e changeMainConnectionRouteDB(const am_mainConnectionID_t mainconnectionID, const std::vector& 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 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 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 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_SoundPropertyType_e propertyType, int16_t& value) const = 0; + virtual am_Error_e getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_SoundPropertyType_e propertyType, int16_t& value) const = 0; + virtual am_Error_e getListSinksOfDomain(const am_domainID_t domainID, std::vector& listSinkID) const = 0; + virtual am_Error_e getListSourcesOfDomain(const am_domainID_t domainID, std::vector& listSourceID) const = 0; + virtual am_Error_e getListCrossfadersOfDomain(const am_domainID_t domainID, std::vector& listGatewaysID) const = 0; + virtual am_Error_e getListGatewaysOfDomain(const am_domainID_t domainID, std::vector& listGatewaysID) const = 0; + virtual am_Error_e getListMainConnections(std::vector& listMainConnections) const = 0; + virtual am_Error_e getListDomains(std::vector& listDomains) const = 0; + virtual am_Error_e getListConnections(std::vector& listConnections) const = 0; + virtual am_Error_e getListSinks(std::vector& listSinks) const = 0; + virtual am_Error_e getListSources(std::vector& lisSources) const = 0; + virtual am_Error_e getListSourceClasses(std::vector& listSourceClasses) const = 0; + virtual am_Error_e getListCrossfaders(std::vector& listCrossfaders) const = 0; + virtual am_Error_e getListGateways(std::vector& listGateways) const = 0; + virtual am_Error_e getListSinkClasses(std::vector& listSinkClasses) const = 0; + virtual am_Error_e getListVisibleMainConnections(std::vector& listConnections) const = 0; + virtual am_Error_e getListMainSinks(std::vector& listMainSinks) const = 0; + virtual am_Error_e getListMainSources(std::vector& listMainSources) const = 0; + virtual am_Error_e getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector& listSoundProperties) const = 0; + virtual am_Error_e getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector& listSourceProperties) const = 0; + virtual am_Error_e getListSystemProperties(std::vector& listSystemProperties) const = 0; + virtual am_Error_e getListSinkConnectionFormats(const am_sinkID_t sinkID, std::vector & listConnectionFormats) const = 0; + virtual am_Error_e getListSourceConnectionFormats(const am_sourceID_t sourceID, std::vector & listConnectionFormats) const = 0; + virtual am_Error_e getListGatewayConnectionFormats(const am_gatewayID_t gatewayID, std::vector & 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 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 getRoutingTree(bool onlyfree, CAmRoutingTree& tree, std::vector& flatTree) = 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& listSoundProperties, const std::vector& listConnectionFormats, const std::vector& listMainSoundProperties) = 0; + virtual am_Error_e changeSinkDB(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector& listSoundProperties, const std::vector& listConnectionFormats, const std::vector& listMainSoundProperties) = 0; + virtual am_Error_e getListMainSinkNotificationConfigurations(const am_sinkID_t sinkID, std::vector& listMainNotificationConfigurations) = 0; + virtual am_Error_e getListMainSourceNotificationConfigurations(const am_sourceID_t sourceID, std::vector& 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& listSourceConnectionFormats, const std::vector& listSinkConnectionFormats, const std::vector& 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; +}; + +} + +#endif /* DATABASEHANDLERINTERFACE_H_ */ diff --git a/AudioManagerDaemon/include/CAmMapHandler.h b/AudioManagerDaemon/include/CAmMapHandler.h new file mode 100644 index 0000000..984fbe1 --- /dev/null +++ b/AudioManagerDaemon/include/CAmMapHandler.h @@ -0,0 +1,394 @@ +/** + * 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 CAmDatabaseHandler.h + * For further information see http://www.genivi.org/. + * + */ + +#ifndef MAPHANDLER_H_ +#define MAPHANDLER_H_ + +#include "CAmDatabaseHandlerInterface.h" +#include +#include +#include +#include + + +namespace am +{ +//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 + +/** + * The following structures extend the base structures with the field 'reserved'. + */ + +struct am_Sink_Database_s : public am_Sink_s +{ + bool reserved; + am_Sink_Database_s():am_Sink_s(), reserved(false) + {}; + void getSinkType(am_SinkType_s & sinkType) const + { + sinkType.name = name; + sinkType.sinkID = sinkID; + sinkType.availability = available; + sinkType.muteState = muteState; + sinkType.volume = mainVolume; + sinkType.sinkClassID = sinkClassID; + }; + am_Sink_Database_s & operator=(const am_Sink_Database_s & anObject) + { + if (this != &anObject) + { + am_Sink_s::operator=(anObject); + reserved = anObject.reserved; + } + return *this; + }; + am_Sink_Database_s & operator=(const am_Sink_s & anObject) + { + if (this != &anObject) + am_Sink_s::operator=(anObject); + return *this; + }; + void print() const + { + printf("\n Sink(%s) id(%d)\n", name.c_str() ,sinkID); + printf("\t availability(%d) availabilityReason(%d) sinkClassID(%d) domainID(%d) visible(%d) volume(%d) mainVolume(%d) muteState(%d) reserved(%d)\n", + available.availability, available.availabilityReason, sinkClassID, domainID, visible, volume, mainVolume, muteState,reserved); + }; +}; + +struct am_Source_Database_s : public am_Source_s +{ + bool reserved; + am_Source_Database_s():am_Source_s(), reserved(false) + {}; + void getSourceType(am_SourceType_s & sourceType) const + { + sourceType.name = name; + sourceType.sourceClassID = sourceClassID; + sourceType.availability = available; + sourceType.sourceID = sourceID; + }; + am_Source_Database_s & operator=(const am_Source_Database_s & anObject) + { + if (this != &anObject) + { + am_Source_s::operator=(anObject); + reserved = anObject.reserved; + } + return *this; + }; + am_Source_Database_s & operator=(const am_Source_s & anObject) + { + if (this != &anObject) + { + am_Source_s::operator=(anObject); + } + return *this; + }; + void print() const + { + printf("\n Source(%s) id(%d)\n", name.c_str() ,sourceID); + printf("\t availability(%d) availabilityReason(%d) sourceClassID(%d) domainID(%d) visible(%d) volume(%d) interruptState(%d) sourceState(%d) reserved(%d)\n", + available.availability, available.availabilityReason, sourceClassID, domainID, visible, volume, interruptState, sourceState,reserved); + }; +}; + +struct am_Connection_Database_s : public am_Connection_s +{ + bool reserved; + am_Connection_Database_s():am_Connection_s(), reserved(true) + {}; + am_Connection_Database_s & operator=(const am_Connection_Database_s & anObject) + { + if (this != &anObject) + { + am_Connection_s::operator=(anObject); + reserved = anObject.reserved; + } + return *this; + }; + am_Connection_Database_s & operator=(const am_Connection_s & anObject) + { + if (this != &anObject) + am_Connection_s::operator=(anObject); + return *this; + }; +}; + +struct am_Domain_Database_s : public am_Domain_s +{ + bool reserved; + am_Domain_Database_s():am_Domain_s(), reserved(false) + {}; + am_Domain_Database_s & operator=(const am_Domain_Database_s & anObject) + { + if (this != &anObject) + { + am_Domain_s::operator=(anObject); + reserved = anObject.reserved; + } + return *this; + }; + am_Domain_Database_s & operator=(const am_Domain_s & anObject) + { + if (this != &anObject) + am_Domain_s::operator=(anObject); + return *this; + }; +}; + +struct am_MainConnection_Database_s : public am_MainConnection_s +{ + am_MainConnection_Database_s():am_MainConnection_s() + {}; + void getMainConnectionType(am_MainConnectionType_s & connectionType) const + { + connectionType.mainConnectionID = mainConnectionID; + connectionType.sourceID = sourceID; + connectionType.sinkID = sinkID; + connectionType.connectionState = connectionState; + connectionType.delay = delay; + }; + am_MainConnection_Database_s & operator=(const am_MainConnection_Database_s & anObject) + { + am_MainConnection_s::operator=(anObject); + return *this; + }; + am_MainConnection_Database_s & operator=(const am_MainConnection_s & anObject) + { + am_MainConnection_s::operator=(anObject); + return *this; + }; +}; + +/** + * This class handles and abstracts the database + */ +class CAmMapHandler : public CAmDatabaseHandlerInterface +{ +public: + CAmMapHandler(); + ~CAmMapHandler(); + 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 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& listSystemProperties); + am_Error_e changeMainConnectionRouteDB(const am_mainConnectionID_t mainconnectionID, const std::vector& 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 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 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 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_SoundPropertyType_e propertyType, int16_t& value) const; + am_Error_e getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_SoundPropertyType_e propertyType, int16_t& value) const; + am_Error_e getListSinksOfDomain(const am_domainID_t domainID, std::vector& listSinkID) const; + am_Error_e getListSourcesOfDomain(const am_domainID_t domainID, std::vector& listSourceID) const; + am_Error_e getListCrossfadersOfDomain(const am_domainID_t domainID, std::vector& listGatewaysID) const; + am_Error_e getListGatewaysOfDomain(const am_domainID_t domainID, std::vector& listGatewaysID) const; + am_Error_e getListMainConnections(std::vector& listMainConnections) const; + am_Error_e getListDomains(std::vector& listDomains) const; + am_Error_e getListConnections(std::vector& listConnections) const; + am_Error_e getListSinks(std::vector& listSinks) const; + am_Error_e getListSources(std::vector& lisSources) const; + am_Error_e getListSourceClasses(std::vector& listSourceClasses) const; + am_Error_e getListCrossfaders(std::vector& listCrossfaders) const; + am_Error_e getListGateways(std::vector& listGateways) const; + am_Error_e getListSinkClasses(std::vector& listSinkClasses) const; + am_Error_e getListVisibleMainConnections(std::vector& listConnections) const; + am_Error_e getListMainSinks(std::vector& listMainSinks) const; + am_Error_e getListMainSources(std::vector& listMainSources) const; + am_Error_e getListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector& listSoundProperties) const; + am_Error_e getListMainSourceSoundProperties(const am_sourceID_t sourceID, std::vector& listSourceProperties) const; + am_Error_e getListSystemProperties(std::vector& listSystemProperties) const; + am_Error_e getListSinkConnectionFormats(const am_sinkID_t sinkID, std::vector & listConnectionFormats) const; + am_Error_e getListSourceConnectionFormats(const am_sourceID_t sourceID, std::vector & listConnectionFormats) const; + am_Error_e getListGatewayConnectionFormats(const am_gatewayID_t gatewayID, std::vector & 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 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 getRoutingTree(bool onlyfree, CAmRoutingTree& tree, std::vector& flatTree); + 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& listSoundProperties, const std::vector& listConnectionFormats, const std::vector& listMainSoundProperties); + am_Error_e changeSinkDB(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector& listSoundProperties, const std::vector& listConnectionFormats, const std::vector& listMainSoundProperties); + am_Error_e getListMainSinkNotificationConfigurations(const am_sinkID_t sinkID, std::vector& listMainNotificationConfigurations); + am_Error_e getListMainSourceNotificationConfigurations(const am_sourceID_t sourceID, std::vector& 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& listSourceConnectionFormats, const std::vector& listSinkConnectionFormats, const std::vector& 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 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; + + void printSources(); + void printSinks(); + void printSinkClasses(); + void printSourceClasses(); +private: + + typedef std::map CAmMapDomain; + typedef std::map CAmMapSourceClass; + typedef std::map CAmMapSinkClass; + typedef std::map CAmMapSink; + typedef std::map CAmMapSource; + typedef std::map CAmMapGateway; + typedef std::map CAmMapCrossfader; + typedef std::map CAmMapConnection; + typedef std::map CAmMapMainConnection; + typedef std::vector CAmVectorSystemProperties; + typedef struct CAmMappedData + { + int16_t mCurrentDomainID; + int16_t mCurrentSourceClassesID; + int16_t mCurrentSinkClassesID; + int16_t mCurrentSinkID; + int16_t mCurrentSourceID; + int16_t mCurrentGatewayID; + int16_t mCurrentCrossfaderID; + int16_t mCurrentConnectionID; + int16_t mCurrentMainConnectionID; + int16_t mDefaultIDLimit; + + CAmVectorSystemProperties mSystemProperties; + CAmMapDomain mDomainMap; + CAmMapSourceClass mSourceClassesMap; + CAmMapSinkClass mSinkClassesMap; + CAmMapSink mSinkMap; + CAmMapSource mSourceMap; + CAmMapGateway mGatewayMap; + CAmMapCrossfader mCrossfaderMap; + CAmMapConnection mConnectionMap; + CAmMapMainConnection mMainConnectionMap; + + CAmMappedData(): //For Domain, MainConnections, Connections we don't have static IDs. + mCurrentDomainID(1), mCurrentSourceClassesID(DYNAMIC_ID_BOUNDARY), mCurrentSinkClassesID(DYNAMIC_ID_BOUNDARY), + mCurrentSinkID(DYNAMIC_ID_BOUNDARY), mCurrentSourceID(DYNAMIC_ID_BOUNDARY), mCurrentGatewayID(DYNAMIC_ID_BOUNDARY), + mCurrentCrossfaderID(DYNAMIC_ID_BOUNDARY), mCurrentConnectionID(1), mCurrentMainConnectionID(1), + mDefaultIDLimit(SHRT_MAX), + + mSystemProperties(), + mDomainMap(),mSourceClassesMap(), mSinkClassesMap(), mSinkMap(), mSourceMap(), + mGatewayMap(), mCrossfaderMap(), mConnectionMap(), mMainConnectionMap() + {}; + + bool increaseID(int16_t * resultID, int16_t * sourceID, int16_t const desiredStaticID = 0, int16_t const preferedStaticIDBoundary = DYNAMIC_ID_BOUNDARY) + { + if( desiredStaticID > 0 && desiredStaticID < preferedStaticIDBoundary ) + { + *resultID = desiredStaticID; + return true; + } + else if( *sourceID < mDefaultIDLimit-1 ) //SHRT_MAX or the max limit is reserved and not used!!! + { + *resultID = (*sourceID)++; + return true; + } + else + { + *resultID = -1; + return false; + } + }; + } CAmMappedData; + + + CAmMappedData mMappedData; + + am_timeSync_t calculateMainConnectionDelay(const am_mainConnectionID_t mainConnectionID) const; //!< calculates a new main connection delay + int16_t calculateDelayForRoute(const std::vector& 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 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); +}; + +} + +#endif /* MAPHANDLER_H_ */ diff --git a/AudioManagerDaemon/include/CAmRouter.h b/AudioManagerDaemon/include/CAmRouter.h index 7268f3c..ca04d6a 100644 --- a/AudioManagerDaemon/include/CAmRouter.h +++ b/AudioManagerDaemon/include/CAmRouter.h @@ -27,7 +27,7 @@ namespace am { -class CAmDatabaseHandler; +class CAmDatabaseHandlerInterface; class CAmControlSender; /** @@ -36,7 +36,7 @@ class CAmControlSender; class CAmRouter { public: - CAmRouter(CAmDatabaseHandler* iDatabaseHandler, CAmControlSender* iSender); + CAmRouter(CAmDatabaseHandlerInterface* iDatabaseHandler, CAmControlSender* iSender); ~CAmRouter(); am_Error_e getRoute(const bool onlyfree, const am_sourceID_t sourceID, const am_sinkID_t sinkID, std::vector& returnList); @@ -44,7 +44,7 @@ private: am_Error_e findBestWay(am_sinkID_t sinkID, am_sourceID_t sourceID, std::vector& listRoute, std::vector::iterator routeIterator, std::vector::iterator gatewayIterator); void listPossibleConnectionFormats(const am_sourceID_t sourceID, const am_sinkID_t sinkID, std::vector& listFormats) const; void listRestrictedOutputFormatsGateways(const am_gatewayID_t gatewayID, const am_ConnectionFormat_e sinkConnectionFormat, std::vector& listFormats) const; - CAmDatabaseHandler* mpDatabaseHandler; //!< pointer to database handler + CAmDatabaseHandlerInterface* mpDatabaseHandler; //!< pointer to database handler CAmControlSender* mpControlSender; //!< pointer the controlsender - is used to retrieve information for the optimal route }; diff --git a/AudioManagerDaemon/include/CAmRoutingReceiver.h b/AudioManagerDaemon/include/CAmRoutingReceiver.h index dbb90a4..4d1493a 100644 --- a/AudioManagerDaemon/include/CAmRoutingReceiver.h +++ b/AudioManagerDaemon/include/CAmRoutingReceiver.h @@ -29,7 +29,7 @@ namespace am class CAmSocketHandler; class CAmDbusWrapper; -class CAmDatabaseHandler; +class CAmDatabaseHandlerInterface; class CAmRoutingSender; class CAmControlSender; @@ -39,8 +39,8 @@ class CAmControlSender; class CAmRoutingReceiver: public IAmRoutingReceive { public: - CAmRoutingReceiver(CAmDatabaseHandler *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmControlSender *iControlSender, CAmSocketHandler *iSocketHandler); - CAmRoutingReceiver(CAmDatabaseHandler *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmControlSender *iControlSender, CAmSocketHandler *iSocketHandler, CAmDbusWrapper *iDBusWrapper); + CAmRoutingReceiver(CAmDatabaseHandlerInterface *iDatabaseHandler, CAmRoutingSender *iRoutingSender, CAmControlSender *iControlSender, CAmSocketHandler *iSocketHandler); + CAmRoutingReceiver(CAmDatabaseHandlerInterface *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); @@ -97,7 +97,7 @@ public: void waitOnRundown(bool rundown); //!< tells the RoutingReceiver to start waiting for all handles to be confirmed private: - CAmDatabaseHandler *mpDatabaseHandler; //!< pointer to the databaseHandler + CAmDatabaseHandlerInterface *mpDatabaseHandler; //!< pointer to the databaseHandler CAmRoutingSender *mpRoutingSender; //!< pointer to the routingSender CAmControlSender *mpControlSender; //!< pointer to the controlSender CAmSocketHandler *mpSocketHandler; //!< pointer to sockethandler -- cgit v1.2.1