diff options
Diffstat (limited to 'exampleCode/player/dbushandler.cpp')
-rw-r--r-- | exampleCode/player/dbushandler.cpp | 742 |
1 files changed, 742 insertions, 0 deletions
diff --git a/exampleCode/player/dbushandler.cpp b/exampleCode/player/dbushandler.cpp new file mode 100644 index 0000000..c449d93 --- /dev/null +++ b/exampleCode/player/dbushandler.cpp @@ -0,0 +1,742 @@ +/** + * Copyright (C) 2012, BMW AG + * + * + * \copyright + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, version 2 + * of the License. + + * 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 General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * + * \author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012 + * + * + */ +#include "dbushandler.h" +#include <stdio.h> +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <dbus/dbus.h> +#include <glib.h> +#include <stdint.h> +#include <dbus/dbus-glib.h> +#include <dbus/dbus-glib-lowlevel.h> +#include <pthread.h> + +DBusMessage* DbusHandler::msg; +DBusMessageIter DbusHandler::args; +DBusConnection* DbusHandler::conn; +DBusError DbusHandler::err; +DBusPendingCall* DbusHandler::pending; +gboolean DbusHandler:: ret; +dbus_uint16_t DbusHandler::result; +GMainLoop* DbusHandler::mainloop; + +DbusHandler::DbusHandler() +{ + dbus_error_init(&err); + conn = dbus_bus_get(DBUS_BUS_SESSION, &err); + if (!conn) + printf("did not get connection error %s", err.message); + pthread_t thread1; + int threadid; + threadid = pthread_create(&thread1,NULL,DbusHandler::Initialize,(void*)this); +} + + DBusHandlerResult DbusHandler::signal_filter(DBusConnection *c, DBusMessage *message, void *user_data) +{ + fprintf(stderr,"entered into signal_filter\n"); + + // s_userdata * tempUserdata=static_cast<s_userdata *>(user_data); + // GMainLoop *loop = tempUserdata->Tempmainloop; + DbusHandler * tempHandler=static_cast<DbusHandler *>(user_data); + DBusMessageIter args,args1; + dbus_uint16_t sink; + + + fprintf(stderr,"received: member %s\n",dbus_message_get_member(message)); + + if (dbus_message_is_signal(message, "org.genivi.audiomanager", "VolumeChanged")) + { + dbus_int16_t Vol; + fprintf(stderr,"Message customized received\n"); + if (!dbus_message_iter_init(message, &args)) + fprintf(stderr, "VolumeChanged :Message Has No Parameters\n"); + else + dbus_message_iter_get_basic(&args, &sink); + if (!dbus_message_iter_next(&args)) + fprintf(stderr, "VolumeChanged :Message has too few arguments!\n"); + else + dbus_message_iter_get_basic(&args, &Vol); + emit tempHandler->Volumechanged(sink,Vol); + fprintf(stderr,"Got Signal with value %d ,%d\n", sink, Vol); + return DBUS_HANDLER_RESULT_HANDLED; + } + + if (dbus_message_is_signal(message, "org.genivi.audiomanager", "NumberOfMainConnectionsChanged")) + { + + fprintf(stderr,"Message customized received\n"); + emit tempHandler->NumberOfConnectionsChanged(); + return DBUS_HANDLER_RESULT_HANDLED; + } + if (dbus_message_is_signal(message, "org.genivi.audiomanager", "MainConnectionStateChanged")) + { + + fprintf(stderr,"Message customized received\n"); + emit tempHandler->NumberOfConnectionsChanged(); + return DBUS_HANDLER_RESULT_HANDLED; + } + + if (dbus_message_is_signal(message, "org.genivi.audiomanager", "SinkMuteStateChanged")) + {dbus_int16_t mutestate; + fprintf(stderr,"Message customized received\n"); + if (!dbus_message_iter_init(message, &args)) + fprintf(stderr, "SinkMuteStateChanged :Message Has No Parameters\n"); + else + dbus_message_iter_get_basic(&args, &sink); + if (!dbus_message_iter_next(&args)) + fprintf(stderr, "SinkMuteStateChanged :Message has too few arguments!\n"); + else{ + dbus_message_iter_get_basic(&args, &mutestate); + + emit tempHandler->Mutestatechanged(sink,static_cast<am_MuteState_e>(mutestate)); + } + return DBUS_HANDLER_RESULT_HANDLED; + } + if (dbus_message_is_signal(message, "org.genivi.audiomanager", "MainSinkSoundPropertyChanged")) + {dbus_int16_t type,value; + if (!dbus_message_iter_init(message, &args)) + fprintf(stderr, "SoundProperychanged :Message Has No Parameters\n"); + else + dbus_message_iter_get_basic(&args, &sink); + if (!dbus_message_iter_next(&args)) + fprintf(stderr, "SoundProperychanged :Message has too few arguments!\n"); + else + if (DBUS_TYPE_STRUCT == dbus_message_iter_get_arg_type(&args)) + { + + dbus_message_iter_recurse(&args, &args1); + dbus_message_iter_get_basic(&args1, &type); + fprintf(stderr, "type :%d\n",type); + dbus_message_iter_next(&args1); + dbus_message_iter_get_basic(&args1, &value); + fprintf(stderr, "value :%d\n",value); + } + fprintf(stderr,"Message customized received\n"); + am_MainSoundProperty_s tempsoundproperty; + tempsoundproperty.type=static_cast<am_MainSoundPropertyType_e>(type); + tempsoundproperty.value=value; + emit tempHandler->SoundpropertyChanged(sink,tempsoundproperty); + return DBUS_HANDLER_RESULT_HANDLED; + } + + + const char* interface = dbus_message_get_interface(message); + const char* member = dbus_message_get_member(message); + const char* path = dbus_message_get_path(message); + fprintf(stderr,"path %s\n",path); + + if (strcmp(member,"asyncSetSourceState")==0) + { + uint16_t sourceID=0, handle=0; + int16_t state=0; + if (!dbus_message_iter_init(message, &args)) + fprintf(stderr, "asyncSetSourceState :Message Has No Parameters\n"); + else + dbus_message_iter_get_basic(&args, &handle); + if (!dbus_message_iter_next(&args)) + fprintf(stderr, "asyncSetSourceState :Message has too few arguments!\n"); + else + dbus_message_iter_get_basic(&args, &sourceID); + if (!dbus_message_iter_next(&args)) + fprintf(stderr, "asyncSetSourceState :Message has too few arguments!\n"); + else + dbus_message_iter_get_basic(&args, &state); + + emit tempHandler->SourceActivity(static_cast<am_sourceID_t>(sourceID),static_cast<am_SourceState_e>(state)); + } + return DBUS_HANDLER_RESULT_HANDLED; + } + +void* DbusHandler::Initialize(void * userdata) +{ + // DbusHandler * abc =static_cast<DbusHandler *>(userdata); + static DBusObjectPathVTable vtable_root; + vtable_root.message_function = signal_filter; + mainloop = g_main_loop_new(NULL, FALSE); + dbus_connection_setup_with_g_main (conn, NULL); + dbus_bus_add_match(conn, "type='signal',interface='org.genivi.audiomanager'", &err); + dbus_bus_add_match(conn, "sender='org.genivi.audiomanager',member='asyncSetSourceState'", &err); + if (dbus_error_is_set(&err)) + { + printf("Match Error (%s)\n", err.message); + exit(1); + } + + ret = dbus_connection_add_filter(conn,signal_filter,userdata, NULL); + if (!ret) + { + fprintf(stderr,"dbus_connection_add_filter failed"); + } + + dbus_connection_flush(conn); + if (dbus_error_is_set(&err)) + { + printf("Problem to flush (%s)\n", err.message); + exit(1); + } + + fprintf(stderr,"Match rule sent\n"); + + g_main_loop_run (mainloop); +} +//------------------------------------------------------------------------- +int DbusHandler::Sender() +{ + if (NULL == msg) + { + fprintf(stderr, "Message Null\n"); + exit(1); + } + //sleep(1); + + if (!dbus_connection_send_with_reply(conn, msg, &pending, -1)) + { + fprintf(stderr, "Sender: Out Of Memory!\n"); + exit(1); + } + if (NULL == pending) + { + fprintf(stderr, "Pending Call Null\n"); + exit(1); + } + dbus_connection_flush(conn); + printf("Request Sent\n"); + + dbus_message_unref(msg); + + dbus_pending_call_block(pending); + + msg = dbus_pending_call_steal_reply(pending); + if (NULL == msg) + { + fprintf(stderr, "Reply Null\n"); + exit(1); + } + return 0; +} +//--------------------------------------------------------------------- +int DbusHandler::Sender_forlists() +{ + if (NULL == msg) + { + fprintf(stderr, "Message Null\n"); + exit(1); + } + sleep(1); + + if (!dbus_connection_send_with_reply(conn, msg, &pending, -1)) + { + fprintf(stderr, "Sender: Out Of Memory!\n"); + exit(1); + } + if (NULL == pending) + { + fprintf(stderr, "Pending Call Null\n"); + exit(1); + } + dbus_connection_flush(conn); + printf("Request Sent\n"); + + dbus_message_unref(msg); + + dbus_pending_call_block(pending); + + msg = dbus_pending_call_steal_reply(pending); + if (NULL == msg) + { + fprintf(stderr, "Reply Null\n"); + exit(1); + } + return 0; +} + +//---------------------------------------------------------------- +am_Error_e DbusHandler::connect(am_sourceID_t SourceID,am_sinkID_t SinkID ,am_connectionID_t &ConnectionID) +{ + msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "Connect"); + + dbus_message_iter_init_append(msg, &args); + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &SourceID)) + { + fprintf(stderr, "in Connect 1st Arg Out Of Memory!\n"); + exit(1); + } + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &SinkID)) + { + fprintf(stderr, "in Connect 2nd Arg Out Of Memory!\n"); + exit(1); + } + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter iter1 ; + + + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved %c",dbus_message_iter_get_arg_type(&iter1)); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + dbus_message_iter_next(&iter1); + if (DBUS_TYPE_UINT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved %c",dbus_message_iter_get_arg_type(&iter1)); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &ConnectionID); + fprintf(stderr,"Got result ,%d\n", ConnectionID); +return static_cast <am_Error_e>(result); +} + +////------------------------------------------------------------------------------------ +am_Error_e DbusHandler::disconnect(unsigned int ConnectionID) +{ + msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "Disconnect"); + dbus_message_iter_init_append(msg, &args); + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &ConnectionID)) + { + fprintf(stderr, "Out Of Memory!\n"); + exit(1); + } + cout<<"Attempting to send"<<endl; + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter iter1 ; + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved %c",dbus_message_iter_get_arg_type(&iter1)); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + return static_cast <am_Error_e>(result); +} +////---------------------------------------------------------------------------- +am_Error_e DbusHandler:: SetVolume(const am_sinkID_t sinkID, const am_mainVolume_t volume) +{ + msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "SetVolume"); + dbus_message_iter_init_append(msg, &args); + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &sinkID)) + { + fprintf(stderr, "Out Of Memory!\n"); + exit(1); + } + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT16, &volume)) + { + fprintf(stderr, "Out Of Memory!\n"); + exit(1); + } + + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter iter1 ; + + + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { + printf("Incorrect value recieved %c",dbus_message_iter_get_arg_type(&iter1)); + + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + return static_cast <am_Error_e>(result); +} +////------------------------------------------------------------------------------------------ + +am_Error_e DbusHandler:: VolumeStep(const am_sinkID_t sinkID, const int16_t volumeStep) +{msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "VolumeStep"); +dbus_message_iter_init_append(msg, &args); +if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &sinkID)) +{ + fprintf(stderr, "Out Of Memory!\n"); + exit(1); +} +if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT16, &volumeStep)) +{ + fprintf(stderr, "Out Of Memory!\n"); + exit(1); +} + +Sender(); +dbus_pending_call_unref(pending); +DBusMessageIter iter1 ; + + +if (!dbus_message_iter_init(msg, &iter1)) +fprintf(stderr, "Message Has No Parameters\n"); +if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) +{ printf("Incorrect value recieved %c",dbus_message_iter_get_arg_type(&iter1)); +exit(1); +} +dbus_message_iter_get_basic(&iter1, &result); +fprintf(stderr,"Got result ,%d\n", result); +return static_cast <am_Error_e>(result); + +} +////----------------------------------------------------------------------------------------- +am_Error_e DbusHandler:: SetSinkMuteState(const am_sinkID_t sinkID, const am_MuteState_e muteState) +{ + msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "SetSinkMuteState"); + dbus_message_iter_init_append(msg, &args); + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &sinkID)) + { + fprintf(stderr, "Out Of Memory!\n"); + exit(1); + } + int temp_mutestate = static_cast<int>(muteState); + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT16, &temp_mutestate)) + { + fprintf(stderr, "Out Of Memory!\n"); + exit(1); + } + + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter iter1 ; + + + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved %c",dbus_message_iter_get_arg_type(&iter1)); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + return static_cast <am_Error_e>(result); + + +} +////--------------------------------------------------------------------------------------------------- +am_Error_e DbusHandler ::SetMainSinkSoundProperty(const am_sinkID_t sinkID, const am_MainSoundProperty_s &soundProperty) +{ + msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "SetMainSinkSoundProperty"); + dbus_message_iter_init_append(msg, &args); + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &sinkID)) + { + fprintf(stderr, "Out Of Memory!\n"); + exit(1); + } + DBusMessageIter structIter; + dbus_bool_t success = true; + dbus_message_iter_open_container(&args, DBUS_TYPE_STRUCT, NULL, &structIter); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &soundProperty.type); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &soundProperty.value); + success = success && dbus_message_iter_close_container(&args, &structIter); + + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter iter1 ; + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved %c",dbus_message_iter_get_arg_type(&iter1)); + char * abc; + dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &abc); + printf("Incorrect value recieved %s",abc); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + return static_cast <am_Error_e>(result); + + +} +////---------------------------------------------------------------------------------------------------------------------- +am_Error_e DbusHandler::GetListMainConnections(std::vector<am_MainConnectionType_s *> &listConnections) +{ + msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "GetListMainConnections"); + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter subIter,iter1,iter2 ; + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved"); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + dbus_message_iter_next(&iter1); + if (DBUS_TYPE_ARRAY== dbus_message_iter_get_arg_type(&iter1)) + { // fprintf(stderr, "a:%d\n", a); + for (dbus_message_iter_recurse(&iter1, &iter2); + dbus_message_iter_get_arg_type(&iter2) != DBUS_TYPE_INVALID; + dbus_message_iter_next(&iter2)) + { + am_MainConnectionType_s* TempConnection= new am_MainConnectionType_s(); + if (DBUS_TYPE_STRUCT == dbus_message_iter_get_arg_type(&iter2)) + { + dbus_message_iter_recurse(&iter2, &subIter); + dbus_uint16_t ConnID,SourceID,SinkID; + dbus_int16_t Timedelay,ConnectionState; + dbus_message_iter_get_basic(&subIter, &ConnID); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &SourceID); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &SinkID); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &Timedelay); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &ConnectionState); + dbus_message_iter_next(&subIter); + + { + TempConnection->mainConnectionID=ConnID; + TempConnection->sourceID=SourceID; + TempConnection->sinkID=SinkID; + TempConnection->delay=Timedelay; + TempConnection->connectionState=static_cast<am_ConnectionState_e>(ConnectionState); + listConnections.push_back(TempConnection); + } + } + + } + } + + + +return static_cast <am_Error_e>(result); +} +////------------------------------------------------------------Rossini-------------------------------------------------- +am_Error_e DbusHandler::GetListMainSinks(std::vector<am_SinkType_s> &listSinks) +{ msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "GetListMainSinks"); + + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter subIter,iter1,iter2,subsubiter ; + + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved"); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + dbus_message_iter_next(&iter1); + if (DBUS_TYPE_ARRAY== dbus_message_iter_get_arg_type(&iter1)) + { // fprintf(stderr, "a:%d\n", a); + for (dbus_message_iter_recurse(&iter1, &iter2); + dbus_message_iter_get_arg_type(&iter2) != DBUS_TYPE_INVALID; + dbus_message_iter_next(&iter2)) + { + am_SinkType_s TempSink; + if (DBUS_TYPE_STRUCT == dbus_message_iter_get_arg_type(&iter2)) + { + dbus_message_iter_recurse(&iter2, &subIter); + dbus_uint16_t SinkID,SinkClassID,availability,availability_reason,volume,mute_state; + char* Sinkname; + dbus_message_iter_get_basic(&subIter, &SinkID); + //fprintf(stderr, "sourceID:%d\n",sourceID); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &Sinkname); + //fprintf(stderr, "name :%s\n",sourcename); + dbus_message_iter_next(&subIter); + if (DBUS_TYPE_STRUCT == dbus_message_iter_get_arg_type(&subIter)) + { + dbus_message_iter_recurse(&subIter, &subsubiter); + dbus_message_iter_get_basic(&subsubiter, &availability); + fprintf(stderr, "availability value:%d\n",availability); + dbus_message_iter_next(&subsubiter); + dbus_message_iter_get_basic(&subsubiter, &availability_reason); + fprintf(stderr, "availability reason value:%d\n",availability_reason); + } + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &volume); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &mute_state); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &SinkClassID); + fprintf(stderr, "muteState value:%d\n",SinkClassID); + fprintf(stderr, "*****************************************\n"); + TempSink.sinkID=SinkID; + TempSink.name=Sinkname; + TempSink.availability.availability=static_cast<am_Availablility_e>(availability); + TempSink.availability.availabilityReason=static_cast<am_AvailabilityReason_e>(availability_reason); + TempSink.sinkClassID=SinkClassID; + TempSink.volume=volume; + TempSink.muteState=static_cast<am_MuteState_e>(mute_state); + listSinks.push_back(TempSink); + } + + } + } + return static_cast <am_Error_e>(result); +} +////------------------------------------------------------------------------------------------------- + +am_Error_e DbusHandler::GetListMainSources(std::vector<am_SourceType_s> &listSources) +{ + + msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "GetListMainSources"); + + Sender_forlists(); + dbus_pending_call_unref(pending); + DBusMessageIter subIter,iter1,iter2,subsubiter ; + dbus_bool_t success = true; + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved"); + exit(1); + } + dbus_message_iter_get_basic(&iter1, &result); + fprintf(stderr,"Got result ,%d\n", result); + dbus_message_iter_next(&iter1); + if (DBUS_TYPE_ARRAY== dbus_message_iter_get_arg_type(&iter1)) + { // fprintf(stderr, "a:%d\n", a); + for (dbus_message_iter_recurse(&iter1, &iter2); + dbus_message_iter_get_arg_type(&iter2) != DBUS_TYPE_INVALID; + dbus_message_iter_next(&iter2)) + { + am_SourceType_s TempSource; + + if (DBUS_TYPE_STRUCT == dbus_message_iter_get_arg_type(&iter2)) + { + dbus_message_iter_recurse(&iter2, &subIter); + dbus_uint16_t sourceID,SourceClassID,availability,availability_reason; + char* sourcename; + dbus_message_iter_get_basic(&subIter, &sourceID); + //fprintf(stderr, "sourceID:%d\n",sourceID); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &sourcename); + //fprintf(stderr, "name :%s\n",sourcename); + dbus_message_iter_next(&subIter); + if (DBUS_TYPE_STRUCT == dbus_message_iter_get_arg_type(&subIter)) + { + dbus_message_iter_recurse(&subIter, &subsubiter); + dbus_message_iter_get_basic(&subsubiter, &availability); + fprintf(stderr, "availability value:%d\n",availability); + dbus_message_iter_next(&subsubiter); + dbus_message_iter_get_basic(&subsubiter, &availability_reason); + fprintf(stderr, "availability reason value:%d\n",availability_reason); + } + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &SourceClassID); + fprintf(stderr, "muteState value:%d\n",SourceClassID); + fprintf(stderr, "*****************************************\n"); + TempSource.sourceID=sourceID; + TempSource.name=sourcename; + TempSource.availability.availability=static_cast<am_Availablility_e>(availability); + TempSource.availability.availabilityReason=static_cast<am_AvailabilityReason_e>(availability_reason); + TempSource.sourceClassID=SourceClassID; + listSources.push_back(TempSource); + } + + } + } + return static_cast <am_Error_e>(result); +} + + +////-------------------------------------------------------------------------------------------------------------------- +am_Error_e DbusHandler::GetListMainSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_MainSoundProperty_s *> &listSoundProperties) +{ msg = dbus_message_new_method_call("org.genivi.audiomanager", // target for the method call + "/org/genivi/audiomanager/CommandInterface", // object to call on + "org.genivi.audiomanager.CommandInterface", // interface to call on + "GetListMainSinkSoundProperties"); + + + dbus_message_iter_init_append(msg, &args); + if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT16, &sinkID)) + { + fprintf(stderr, "GetListMainSinkSoundProperties Out Of Memory!\n"); + exit(1); + } + Sender(); + dbus_pending_call_unref(pending); + DBusMessageIter subIter,iter1,iter2 ; + + if (!dbus_message_iter_init(msg, &iter1)) + fprintf(stderr, "Message Has No Parameters\n"); + if (DBUS_TYPE_INT16!= dbus_message_iter_get_arg_type(&iter1)) + { printf("Incorrect value recieved,%c",dbus_message_iter_get_arg_type(&iter1)); + exit(1); + } + + dbus_message_iter_get_basic(&iter1, &result); + + dbus_message_iter_next(&iter1); + if (DBUS_TYPE_ARRAY== dbus_message_iter_get_arg_type(&iter1)) + { // fprintf(stderr, "a:%d\n", a); + for (dbus_message_iter_recurse(&iter1, &iter2); + dbus_message_iter_get_arg_type(&iter2) != DBUS_TYPE_INVALID; + dbus_message_iter_next(&iter2)) + {am_MainSoundProperty_s* SoundProperty= new am_MainSoundProperty_s(); + + if (DBUS_TYPE_STRUCT == dbus_message_iter_get_arg_type(&iter2)) + { + dbus_message_iter_recurse(&iter2, &subIter); + dbus_uint16_t Type,Value; + dbus_message_iter_get_basic(&subIter, &Type); + //fprintf(stderr, "sourceID:%d\n",sourceID); + dbus_message_iter_next(&subIter); + dbus_message_iter_get_basic(&subIter, &Value); + SoundProperty->type=static_cast<am_MainSoundPropertyType_e>(Type); + SoundProperty->value=Value; + listSoundProperties.push_back(SoundProperty); + } + + } + } + return static_cast <am_Error_e>(result); + +} + |