diff options
author | christian mueller <christian.ei.mueller@bmw.de> | 2012-02-29 13:27:27 +0100 |
---|---|---|
committer | christian mueller <christian.ei.mueller@bmw.de> | 2012-02-29 13:27:27 +0100 |
commit | d3ccf97331935b181041394b80be20dca282ea71 (patch) | |
tree | f85e7b649c8a6d58c11e9728b2442cdcff53826d /PluginRoutingInterfaceAsync/include | |
parent | aa93713377d28a8ce7821466ef828f79a18e982d (diff) | |
download | audiomanager-d3ccf97331935b181041394b80be20dca282ea71.tar.gz |
* [ performance] for classes that do not need to be derived from, removed virtual desctructor
* implemented confirmation of routing ready in RoutingReceiver
* [Sockethandler] automatically set gDispatchDone to 0 when starting mainloop
* fixed unit text to work with latest changes (expect Dbus command interface)
* [GAM-4] added way to do synchronous calling on interfaces with the help of CAmSerializer.h
* reworked AsyncRoutingPlugin to work with CAmSerializer.h
* reworked AsyncRoutingPlugin to register elemtes in thread using CAmSerializer.h
* reworked AsncPlugin Tests to work with remodelled Plugin
Diffstat (limited to 'PluginRoutingInterfaceAsync/include')
-rw-r--r-- | PluginRoutingInterfaceAsync/include/RoutingReceiverAsyncShadow.h | 121 | ||||
-rw-r--r-- | PluginRoutingInterfaceAsync/include/RoutingSenderAsyn.h | 25 |
2 files changed, 34 insertions, 112 deletions
diff --git a/PluginRoutingInterfaceAsync/include/RoutingReceiverAsyncShadow.h b/PluginRoutingInterfaceAsync/include/RoutingReceiverAsyncShadow.h index ea6da5f..bf5a5ed 100644 --- a/PluginRoutingInterfaceAsync/include/RoutingReceiverAsyncShadow.h +++ b/PluginRoutingInterfaceAsync/include/RoutingReceiverAsyncShadow.h @@ -29,6 +29,7 @@ #include <SocketHandler.h> #include <pthread.h> #include <queue> +#include "CAmSerializer.h" namespace am { @@ -40,7 +41,7 @@ namespace am class RoutingReceiverAsyncShadow { public: - RoutingReceiverAsyncShadow(); + RoutingReceiverAsyncShadow(RoutingReceiveInterface* iReceiveInterface,SocketHandler* iSocketHandler); virtual ~RoutingReceiverAsyncShadow(); 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); @@ -57,120 +58,20 @@ public: 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); - - am_Error_e setRoutingInterface(RoutingReceiveInterface *receiveInterface); - void asyncMsgReceiver(const pollfd pollfd, const sh_pollHandle_t handle, void* userData); - bool asyncDispatcher(const sh_pollHandle_t handle, void* userData); - bool asyncChecker(const sh_pollHandle_t handle, void* userData); - - shPollFired_T<RoutingReceiverAsyncShadow> asyncMsgReceive; - shPollDispatch_T<RoutingReceiverAsyncShadow> asyncDispatch; - shPollCheck_T<RoutingReceiverAsyncShadow> asyncCheck; + am_Error_e registerDomain(const am_Domain_s& domainData, am_domainID_t& domainID) ; + am_Error_e registerGateway(const am_Gateway_s& gatewayData, am_gatewayID_t& gatewayID) ; + 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 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) ; + void confirmRoutingReady(uint16_t starupHandle); private: - enum msgID_e - { - MSG_ACKCONNECT, MSG_ACKDISCONNECT, MSG_ACKSETSINKVOLUMECHANGE, MSG_ACKSETSOURCEVOLUMECHANGE, MSG_ACKSETSOURCESTATE, MSG_ACKSETSINKSOUNDPROPERTY, MSG_ACKSETSOURCESOUNDPROPERTY, MSG_ACKCROSSFADING, MSG_ACKSOURCEVOLUMETICK, MSG_ACKSINKVOLUMETICK, MSG_HOOKINTERRUPTSTATUSCHANGE, MSG_HOOKSINKAVAILABLITYSTATUSCHANGE, MSG_HOOKSOURCEAVAILABLITYSTATUSCHANGE, MSG_HOOKDOMAINSTATECHANGE, MSG_HOOKTIMINGINFORMATIONCHANGED - }; - - struct a_connect_s - { - am_Handle_s handle; - am_connectionID_t connectionID; - am_Error_e error; - }; - - struct a_volume_s - { - am_Handle_s handle; - am_volume_t volume; - am_Error_e error; - }; - - struct a_handle_s - { - am_Handle_s handle; - am_Error_e error; - }; - - struct a_crossfading_s - { - am_Handle_s handle; - am_HotSink_e hotSink; - am_Error_e error; - }; - - struct a_sourceVolumeTick_s - { - am_sourceID_t sourceID; - am_Handle_s handle; - am_volume_t volume; - }; - - struct a_sinkVolumeTick_s - { - am_sinkID_t sinkID; - am_Handle_s handle; - am_volume_t volume; - }; - - struct a_interruptStatusChange_s - { - am_sourceID_t sourceID; - am_InterruptState_e interruptState; - }; - - struct a_sinkAvailability_s - { - am_sinkID_t sinkID; - am_Availability_s availability; - }; - - struct a_sourceAvailability_s - { - am_sourceID_t sourceID; - am_Availability_s availability; - }; - - struct a_hookDomainStateChange_s - { - am_domainID_t domainID; - am_DomainState_e state; - }; - - struct a_timingInfoChanged_s - { - am_connectionID_t connectionID; - am_timeSync_t delay; - }; - - union parameter_u - { - a_connect_s connect; - a_volume_s volume; - a_handle_s handle; - a_crossfading_s crossfading; - a_sourceVolumeTick_s sourceVolumeTick; - a_sinkVolumeTick_s sinkVolumeTick; - a_interruptStatusChange_s interruptStatusChange; - a_sinkAvailability_s sinkAvailability; - a_sourceAvailability_s sourceAvailability; - a_hookDomainStateChange_s domainStateChange; - a_timingInfoChanged_s timingInfoChange; - }; - - struct msg_s - { - msgID_e msgID; - parameter_u parameters; - }; SocketHandler *mSocketHandler; RoutingReceiveInterface *mRoutingReceiveInterface; - std::queue<msg_s> mQueue; - static pthread_mutex_t mMutex; - sh_pollHandle_t mHandle; - int mPipe[2]; + CAmSerializer mSerializer; }; } /* namespace am */ diff --git a/PluginRoutingInterfaceAsync/include/RoutingSenderAsyn.h b/PluginRoutingInterfaceAsync/include/RoutingSenderAsyn.h index dd88be1..96e1b5c 100644 --- a/PluginRoutingInterfaceAsync/include/RoutingSenderAsyn.h +++ b/PluginRoutingInterfaceAsync/include/RoutingSenderAsyn.h @@ -29,6 +29,7 @@ #include <routing/RoutingSendInterface.h> #include "RoutingReceiverAsyncShadow.h" #include <semaphore.h> +#include <memory.h> namespace am { @@ -208,6 +209,12 @@ public: */ void updateDomainstateSafe(am_domainID_t domainID, am_DomainState_e domainState); + void updateDomainListSafe(std::vector<am_Domain_s> listDomains); + + void updateSourceListSafe(std::vector<am_Source_s> listSource); + + void updateSinkListSafe(std::vector<am_Sink_s> listSinks); + private: /** * Extra thread that handles dbus stimulation for interrupt tests @@ -216,12 +223,11 @@ private: * it is used just for testing, not intended to be used otherwise... * @param data */ - static void* InterruptEvents(void* data); std::vector<am_Domain_s> createDomainTable(); std::vector<am_Sink_s> createSinkTable(); std::vector<am_Source_s> createSourceTable(); std::vector<am_Gateway_s> createGatewayTable(); - RoutingReceiverAsyncShadow mShadow; + RoutingReceiverAsyncShadow* mShadow; RoutingReceiveInterface* mReceiveInterface; SocketHandler *mSocketHandler; std::vector<am_Domain_s> mDomains; @@ -372,6 +378,21 @@ private: am_DomainState_e mDomainState; }; +class syncRegisterWorker: public Worker +{ +public: + syncRegisterWorker(AsyncRoutingSender * asyncSender, WorkerThreadPool* pool, RoutingReceiverAsyncShadow* shadow, const std::vector<am_Domain_s> domains, const std::vector<am_Sink_s> sinks, const std::vector<am_Source_s> sources, const uint16_t handle); + void start2work(); + void cancelWork(); +private: + AsyncRoutingSender * mAsyncSender; + RoutingReceiverAsyncShadow *mShadow; + std::vector<am_Domain_s> mListDomains; + std::vector<am_Sink_s> mListSinks; + std::vector<am_Source_s> mListSources; + uint16_t mHandle; +}; + } #endif /* ROUTINGSENDER_H_ */ |