2 * Copyright (C) 2012, BMW AG
4 * This file is part of GENIVI Project AudioManager.
6 * Contributions are licensed to the GENIVI Alliance under one or more
7 * Contribution License Agreements.
10 * This Source Code Form is subject to the terms of the
11 * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
12 * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
15 * \author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012
17 * \file CAmDatabaseObserver.cpp
18 * For further information see http://www.genivi.org/.
22 #include "CAmDatabaseObserver.h"
26 #include <sys/socket.h>
27 #include <sys/ioctl.h>
28 #include "CAmCommandSender.h"
29 #include "CAmRoutingSender.h"
30 #include "CAmTelnetServer.h"
31 #include "shared/CAmDltWrapper.h"
32 #include "shared/CAmSerializer.h"
36 CAmDatabaseObserver::CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler) :
37 mCommandSender(iCommandSender), //
38 mRoutingSender(iRoutingSender), //
39 mTelnetServer(NULL), //
40 mSerializer(iSocketHandler) //
42 assert(mCommandSender!=0);
43 assert(mRoutingSender!=0);
44 assert(iSocketHandler!=0);
47 CAmDatabaseObserver::CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler, CAmTelnetServer *iTelnetServer) :
48 mCommandSender(iCommandSender), //
49 mRoutingSender(iRoutingSender), //
50 mTelnetServer(iTelnetServer), //
51 mSerializer(iSocketHandler) //
53 assert(mTelnetServer!=0);
54 assert(mCommandSender!=0);
55 assert(mRoutingSender!=0);
56 assert(iSocketHandler!=0);
59 CAmDatabaseObserver::~CAmDatabaseObserver()
63 void CAmDatabaseObserver::newMainConnection(const am_MainConnectionType_s& mainConnection)
65 mSerializer.asyncCall<CAmCommandSender, const am_MainConnectionType_s>(mCommandSender, &CAmCommandSender::cbNewMainConnection, mainConnection);
68 void CAmDatabaseObserver::removedMainConnection(const am_mainConnectionID_t mainConnection)
70 mSerializer.asyncCall<CAmCommandSender, const am_mainConnectionID_t>(mCommandSender, &CAmCommandSender::cbRemovedMainConnection, mainConnection);
73 void CAmDatabaseObserver::newSink(const am_Sink_s& sink)
75 mRoutingSender->addSinkLookup(sink);
79 s.availability = sink.available;
80 s.muteState = sink.muteState;
82 s.sinkClassID = sink.sinkClassID;
83 s.sinkID = sink.sinkID;
84 s.volume = sink.mainVolume;
85 mSerializer.asyncCall<CAmCommandSender, const am_SinkType_s>(mCommandSender, &CAmCommandSender::cbNewSink, s);
89 void CAmDatabaseObserver::newSource(const am_Source_s& source)
91 mRoutingSender->addSourceLookup(source);
95 s.availability = source.available;
97 s.sourceClassID = source.sourceClassID;
98 s.sourceID = source.sourceID;
99 mSerializer.asyncCall<CAmCommandSender, const am_SourceType_s>(mCommandSender, &CAmCommandSender::cbNewSource, s);
103 void CAmDatabaseObserver::newDomain(const am_Domain_s& domain)
105 mRoutingSender->addDomainLookup(domain);
108 void CAmDatabaseObserver::newGateway(const am_Gateway_s& gateway)
111 //todo: implement something
114 void CAmDatabaseObserver::newCrossfader(const am_Crossfader_s& crossfader)
116 mRoutingSender->addCrossfaderLookup(crossfader);
119 void CAmDatabaseObserver::removedSink(const am_sinkID_t sinkID, const bool visible)
121 mRoutingSender->removeSinkLookup(sinkID);
124 mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t>(mCommandSender, &CAmCommandSender::cbRemovedSink, sinkID);
127 void CAmDatabaseObserver::removedSource(const am_sourceID_t sourceID, const bool visible)
129 mRoutingSender->removeSourceLookup(sourceID);
132 mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t>(mCommandSender, &CAmCommandSender::cbRemovedSource, sourceID);
135 void CAmDatabaseObserver::removeDomain(const am_domainID_t domainID)
137 mRoutingSender->removeDomainLookup(domainID);
140 void CAmDatabaseObserver::removeGateway(const am_gatewayID_t gatewayID)
143 //todo: implement something?
146 void CAmDatabaseObserver::removeCrossfader(const am_crossfaderID_t crossfaderID)
148 mRoutingSender->removeCrossfaderLookup(crossfaderID);
151 void CAmDatabaseObserver::numberOfSinkClassesChanged()
153 mSerializer.asyncCall<CAmCommandSender>(mCommandSender, &CAmCommandSender::cbNumberOfSinkClassesChanged);
156 void CAmDatabaseObserver::numberOfSourceClassesChanged()
158 mSerializer.asyncCall<CAmCommandSender>(mCommandSender, &CAmCommandSender::cbNumberOfSourceClassesChanged);
161 void CAmDatabaseObserver::mainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState)
163 mSerializer.asyncCall<CAmCommandSender, const am_connectionID_t, const am_ConnectionState_e>(mCommandSender, &CAmCommandSender::cbMainConnectionStateChanged, connectionID, connectionState);
166 void CAmDatabaseObserver::mainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s& SoundProperty)
168 mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_MainSoundProperty_s&>(mCommandSender, &CAmCommandSender::cbMainSinkSoundPropertyChanged, sinkID, SoundProperty);
171 void CAmDatabaseObserver::mainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s & SoundProperty)
173 mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_MainSoundProperty_s&>(mCommandSender, &CAmCommandSender::cbMainSourceSoundPropertyChanged, sourceID, SoundProperty);
176 void CAmDatabaseObserver::sinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s & availability)
178 mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_Availability_s&>(mCommandSender, &CAmCommandSender::cbSinkAvailabilityChanged, sinkID, availability);
181 void CAmDatabaseObserver::sourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s & availability)
183 mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_Availability_s&>(mCommandSender, &CAmCommandSender::cbSourceAvailabilityChanged, sourceID, availability);
186 void CAmDatabaseObserver::volumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume)
188 mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_mainVolume_t>(mCommandSender, &CAmCommandSender::cbVolumeChanged, sinkID, volume);
191 void CAmDatabaseObserver::sinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState)
193 mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_MuteState_e>(mCommandSender, &CAmCommandSender::cbSinkMuteStateChanged, sinkID, muteState);
196 void CAmDatabaseObserver::systemPropertyChanged(const am_SystemProperty_s& SystemProperty)
198 mSerializer.asyncCall<CAmCommandSender, const am_SystemProperty_s&>(mCommandSender, &CAmCommandSender::cbSystemPropertyChanged, SystemProperty);
201 void CAmDatabaseObserver::timingInformationChanged(const am_mainConnectionID_t mainConnection, const am_timeSync_t time)
203 mSerializer.asyncCall<CAmCommandSender, const am_mainConnectionID_t, const am_timeSync_t>(mCommandSender, &CAmCommandSender::cbTimingInformationChanged, mainConnection, time);