diff options
Diffstat (limited to 'AudioManagerDaemon/include')
4 files changed, 198 insertions, 35 deletions
diff --git a/AudioManagerDaemon/include/CAmNodeStateCommunicator.h b/AudioManagerDaemon/include/CAmNodeStateCommunicator.h index dfc6689..8cf0dce 100644 --- a/AudioManagerDaemon/include/CAmNodeStateCommunicator.h +++ b/AudioManagerDaemon/include/CAmNodeStateCommunicator.h @@ -13,16 +13,22 @@ * * * \author Christian Linke, christian.linke@bmw.de BMW 2012 + * \author Aleksandar Donchev, aleksander.donchev@partner.bmw.de BMW 2013 * * \file CAmNodeStateCommunicator.h * For further information see http://www.genivi.org/. * */ -#ifndef CAMNODESTATECOMMUNICATOR_H_ -#define CAMNODESTATECOMMUNICATOR_H_ -#include "shared/CAmDbusWrapper.h" +#ifndef CAMNODESTATECOMMUNICATORBASE_H_ +#define CAMNODESTATECOMMUNICATORBASE_H_ + +#include <assert.h> +#include "config.h" #include "NodeStateManager.h" +#include "audiomanagertypes.h" + + namespace am { @@ -30,43 +36,37 @@ namespace am class CAmControlSender; /** communicates with the NSM - * The CAmNodeStateCommunicator communicates with the NodeStateManager via Dbus. Only works, if CAmDBusWrapper is enabled. + * The CAmNodeStateCommunicator communicates with the NodeStateManager. * The CAmNodeStateCommunicator is triggered via CAmControlReceiver, so you can communicate from the ControllerPlugin with it. - * Most if the interfaces are passive, so you get the information you need via retrieving it. If you need to register the AudioManager + * Most of the interfaces are passive, so you get the information you need via retrieving it. If you need to register the AudioManager * as LifeCycleConsumer, you need to call CAmNodeStateCommunicator::nsmRegisterShutdownClient which can be undone with CAmNodeStateCommunicator::nsmUnRegisterShutdownClient. * After you have registered, you will get hookSystemLifecycleRequest on the ControlSendInterface of the controller. * You should answer this within your set timeout with CAmNodeStateCommunicator::nsmSendLifecycleRequestComplete. */ + class CAmNodeStateCommunicator { -public: - CAmNodeStateCommunicator(CAmDbusWrapper* iDbusWrapper); - virtual ~CAmNodeStateCommunicator(); - am_Error_e nsmGetRestartReasonProperty(NsmRestartReason_e& restartReason) ; - am_Error_e nsmGetShutdownReasonProperty(NsmShutdownReason_e& ShutdownReason) ; - am_Error_e nsmGetRunningReasonProperty(NsmRunningReason_e& nsmRunningReason) ; - NsmErrorStatus_e nsmGetNodeState(NsmNodeState_e& nsmNodeState) ; - NsmErrorStatus_e nsmGetSessionState(const std::string& sessionName, const NsmSeat_e& seatID, NsmSessionState_e& sessionState) ; - NsmErrorStatus_e nsmGetApplicationMode(NsmApplicationMode_e& applicationMode) ; - NsmErrorStatus_e nsmRegisterShutdownClient(const uint32_t shutdownMode, const uint32_t timeoutMs) ; - NsmErrorStatus_e nsmUnRegisterShutdownClient(const uint32_t shutdownMode) ; - am_Error_e nsmGetInterfaceVersion(uint32_t& version) ; - NsmErrorStatus_e nsmSendLifecycleRequestComplete(const uint32_t RequestId, const NsmErrorStatus_e status) ; - - void registerControlSender(CAmControlSender* iControlSender); - static DBusHandlerResult receiveCallback(DBusConnection *conn, DBusMessage *msg, void *user_data); - static DBusHandlerResult signalCallback(DBusConnection *conn, DBusMessage *msg, void *user_data); - - -private: - void sendIntrospection(DBusConnection* conn, DBusMessage* msg); - void sendMessage(DBusMessage* message, DBusMessage* origMessage); - DBusHandlerResult receiveCallbackDelegate(DBusConnection *conn, DBusMessage *msg); - am_Error_e readIntegerProperty(const std::string property, int32_t &value); - CAmDbusWrapper* mpDbusWrapper; +protected: CAmControlSender* mpControlSender; - DBusConnection* mpDBusConnection; +public: + CAmNodeStateCommunicator():mpControlSender(NULL) {} + virtual ~CAmNodeStateCommunicator() {} + virtual am_Error_e nsmGetRestartReasonProperty(NsmRestartReason_e& restartReason) = 0; + virtual am_Error_e nsmGetShutdownReasonProperty(NsmShutdownReason_e& ShutdownReason) = 0; + virtual am_Error_e nsmGetRunningReasonProperty(NsmRunningReason_e& nsmRunningReason) = 0; + virtual NsmErrorStatus_e nsmGetNodeState(NsmNodeState_e& nsmNodeState) = 0; + virtual NsmErrorStatus_e nsmGetSessionState(const std::string& sessionName, const NsmSeat_e& seatID, NsmSessionState_e& sessionState) = 0; + virtual NsmErrorStatus_e nsmGetApplicationMode(NsmApplicationMode_e& applicationMode) = 0; + virtual NsmErrorStatus_e nsmRegisterShutdownClient(const uint32_t shutdownMode, const uint32_t timeoutMs) = 0; + virtual NsmErrorStatus_e nsmUnRegisterShutdownClient(const uint32_t shutdownMode) = 0; + virtual am_Error_e nsmGetInterfaceVersion(uint32_t& version) = 0; + virtual NsmErrorStatus_e nsmSendLifecycleRequestComplete(const uint32_t RequestId, const NsmErrorStatus_e status) = 0; + virtual void registerControlSender(CAmControlSender* iControlSender) { + assert(NULL!=iControlSender); + mpControlSender = iControlSender; + } }; -} /* namespace am */ -#endif /* CAMNODESTATECOMMUNICATOR_H_ */ +} + +#endif /* CAMNODESTATECOMMUNICATORBASE_H_ */ diff --git a/AudioManagerDaemon/include/CAmNodeStateCommunicatorCAPI.h b/AudioManagerDaemon/include/CAmNodeStateCommunicatorCAPI.h new file mode 100644 index 0000000..6c063e5 --- /dev/null +++ b/AudioManagerDaemon/include/CAmNodeStateCommunicatorCAPI.h @@ -0,0 +1,101 @@ +/** + * 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 CAmNodeStateCommunicatorCAPI.h + * For further information see http://www.genivi.org/. + * + */ +#ifndef CAMNODESTATECOMMUNICATORCAPI_H_ +#define CAMNODESTATECOMMUNICATORCAPI_H_ + +#include <org/genivi/NodeStateManager/Consumer/ConsumerProxy.h> +#include "CAmNodeStateCommunicator.h" +#include "LifeCycleConsumerStubDefault.h" + +namespace am +{ +using namespace CommonAPI; +using namespace org::genivi::NodeStateManager::Consumer; +using namespace org::genivi::NodeStateManager::LifeCycleConsumer; + + +class CAmCommonAPIWrapper; +/** communicates with the NSM + * The CAmNodeStateCommunicator communicates with the NodeStateManager via Dbus Common-API's wrapping mechanism. Only works, if CAmCommonAPIWrapper is enabled. + */ +class CAmNodeStateCommunicatorCAPI : public CAmNodeStateCommunicator +{ + /* A concrete implementation of the life cycle stub. + * An object from this class is instantiated from the common-api factory. + * It forwards the invocations to its delegate CAmNodeStateCommunicatorCAPI. + */ + class CAmNodeStateCommunicatorServiceImpl : public LifeCycleConsumerStubDefault + { + CAmNodeStateCommunicatorCAPI *mpDelegate; + public: + CAmNodeStateCommunicatorServiceImpl ():mpDelegate(NULL) {} + CAmNodeStateCommunicatorServiceImpl (CAmNodeStateCommunicatorCAPI *aNSCommunicator):mpDelegate(aNSCommunicator) {} + ~CAmNodeStateCommunicatorServiceImpl() { mpDelegate = NULL; } + + CAmNodeStateCommunicatorCAPI *getDelegate() { return mpDelegate; }; + void setDelegate(CAmNodeStateCommunicatorCAPI *aDelegate) { mpDelegate = aDelegate; }; + + void LifecycleRequest(uint32_t Request, uint32_t RequestId, int32_t& ErrorCode) { + if(mpDelegate) + mpDelegate->cbReceivedLifecycleRequest(Request, RequestId, ErrorCode); + } + }; + + CAmCommonAPIWrapper *mpCAPIWrapper; + std::shared_ptr<ConsumerProxy<> > mNSMProxy; + std::shared_ptr<CAmNodeStateCommunicatorCAPI::CAmNodeStateCommunicatorServiceImpl> mNSMStub; +public: + CAmNodeStateCommunicatorCAPI(CAmCommonAPIWrapper* iCAPIWrapper); + virtual ~CAmNodeStateCommunicatorCAPI(); + + am_Error_e nsmGetRestartReasonProperty(NsmRestartReason_e& restartReason) ; + am_Error_e nsmGetShutdownReasonProperty(NsmShutdownReason_e& ShutdownReason) ; + am_Error_e nsmGetRunningReasonProperty(NsmRunningReason_e& nsmRunningReason) ; + NsmErrorStatus_e nsmGetNodeState(NsmNodeState_e& nsmNodeState) ; + NsmErrorStatus_e nsmGetSessionState(const std::string& sessionName, const NsmSeat_e& seatID, NsmSessionState_e& sessionState) ; + NsmErrorStatus_e nsmGetApplicationMode(NsmApplicationMode_e& applicationMode) ; + NsmErrorStatus_e nsmRegisterShutdownClient(const uint32_t shutdownMode, const uint32_t timeoutMs) ; + NsmErrorStatus_e nsmUnRegisterShutdownClient(const uint32_t shutdownMode) ; + am_Error_e nsmGetInterfaceVersion(uint32_t& version) ; + NsmErrorStatus_e nsmSendLifecycleRequestComplete(const uint32_t RequestId, const NsmErrorStatus_e status) ; + + bool isServiceAvailable(); + + static const char * CLIENT_STRING; + static const char * SERVER_STRING; + static const char * OBJECT_NAME; + static const char * BUS_NAME; + +private: + /* Client events */ + void onNodeStateEvent(const int32_t nodeState); + void onNodeApplicationModeEvent(const int32_t nodeApplicationMode); + void onSessionStateChangedEvent(const std::string & sessionName, const int32_t seatID, const int32_t sessionState); + void onServiceStatusEvent(const CommonAPI::AvailabilityStatus& serviceStatus); + /* Service callbacks */ + void cbReceivedLifecycleRequest(uint32_t Request, uint32_t RequestId, int32_t& ErrorCode); +protected: + bool mIsServiceAvailable; +}; + +} +/* namespace am */ +#endif /* CAMNODESTATECOMMUNICATORCAPI_H_ */ diff --git a/AudioManagerDaemon/include/CAmNodeStateCommunicatorDBus.h b/AudioManagerDaemon/include/CAmNodeStateCommunicatorDBus.h new file mode 100644 index 0000000..cb78f0f --- /dev/null +++ b/AudioManagerDaemon/include/CAmNodeStateCommunicatorDBus.h @@ -0,0 +1,63 @@ +/** + * 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 2012 + * + * \file CAmNodeStateCommunicatorDBus.h + * For further information see http://www.genivi.org/. + * + */ +#ifndef CAMNODESTATECOMMUNICATORDBUS_H_ +#define CAMNODESTATECOMMUNICATORDBUS_H_ + +#include "shared/CAmDbusWrapper.h" +#include "CAmNodeStateCommunicator.h" + +namespace am +{ +/** communicates with the NSM + * The CAmNodeStateCommunicator communicates with the NodeStateManager via Dbus. Only works, if CAmDbusWrapper is enabled. + */ + +class CAmNodeStateCommunicatorDBus : public CAmNodeStateCommunicator +{ +public: + CAmNodeStateCommunicatorDBus(CAmDbusWrapper* iDbusWrapper); + virtual ~CAmNodeStateCommunicatorDBus(); + am_Error_e nsmGetRestartReasonProperty(NsmRestartReason_e& restartReason) ; + am_Error_e nsmGetShutdownReasonProperty(NsmShutdownReason_e& ShutdownReason) ; + am_Error_e nsmGetRunningReasonProperty(NsmRunningReason_e& nsmRunningReason) ; + NsmErrorStatus_e nsmGetNodeState(NsmNodeState_e& nsmNodeState) ; + NsmErrorStatus_e nsmGetSessionState(const std::string& sessionName, const NsmSeat_e& seatID, NsmSessionState_e& sessionState) ; + NsmErrorStatus_e nsmGetApplicationMode(NsmApplicationMode_e& applicationMode) ; + NsmErrorStatus_e nsmRegisterShutdownClient(const uint32_t shutdownMode, const uint32_t timeoutMs) ; + NsmErrorStatus_e nsmUnRegisterShutdownClient(const uint32_t shutdownMode) ; + am_Error_e nsmGetInterfaceVersion(uint32_t& version) ; + NsmErrorStatus_e nsmSendLifecycleRequestComplete(const uint32_t RequestId, const NsmErrorStatus_e status) ; + + static DBusHandlerResult receiveCallback(DBusConnection *conn, DBusMessage *msg, void *user_data); + static DBusHandlerResult signalCallback(DBusConnection *conn, DBusMessage *msg, void *user_data); + + +private: + void sendIntrospection(DBusConnection* conn, DBusMessage* msg); + void sendMessage(DBusMessage* message, DBusMessage* origMessage); + DBusHandlerResult receiveCallbackDelegate(DBusConnection *conn, DBusMessage *msg); + am_Error_e readIntegerProperty(const std::string property, int32_t &value); + CAmDbusWrapper* mpDbusWrapper; + DBusConnection* mpDBusConnection; +}; + +} /* namespace am */ +#endif /* CAMNODESTATECOMMUNICATORDBUS_H_ */ diff --git a/AudioManagerDaemon/include/TAmPluginTemplate.h b/AudioManagerDaemon/include/TAmPluginTemplate.h index 2959b04..a421cd1 100644 --- a/AudioManagerDaemon/include/TAmPluginTemplate.h +++ b/AudioManagerDaemon/include/TAmPluginTemplate.h @@ -46,10 +46,9 @@ template<class T> T* getCreateFunction(const std::string& libname, void*& librar // 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); + libraryHandle = dlopen(libname.c_str(), RTLD_LAZY ); const char* dlopen_error = dlerror(); if (!libraryHandle || dlopen_error) { |