summaryrefslogtreecommitdiff
path: root/PluginCommandInterfaceDbus
diff options
context:
space:
mode:
authorchristian mueller <christian.ei.mueller@bmw.de>2012-02-21 16:21:11 +0100
committerchristian mueller <christian.ei.mueller@bmw.de>2012-02-21 16:21:11 +0100
commite2773d0816b538c241d63054e2850e215ac96f97 (patch)
tree38171a9683de398548ea9d5d11ee60038ae7e5f5 /PluginCommandInterfaceDbus
parent6fe9114b621b97c1f45e3a7db95374c4d99fb924 (diff)
downloadaudiomanager-e2773d0816b538c241d63054e2850e215ac96f97.tar.gz
* [ GAM-1] AudioManager DBusPlugin crashes when Controller registers source/sink class on startup: changed plugin in a way that only messages are sent out when InterfaceReady was called
Diffstat (limited to 'PluginCommandInterfaceDbus')
-rw-r--r--PluginCommandInterfaceDbus/include/DBusCommandSender.h1
-rw-r--r--PluginCommandInterfaceDbus/src/DBusCommandSender.cpp187
2 files changed, 118 insertions, 70 deletions
diff --git a/PluginCommandInterfaceDbus/include/DBusCommandSender.h b/PluginCommandInterfaceDbus/include/DBusCommandSender.h
index 05952f5..dbf6b04 100644
--- a/PluginCommandInterfaceDbus/include/DBusCommandSender.h
+++ b/PluginCommandInterfaceDbus/include/DBusCommandSender.h
@@ -78,6 +78,7 @@ private:
CommandReceiverShadow mCommandReceiverShadow;
DBusWrapper* mDBusWrapper;
CommandReceiveInterface* mCommandReceiveInterface;
+ bool mReady; ///< ! if false, calls shall be ignored.
/**
diff --git a/PluginCommandInterfaceDbus/src/DBusCommandSender.cpp b/PluginCommandInterfaceDbus/src/DBusCommandSender.cpp
index ec53a82..57dc56f 100644
--- a/PluginCommandInterfaceDbus/src/DBusCommandSender.cpp
+++ b/PluginCommandInterfaceDbus/src/DBusCommandSender.cpp
@@ -58,7 +58,8 @@ DbusCommandSender::DbusCommandSender() :
mDBUSMessageHandler(), //
mCommandReceiverShadow(), //
mDBusWrapper(NULL), //
- mCommandReceiveInterface(NULL)
+ mCommandReceiveInterface(NULL), //
+ mReady(false)
{
DLTWrapper::instance()->registerContext(commandDbus, "DBP", "DBus Plugin");
log(&commandDbus, DLT_LOG_INFO, "DbusCommandSender constructor called");
@@ -88,6 +89,7 @@ am_Error_e DbusCommandSender::startupInterface(CommandReceiveInterface* commandr
am_Error_e DbusCommandSender::stopInterface()
{
log(&commandDbus, DLT_LOG_INFO, "stopInterface called");
+ mReady = false;
/**
* todo: finish DbusCommandSender::stopInterface(), what needs to be done?
*/
@@ -97,6 +99,7 @@ am_Error_e DbusCommandSender::stopInterface()
am_Error_e DbusCommandSender::cbCommunicationReady()
{
log(&commandDbus, DLT_LOG_INFO, "cbCommunicationReady called");
+ mReady = true;
/**
* todo: implement DbusCommandSender::cbCommunicationReady()
*/
@@ -106,6 +109,7 @@ am_Error_e DbusCommandSender::cbCommunicationReady()
am_Error_e DbusCommandSender::cbCommunicationRundown()
{
log(&commandDbus, DLT_LOG_INFO, "cbCommunicationRundown called");
+ mReady = false;
/**
* todo: implement DbusCommandSender::cbCommunicationRundown()
*/
@@ -116,8 +120,11 @@ void DbusCommandSender::cbNumberOfMainConnectionsChanged()
{
log(&commandDbus, DLT_LOG_INFO, "cbNumberOfMainConnectionsChanged called");
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("NumberOfMainConnectionsChanged"));
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("NumberOfMainConnectionsChanged"));
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbNumberOfSinksChanged()
@@ -130,23 +137,27 @@ void DbusCommandSender::cbNumberOfSinksChanged()
std::sort(newListSinks.begin(), newListSinks.end(), sortBySinkID());
std::set_symmetric_difference(newListSinks.begin(), newListSinks.end(), mlistSinks.begin(), mlistSinks.end(), std::back_inserter(diffList), sortBySinkID());
assert(diffList.size()==1);
- if (newListSinks.size() > mlistSinks.size())
+ if (mReady)
{
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SinkAdded");
- mDBUSMessageHandler.append(diffList[0]);
-
- log(&commandDbus, DLT_LOG_INFO, "send signal SinkAdded");
+ if (newListSinks.size() > mlistSinks.size())
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SinkAdded");
+ mDBUSMessageHandler.append(diffList[0]);
+
+ log(&commandDbus, DLT_LOG_INFO, "send signal SinkAdded");
+
+ }
+ else
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SinkRemoved");
+ mDBUSMessageHandler.append(diffList.begin()->sinkID);
+
+ log(&commandDbus, DLT_LOG_INFO, "send signal SinkRemoved");
+ }
+ mDBUSMessageHandler.sendMessage();
}
- else
- {
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SinkRemoved");
- mDBUSMessageHandler.append(diffList.begin()->sinkID);
-
- log(&commandDbus, DLT_LOG_INFO, "send signal SinkRemoved");
- }
-
- mDBUSMessageHandler.sendMessage();
mlistSinks = newListSinks;
+
}
void DbusCommandSender::cbNumberOfSourcesChanged()
@@ -159,22 +170,25 @@ void DbusCommandSender::cbNumberOfSourcesChanged()
std::sort(newlistSources.begin(), newlistSources.end(), sortBySourceID());
std::set_symmetric_difference(newlistSources.begin(), newlistSources.end(), mlistSources.begin(), mlistSources.end(), std::back_inserter(diffList), sortBySourceID());
assert(diffList.size()==1);
- if (newlistSources.size() > mlistSources.size())
- {
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SourceAdded");
- mDBUSMessageHandler.append(diffList[0]);
-
- log(&commandDbus, DLT_LOG_INFO, "send signal SourceAdded");
- }
- else
+ if (mReady)
{
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SourceRemoved");
- mDBUSMessageHandler.append((dbus_uint16_t) diffList.begin()->sourceID);
-
- log(&commandDbus, DLT_LOG_INFO, "send signal SourceRemoved");
+ if (newlistSources.size() > mlistSources.size())
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SourceAdded");
+ mDBUSMessageHandler.append(diffList[0]);
+
+ log(&commandDbus, DLT_LOG_INFO, "send signal SourceAdded");
+ }
+ else
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), "SourceRemoved");
+ mDBUSMessageHandler.append((dbus_uint16_t) diffList.begin()->sourceID);
+
+ log(&commandDbus, DLT_LOG_INFO, "send signal SourceRemoved");
+ }
+
+ mDBUSMessageHandler.sendMessage();
}
-
- mDBUSMessageHandler.sendMessage();
mlistSources = newlistSources;
}
@@ -182,105 +196,138 @@ void DbusCommandSender::cbNumberOfSinkClassesChanged()
{
log(&commandDbus, DLT_LOG_INFO, "cbNumberOfSinkClassesChanged called");
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("NumberOfSinkClassesChanged"));
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("NumberOfSinkClassesChanged"));
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbNumberOfSourceClassesChanged()
{
log(&commandDbus, DLT_LOG_INFO, "cbNumberOfSourceClassesChanged called");
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("NumberOfSourceClassesChanged"));
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("NumberOfSourceClassesChanged"));
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbMainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState)
{
log(&commandDbus, DLT_LOG_INFO, "cbMainConnectionStateChanged called, connectionID=", connectionID, "connectionState=", connectionState);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("MainConnectionStateChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) connectionID);
- mDBUSMessageHandler.append((dbus_int16_t) connectionState);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("MainConnectionStateChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) connectionID);
+ mDBUSMessageHandler.append((dbus_int16_t) connectionState);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbMainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s SoundProperty)
{
log(&commandDbus, DLT_LOG_INFO, "cbMainSinkSoundPropertyChanged called, sinkID", sinkID, "SoundProperty.type", SoundProperty.type, "SoundProperty.value", SoundProperty.value);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("MainSinkSoundPropertyChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
- mDBUSMessageHandler.append(SoundProperty);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("MainSinkSoundPropertyChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
+ mDBUSMessageHandler.append(SoundProperty);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbMainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s & SoundProperty)
{
log(&commandDbus, DLT_LOG_INFO, "cbMainSourceSoundPropertyChanged called, sourceID", sourceID, "SoundProperty.type", SoundProperty.type, "SoundProperty.value", SoundProperty.value);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("MainSourceSoundPropertyChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) sourceID);
- mDBUSMessageHandler.append(SoundProperty);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("MainSourceSoundPropertyChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) sourceID);
+ mDBUSMessageHandler.append(SoundProperty);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbSinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s & availability)
{
log(&commandDbus, DLT_LOG_INFO, "cbSinkAvailabilityChanged called, sinkID", sinkID, "availability.availability", availability.availability, "SoundProperty.reason", availability.availabilityReason);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkAvailabilityChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
- mDBUSMessageHandler.append(availability);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkAvailabilityChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
+ mDBUSMessageHandler.append(availability);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbSourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s & availability)
{
log(&commandDbus, DLT_LOG_INFO, "cbSourceAvailabilityChanged called, sourceID", sourceID, "availability.availability", availability.availability, "SoundProperty.reason", availability.availabilityReason);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SourceAvailabilityChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) sourceID);
- mDBUSMessageHandler.append(availability);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SourceAvailabilityChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) sourceID);
+ mDBUSMessageHandler.append(availability);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbVolumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume)
{
log(&commandDbus, DLT_LOG_INFO, "cbVolumeChanged called, sinkID", sinkID, "volume", volume);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("VolumeChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
- mDBUSMessageHandler.append((dbus_int16_t) volume);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("VolumeChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
+ mDBUSMessageHandler.append((dbus_int16_t) volume);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbSinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState)
{
log(&commandDbus, DLT_LOG_INFO, "cbSinkMuteStateChanged called, sinkID", sinkID, "muteState", muteState);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkMuteStateChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
- mDBUSMessageHandler.append((dbus_int16_t) muteState);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkMuteStateChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) sinkID);
+ mDBUSMessageHandler.append((dbus_int16_t) muteState);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void DbusCommandSender::cbSystemPropertyChanged(const am_SystemProperty_s & SystemProperty)
{
log(&commandDbus, DLT_LOG_INFO, "cbSystemPropertyChanged called, SystemProperty.type", SystemProperty.type, "SystemProperty.value", SystemProperty.value);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SystemPropertyChanged"));
- mDBUSMessageHandler.append(SystemProperty);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("SystemPropertyChanged"));
+ mDBUSMessageHandler.append(SystemProperty);
+ mDBUSMessageHandler.sendMessage();
+ }
}
void am::DbusCommandSender::cbTimingInformationChanged(const am_mainConnectionID_t mainConnectionID, const am_timeSync_t time)
{
log(&commandDbus, DLT_LOG_INFO, "cbTimingInformationChanged called, mainConnectionID=", mainConnectionID, "time=", time);
- mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("TimingInformationChanged"));
- mDBUSMessageHandler.append((dbus_uint16_t) mainConnectionID);
- mDBUSMessageHandler.append((dbus_int16_t) time);
- mDBUSMessageHandler.sendMessage();
+ if (mReady)
+ {
+ mDBUSMessageHandler.initSignal(std::string(MY_NODE), std::string("TimingInformationChanged"));
+ mDBUSMessageHandler.append((dbus_uint16_t) mainConnectionID);
+ mDBUSMessageHandler.append((dbus_int16_t) time);
+ mDBUSMessageHandler.sendMessage();
+ }
}
uint16_t DbusCommandSender::getInterfaceVersion() const