2 * Copyright (C) 2011, BMW AG
4 * GeniviAudioMananger DbusPlugin
6 * \file CommandSender.cpp
8 * \date 20-Oct-2011 3:42:04 PM
9 * \author Christian Mueller (christian.ei.mueller@bmw.de)
12 * GNU Lesser General Public License, version 2.1, with special exception (GENIVI clause)
13 * Copyright (C) 2011, BMW AG Christian Mueller Christian.ei.mueller@bmw.de
15 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
16 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License, version 2.1, for more details.
17 * You should have received a copy of the GNU Lesser General Public License, version 2.1, along with this program; if not, see <http://www.gnu.org/licenses/lgpl-2.1.html>.
18 * Note that the copyright holders assume that the GNU Lesser General Public License, version 2.1, may also be applicable to programs even in cases in which the program is not a library in the technical sense.
19 * Linking AudioManager statically or dynamically with other modules is making a combined work based on AudioManager. You may license such other modules under the GNU Lesser General Public License, version 2.1. If you do not want to license your linked modules under the GNU Lesser General Public License, version 2.1, you may use the program under the following exception.
20 * As a special exception, the copyright holders of AudioManager give you permission to combine AudioManager with software programs or libraries that are released under any license unless such a combination is not permitted by the license of such a software program or library. You may copy and distribute such a system following the terms of the GNU Lesser General Public License, version 2.1, including this special exception, for AudioManager and the licenses of the other code concerned.
21 * Note that people who make modified versions of AudioManager are not obligated to grant this special exception for their modified versions; it is their choice whether to do so. The GNU Lesser General Public License, version 2.1, gives permission to release a modified version without this exception; this exception also makes it possible to release a modified version which carries forward this exception.
23 * THIS CODE HAS BEEN GENERATED BY ENTERPRISE ARCHITECT GENIVI MODEL. PLEASE CHANGE ONLY IN ENTERPRISE ARCHITECT AND GENERATE AGAIN
27 #include <command/CommandReceiveInterface.h>
28 #include <dbus/DBusWrapper.h>
29 #include "DBusCommandSender.h"
30 #include "DBusMessageHandler.h"
40 DLT_DECLARE_CONTEXT(DLT_CONTEXT)
41 //DLT_IMPORT_CONTEXT(DLT_CONTEXT);
44 * factory for plugin loading
46 extern "C" CommandSendInterface* PluginCommandInterfaceDbusFactory()
48 return (new DbusCommandSender());
52 * destroy instance of commandSendInterface
54 extern "C" void destroyRoutingPluginInterfaceDbus(CommandSendInterface* commandSendInterface)
56 delete commandSendInterface;
60 DbusCommandSender::DbusCommandSender()
61 : mDBUSMessageHandler(),
62 mCommandReceiverShadow(),
64 mCommandReceiveInterface(NULL)
66 DLT_REGISTER_CONTEXT(DLT_CONTEXT,"DBP","DBus Plugin");
67 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("DbusCommandSender constructed"));
70 DbusCommandSender::~DbusCommandSender()
72 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("DbusCommandSender destructed"));
73 DLT_UNREGISTER_CONTEXT(DLT_CONTEXT);
76 am_Error_e DbusCommandSender::startupInterface(CommandReceiveInterface* commandreceiveinterface)
78 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("startupInterface called"));
80 mCommandReceiveInterface=commandreceiveinterface;
81 mCommandReceiverShadow.setCommandReceiver(mCommandReceiveInterface);
82 mCommandReceiveInterface->getDBusConnectionWrapper(mDBusWrapper);
83 assert(mDBusWrapper!=NULL);
89 am_Error_e DbusCommandSender::stopInterface()
91 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("stopInterface called"));
93 * todo: finish DbusCommandSender::stopInterface(), what needs to be done?
100 am_Error_e DbusCommandSender::cbCommunicationReady()
102 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbCommunicationReady called"));
104 * todo: implement DbusCommandSender::cbCommunicationReady()
111 am_Error_e DbusCommandSender::cbCommunicationRundown()
113 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbCommunicationRundown called"));
115 * todo: implement DbusCommandSender::cbCommunicationRundown()
122 void DbusCommandSender::cbNumberOfMainConnectionsChanged()
124 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbNumberOfMainConnectionsChanged called"));
126 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("NumberOfMainConnectionsChanged"));
127 mDBUSMessageHandler.sendMessage();
132 void DbusCommandSender::cbNumberOfSinksChanged()
134 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbNumberOfSinksChanged called"));
136 std::vector<am_SinkType_s> newListSinks;
137 std::vector<am_SinkType_s> diffList;
138 mCommandReceiveInterface->getListMainSinks(newListSinks);
139 std::sort(newListSinks.begin(),newListSinks.end(),sortBySinkID());
140 std::set_symmetric_difference(newListSinks.begin(),newListSinks.end(),mlistSinks.begin(),mlistSinks.end(),std::back_inserter(diffList), sortBySinkID());
141 assert(diffList.size()==1);
142 if (newListSinks.size()>mlistSinks.size())
144 mDBUSMessageHandler.initSignal(std::string(MY_NODE),"SinkAdded");
145 mDBUSMessageHandler.append(diffList[0]);
147 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("send signal SinkAdded"));
151 mDBUSMessageHandler.initSignal(std::string(MY_NODE),"SinkRemoved");
152 mDBUSMessageHandler.append(diffList.begin()->sinkID);
154 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("send signal SinkRemoved"));
157 mDBUSMessageHandler.sendMessage();
158 mlistSinks=newListSinks;
163 void DbusCommandSender::cbNumberOfSourcesChanged()
165 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbNumberOfSourcesChanged called"));
167 std::vector<am_SourceType_s> newlistSources;
168 std::vector<am_SourceType_s> diffList;
169 mCommandReceiveInterface->getListMainSources(newlistSources);
170 std::sort(newlistSources.begin(),newlistSources.end(),sortBySourceID());
171 std::set_symmetric_difference(newlistSources.begin(),newlistSources.end(),mlistSources.begin(),mlistSources.end(),std::back_inserter(diffList), sortBySourceID());
172 assert(diffList.size()==1);
173 if (newlistSources.size()>mlistSources.size())
175 mDBUSMessageHandler.initSignal(std::string(MY_NODE),"SourceAdded");
176 mDBUSMessageHandler.append(diffList[0]);
178 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("send signal SourceAdded"));
182 mDBUSMessageHandler.initSignal(std::string(MY_NODE),"SourceRemoved");
183 mDBUSMessageHandler.append((dbus_uint16_t)diffList.begin()->sourceID);
185 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("send signal SourceRemoved"));
188 mDBUSMessageHandler.sendMessage();
189 mlistSources=newlistSources;
193 void DbusCommandSender::cbNumberOfSinkClassesChanged()
195 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbNumberOfSinkClassesChanged called"));
197 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("NumberOfSinkClassesChanged"));
198 mDBUSMessageHandler.sendMessage();
203 void DbusCommandSender::cbNumberOfSourceClassesChanged()
205 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbNumberOfSourceClassesChanged called"));
207 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("NumberOfSourceClassesChanged"));
208 mDBUSMessageHandler.sendMessage();
213 void DbusCommandSender::cbMainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState)
215 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbMainConnectionStateChanged called, connectionID"),DLT_INT16(connectionID),DLT_STRING("connectionState"),DLT_INT16(connectionState));
217 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("MainConnectionStateChanged"));
218 mDBUSMessageHandler.append((dbus_uint16_t)connectionID);
219 mDBUSMessageHandler.append((dbus_int16_t)connectionState);
220 mDBUSMessageHandler.sendMessage();
225 void DbusCommandSender::cbMainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s SoundProperty)
227 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbMainSinkSoundPropertyChanged called, sinkID"),DLT_INT16(sinkID),DLT_STRING("SoundProperty.type"),DLT_INT16(SoundProperty.type),DLT_STRING("SoundProperty.value"),DLT_INT16(SoundProperty.value));
229 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("MainSinkSoundPropertyChanged"));
230 mDBUSMessageHandler.append((dbus_uint16_t)sinkID);
231 mDBUSMessageHandler.append(SoundProperty);
232 mDBUSMessageHandler.sendMessage();
237 void DbusCommandSender::cbMainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s & SoundProperty)
239 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbMainSourceSoundPropertyChanged called, sourceID"),DLT_INT16(sourceID),DLT_STRING("SoundProperty.type"),DLT_INT16(SoundProperty.type),DLT_STRING("SoundProperty.value"),DLT_INT16(SoundProperty.value));
241 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("MainSourceSoundPropertyChanged"));
242 mDBUSMessageHandler.append((dbus_uint16_t)sourceID);
243 mDBUSMessageHandler.append(SoundProperty);
244 mDBUSMessageHandler.sendMessage();
249 void DbusCommandSender::cbSinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s & availability)
251 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbSinkAvailabilityChanged called, sinkID"),DLT_INT16(sinkID),DLT_STRING("availability.availability"),DLT_INT16(availability.availability),DLT_STRING("SoundProperty.reason"),DLT_INT16(availability.availabilityReason));
253 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("SinkAvailabilityChanged"));
254 mDBUSMessageHandler.append((dbus_uint16_t)sinkID);
255 mDBUSMessageHandler.append(availability);
256 mDBUSMessageHandler.sendMessage();
261 void DbusCommandSender::cbSourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s & availability)
263 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbSourceAvailabilityChanged called, sourceID"),DLT_INT16(sourceID),DLT_STRING("availability.availability"),DLT_INT16(availability.availability),DLT_STRING("SoundProperty.reason"),DLT_INT16(availability.availabilityReason));
265 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("SourceAvailabilityChanged"));
266 mDBUSMessageHandler.append((dbus_uint16_t)sourceID);
267 mDBUSMessageHandler.append(availability);
268 mDBUSMessageHandler.sendMessage();
273 void DbusCommandSender::cbVolumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume)
275 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbVolumeChanged called, sinkID"),DLT_INT16(sinkID),DLT_STRING("volume"),DLT_INT16(volume));
277 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("VolumeChanged"));
278 mDBUSMessageHandler.append((dbus_uint16_t)sinkID);
279 mDBUSMessageHandler.append((dbus_int16_t)volume);
280 mDBUSMessageHandler.sendMessage();
285 void DbusCommandSender::cbSinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState)
287 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbSinkMuteStateChanged called, sinkID"),DLT_INT16(sinkID),DLT_STRING("muteState"),DLT_INT16(muteState));
289 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("SinkMuteStateChanged"));
290 mDBUSMessageHandler.append((dbus_uint16_t)sinkID);
291 mDBUSMessageHandler.append((dbus_int16_t)muteState);
292 mDBUSMessageHandler.sendMessage();
297 void DbusCommandSender::cbSystemPropertyChanged(const am_SystemProperty_s & SystemProperty)
299 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbSystemPropertyChanged called, SystemProperty.type"),DLT_INT16(SystemProperty.type),DLT_STRING("SystemProperty.value"),DLT_INT16(SystemProperty.value));
301 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("SystemPropertyChanged"));
302 mDBUSMessageHandler.append(SystemProperty);
303 mDBUSMessageHandler.sendMessage();
308 void DbusCommandSender::cbTimingInformationChanged(const am_mainConnectionID_t mainConnection, const am_timeSync_t time)
310 DLT_LOG(DLT_CONTEXT,DLT_LOG_INFO, DLT_STRING("cbTimingInformationChanged called, mainConnectionID"),DLT_INT16(mainConnection),DLT_STRING("time"),DLT_INT16(time));
312 mDBUSMessageHandler.initSignal(std::string(MY_NODE),std::string("TimingInformationChanged"));
313 mDBUSMessageHandler.append((dbus_uint16_t)mainConnection);
314 mDBUSMessageHandler.append((dbus_int16_t)time);
315 mDBUSMessageHandler.sendMessage();