diff options
Diffstat (limited to 'PluginCommandInterfaceDbus/src')
3 files changed, 249 insertions, 2 deletions
diff --git a/PluginCommandInterfaceDbus/src/CAmCommandSenderDbus.cpp b/PluginCommandInterfaceDbus/src/CAmCommandSenderDbus.cpp index 05b829b..3705c0d 100644 --- a/PluginCommandInterfaceDbus/src/CAmCommandSenderDbus.cpp +++ b/PluginCommandInterfaceDbus/src/CAmCommandSenderDbus.cpp @@ -82,14 +82,14 @@ void CAmCommandSenderDbus::setCommandReady(const uint16_t handle) //todo:implement handle handling log(&commandDbus, DLT_LOG_INFO, "cbCommunicationReady called"); mReady = true; - mpIAmCommandReceive->confirmCommandReady(handle); + mpIAmCommandReceive->confirmCommandReady(handle,E_OK); } void CAmCommandSenderDbus::setCommandRundown(const uint16_t handle) { log(&commandDbus, DLT_LOG_INFO, "cbCommunicationRundown called"); mReady = false; - mpIAmCommandReceive->confirmCommandRundown(handle); + mpIAmCommandReceive->confirmCommandRundown(handle,E_OK); /** * todo: implement DbusCommandSender::cbCommunicationRundown() */ @@ -320,3 +320,82 @@ void CAmCommandSenderDbus::getInterfaceVersion(std::string & version) const version = CommandSendVersion; } +void am::CAmCommandSenderDbus::cbSinkUpdated(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) +{ + log(&commandDbus, DLT_LOG_INFO, "cbSinkUpdated called, sinkID", sinkID); + + if (mReady) + { + mCAmDbusMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkUpdated")); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sinkID)); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sinkClassID)); + mCAmDbusMessageHandler.append(listMainSoundProperties); + mCAmDbusMessageHandler.sendMessage(); + } +} + +void am::CAmCommandSenderDbus::cbSourceUpdated(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties) +{ + log(&commandDbus, DLT_LOG_INFO, "cbSourceUpdated called, sourceID", sourceID); + + if (mReady) + { + mCAmDbusMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkUpdated")); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sourceID)); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sourceClassID)); + mCAmDbusMessageHandler.append(listMainSoundProperties); + mCAmDbusMessageHandler.sendMessage(); + } +} + +void am::CAmCommandSenderDbus::cbSinkNotification(const am_sinkID_t sinkID, const am_NotificationPayload_s notification) +{ + log(&commandDbus, DLT_LOG_INFO, "cbSinkNotification called, sinkID", sinkID); + + if (mReady) + { + mCAmDbusMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkNotification")); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sinkID)); + mCAmDbusMessageHandler.append(notification); + mCAmDbusMessageHandler.sendMessage(); + } +} + +void am::CAmCommandSenderDbus::cbSourceNotification(const am_sourceID_t sourceID, const am_NotificationPayload_s notification) +{ + log(&commandDbus, DLT_LOG_INFO, "cbSourceNotification called, sourceID", sourceID); + + if (mReady) + { + mCAmDbusMessageHandler.initSignal(std::string(MY_NODE), std::string("SourceNotification")); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sourceID)); + mCAmDbusMessageHandler.append(notification); + mCAmDbusMessageHandler.sendMessage(); + } +} + +void am::CAmCommandSenderDbus::cbSinkMainNotificationConfigurationChanged(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration) +{ + log(&commandDbus, DLT_LOG_INFO, "cbSinkMainNotificationConfigurationChanged called, sinkID", sinkID); + + if (mReady) + { + mCAmDbusMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkMainNotificationConfigurationChanged")); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sinkID)); + mCAmDbusMessageHandler.append(mainNotificationConfiguration); + mCAmDbusMessageHandler.sendMessage(); + } +} + +void am::CAmCommandSenderDbus::cbSourceMainNotificationConfigurationChanged(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration) +{ + log(&commandDbus, DLT_LOG_INFO, "cbSourceMainNotificationConfigurationChanged called, sourceID", sourceID); + + if (mReady) + { + mCAmDbusMessageHandler.initSignal(std::string(MY_NODE), std::string("SinkMainNotificationConfigurationChanged")); + mCAmDbusMessageHandler.append(static_cast<dbus_uint16_t>(sourceID)); + mCAmDbusMessageHandler.append(mainNotificationConfiguration); + mCAmDbusMessageHandler.sendMessage(); + } +} diff --git a/PluginCommandInterfaceDbus/src/CAmDbusMessageHandler.cpp b/PluginCommandInterfaceDbus/src/CAmDbusMessageHandler.cpp index f7cf4d6..55169b2 100644 --- a/PluginCommandInterfaceDbus/src/CAmDbusMessageHandler.cpp +++ b/PluginCommandInterfaceDbus/src/CAmDbusMessageHandler.cpp @@ -622,4 +622,87 @@ void CAmDbusMessageHandler::append(const std::vector<am::am_SystemProperty_s> & mErrorMsg = "Cannot create reply!"; } } + +void CAmDbusMessageHandler::getNotificationConfiguration(dbus_int16_t& notificationType, dbus_int16_t& notificationStatus, dbus_int16_t& notificationParameter) +{ + DBusMessageIter arrayIter; + if (DBUS_TYPE_STRUCT != dbus_message_iter_get_arg_type(&mDBusMessageIter)) + { + log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getProperty DBUS handler argument is no array!"); + mErrorName = std::string(DBUS_ERROR_INVALID_ARGS); + mErrorMsg = "DBus argument is no array"; + } + else + { + dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter); + dbus_message_iter_get_basic(&arrayIter, ¬ificationType); + dbus_message_iter_next(&arrayIter); + dbus_message_iter_get_basic(&arrayIter, ¬ificationStatus); + dbus_message_iter_next(&arrayIter); + dbus_message_iter_get_basic(&arrayIter, ¬ificationParameter); + dbus_message_iter_next(&mDBusMessageIter); + } +} + +void CAmDbusMessageHandler::append(const std::vector<am::am_NotificationConfiguration_s>& listNotifications) +{ + DBusMessageIter arrayIter; + DBusMessageIter structIter; + std::vector<am::am_NotificationConfiguration_s>::const_iterator listIterator = listNotifications.begin(); + dbus_bool_t success = true; + + success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(nnn)", &arrayIter); + for (; listIterator < listNotifications.end(); ++listIterator) + { + success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->notificationType); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->notificationStatus); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->notificationParameter); + success = success && dbus_message_iter_close_container(&arrayIter, &structIter); + } + success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter); + + if (!success) + { + log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!"); + mErrorName = std::string(DBUS_ERROR_NO_MEMORY); + mErrorMsg = "Cannot create reply!"; + } +} + +void CAmDbusMessageHandler::append(const am::am_NotificationPayload_s& notificationPayload) +{ + DBusMessageIter structIter; + dbus_bool_t success = true; + success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_STRUCT, NULL, &structIter); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, ¬ificationPayload.notificationType); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, ¬ificationPayload.notificationValue); + success = success && dbus_message_iter_close_container(&mDBusMessageIter, &structIter); + + if (!success) + { + log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!"); + mErrorName = std::string(DBUS_ERROR_NO_MEMORY); + mErrorMsg = "Cannot create reply!"; + } +} + +void CAmDbusMessageHandler::append(const am::am_NotificationConfiguration_s& notificationConfiguration) +{ + DBusMessageIter structIter; + dbus_bool_t success = true; + success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_STRUCT, NULL, &structIter); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, ¬ificationConfiguration.notificationType); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, ¬ificationConfiguration.notificationStatus); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, ¬ificationConfiguration.notificationParameter); + success = success && dbus_message_iter_close_container(&mDBusMessageIter, &structIter); + + if (!success) + { + log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!"); + mErrorName = std::string(DBUS_ERROR_NO_MEMORY); + mErrorMsg = "Cannot create reply!"; + } +} + } diff --git a/PluginCommandInterfaceDbus/src/IAmCommandReceiverShadow.cpp b/PluginCommandInterfaceDbus/src/IAmCommandReceiverShadow.cpp index 7322b99..42a669d 100644 --- a/PluginCommandInterfaceDbus/src/IAmCommandReceiverShadow.cpp +++ b/PluginCommandInterfaceDbus/src/IAmCommandReceiverShadow.cpp @@ -416,6 +416,87 @@ void IAmCommandReceiverShadow::setCommandReceiver(IAmCommandReceive*& receiver) mpCAmDbusWrapper->registerCallback(&gObjectPathVTable, path, this); } +void am::IAmCommandReceiverShadow::getListSinkMainNotificationConfigurations(DBusConnection* conn, DBusMessage* msg) +{ + log(&commandDbus, DLT_LOG_INFO, "CommandReceiverShadow::getListSinkMainNotificationConfigurations called"); + + (void) conn; + assert(mpIAmCommandReceive!=NULL); + + mDBUSMessageHandler.initReceive(msg); + am_sinkID_t sinkID = static_cast<am_sinkID_t>(mDBUSMessageHandler.getUInt()); + std::vector<am_NotificationConfiguration_s> listNotificationConfigurations; + am_Error_e returnCode = mpIAmCommandReceive->getListSinkMainNotificationConfigurations(sinkID,listNotificationConfigurations); + mDBUSMessageHandler.initReply(msg); + mDBUSMessageHandler.append((dbus_int16_t) returnCode); + mDBUSMessageHandler.append(listNotificationConfigurations); + mDBUSMessageHandler.sendMessage(); +} + +void am::IAmCommandReceiverShadow::getListSourceMainNotificationConfigurations(DBusConnection* conn, DBusMessage* msg) +{ + log(&commandDbus, DLT_LOG_INFO, "CommandReceiverShadow::getListSourceMainNotificationConfigurations called"); + + (void) conn; + assert(mpIAmCommandReceive!=NULL); + + mDBUSMessageHandler.initReceive(msg); + am_sourceID_t sourceID = static_cast<am_sourceID_t>(mDBUSMessageHandler.getUInt()); + std::vector<am_NotificationConfiguration_s> listNotificationConfigurations; + am_Error_e returnCode = mpIAmCommandReceive->getListSourceMainNotificationConfigurations(sourceID,listNotificationConfigurations); + mDBUSMessageHandler.initReply(msg); + mDBUSMessageHandler.append((dbus_int16_t) returnCode); + mDBUSMessageHandler.append(listNotificationConfigurations); + mDBUSMessageHandler.sendMessage(); + +} + +void am::IAmCommandReceiverShadow::setSinkMainNotificationConfiguration(DBusConnection* conn, DBusMessage* msg) +{ + log(&commandDbus, DLT_LOG_INFO, "CommandReceiverShadow::setSinkMainNotificationConfiguration called"); + + (void) conn; + assert(mpIAmCommandReceive!=NULL); + + mDBUSMessageHandler.initReceive(msg); + am_sinkID_t sinkID = (am_sinkID_t) mDBUSMessageHandler.getUInt(); + dbus_int16_t type = 0; + dbus_int16_t status = 0; + dbus_int16_t parameter = 0; + mDBUSMessageHandler.getNotificationConfiguration(type, status, parameter); + am_NotificationConfiguration_s mainNotificationConfiguration; + mainNotificationConfiguration.notificationType = static_cast<am_NotificationType_e> (type); + mainNotificationConfiguration.notificationStatus = static_cast<am_NotificationStatus_e> (status); + mainNotificationConfiguration.notificationParameter = static_cast<int16_t>(parameter); + am_Error_e returnCode = mpIAmCommandReceive->setSinkMainNotificationConfiguration(sinkID,mainNotificationConfiguration); + mDBUSMessageHandler.initReply(msg); + mDBUSMessageHandler.append((dbus_int16_t) returnCode); + mDBUSMessageHandler.sendMessage(); +} + +void am::IAmCommandReceiverShadow::setSourceMainNotificationConfiguration(DBusConnection* conn, DBusMessage* msg) +{ + log(&commandDbus, DLT_LOG_INFO, "CommandReceiverShadow::setSourceMainNotificationConfiguration called"); + + (void) conn; + assert(mpIAmCommandReceive!=NULL); + + mDBUSMessageHandler.initReceive(msg); + am_sourceID_t sourceID = (am_sourceID_t) mDBUSMessageHandler.getUInt(); + dbus_int16_t type = 0; + dbus_int16_t status = 0; + dbus_int16_t parameter = 0; + mDBUSMessageHandler.getNotificationConfiguration(type, status, parameter); + am_NotificationConfiguration_s mainNotificationConfiguration; + mainNotificationConfiguration.notificationType = static_cast<am_NotificationType_e> (type); + mainNotificationConfiguration.notificationStatus = static_cast<am_NotificationStatus_e> (status); + mainNotificationConfiguration.notificationParameter = static_cast<int16_t>(parameter); + am_Error_e returnCode = mpIAmCommandReceive->setSourceMainNotificationConfiguration(sourceID,mainNotificationConfiguration); + mDBUSMessageHandler.initReply(msg); + mDBUSMessageHandler.append((dbus_int16_t) returnCode); + mDBUSMessageHandler.sendMessage(); +} + IAmCommandReceiverShadow::functionMap_t IAmCommandReceiverShadow::createMap() { functionMap_t m; @@ -436,6 +517,10 @@ IAmCommandReceiverShadow::functionMap_t IAmCommandReceiverShadow::createMap() m["GetListSystemProperties"] = &IAmCommandReceiverShadow::getListSystemProperties; m["GetTimingInformation"] = &IAmCommandReceiverShadow::getTimingInformation; m["SetSystemProperty"] = &IAmCommandReceiverShadow::setSystemProperty; + m["getListSinkMainNotificationConfigurations"] = &IAmCommandReceiverShadow::getListSinkMainNotificationConfigurations; + m["getListSourceMainNotificationConfigurations"] = &IAmCommandReceiverShadow::getListSourceMainNotificationConfigurations; + m["setSinkMainNotificationConfiguration"] = &IAmCommandReceiverShadow::setSinkMainNotificationConfiguration; + m["setSourceMainNotificationConfiguration"] = & IAmCommandReceiverShadow::setSourceMainNotificationConfiguration; return (m); } |