summaryrefslogtreecommitdiff
path: root/PluginRoutingInterfaceAsync/include
diff options
context:
space:
mode:
authorchristian mueller <christian.ei.mueller@bmw.de>2012-02-29 13:27:27 +0100
committerchristian mueller <christian.ei.mueller@bmw.de>2012-02-29 13:27:27 +0100
commitd3ccf97331935b181041394b80be20dca282ea71 (patch)
treef85e7b649c8a6d58c11e9728b2442cdcff53826d /PluginRoutingInterfaceAsync/include
parentaa93713377d28a8ce7821466ef828f79a18e982d (diff)
downloadaudiomanager-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.h121
-rw-r--r--PluginRoutingInterfaceAsync/include/RoutingSenderAsyn.h25
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_ */