diff options
43 files changed, 2355 insertions, 0 deletions
diff --git a/AudioManagerPoC/AudioManager_PoC.pro b/AudioManagerPoC/AudioManager_PoC.pro new file mode 100644 index 0000000..a8f8222 --- /dev/null +++ b/AudioManagerPoC/AudioManager_PoC.pro @@ -0,0 +1,76 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2012-03-04T09:20:56 +# +#------------------------------------------------- + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +QT += core +QT += gui +QT += dbus +QT += qml +QT += quick +QT += widgets + +TARGET = AudioManager_PoC +CONFIG += console +CONFIG -= app_bundle +CONFIG +=qml_debug + +TEMPLATE = app + +SOURCES += business_logic/src/main.cpp \ + business_logic/src/qmlbuttoneventsreceiver.cpp \ + business_logic/src/volumechart.cpp \ + business_logic/src/audioManagerInterface.cpp + +HEADERS += business_logic/include/qmlbuttoneventsreceiver.h \ + business_logic/include/volumechart.h \ + business_logic/include/audioManagerInterface.h + +RESOURCES += AudioManager_PoC.qrc + +scripts.files += resources/scripts/getconnections.sh \ + resources/scripts/getvolumes_val.sh \ + resources/scripts/playCarReverse.sh \ + resources/scripts/playmusic.sh \ + resources/scripts/playnav.sh \ + resources/scripts/playtel.sh \ + resources/scripts/playtts.sh \ + resources/scripts/setvolume.sh \ + resources/scripts/stopCarReverse.sh \ + resources/scripts/stopmusic.sh \ + resources/scripts/stopnav.sh \ + resources/scripts/stoptel.sh \ + resources/scripts/stoptts.sh \ + resources/scripts/start_am-poc.sh +scripts.path += /opt/audiomanager-poc/scripts + +audio.files += resources/audio/car_reverse.wav \ + resources/audio/navigation.wav \ + resources/audio/telephone-ring.wav \ + resources/audio/tts.wav +audio.path += /opt/audiomanager-poc/audio-files + +target.path = /usr/bin +INSTALLS += target \ + scripts \ + audio diff --git a/AudioManagerPoC/AudioManager_PoC.qrc b/AudioManagerPoC/AudioManager_PoC.qrc new file mode 100644 index 0000000..adec18f --- /dev/null +++ b/AudioManagerPoC/AudioManager_PoC.qrc @@ -0,0 +1,40 @@ +<!-- +SPDX license identifier: MPL-2.0 + +Copyright (C) 2011-2014, Wind River Systems +Copyright (C) 2014, GENIVI Alliance + +This file is part of GENIVI AudioManager PoC. + +This Source Code Form is subject to the terms of the Mozilla Public +License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at http://mozilla.org/MPL/2.0/. + +For further information see http://www.genivi.org/. + +List of changes: + +21.09.2014, Adrian Scarlat, First version of the code; + Added Copyright and License information; +--> + +<!DOCTYPE RCC><RCC version="1.0"> + <qresource> + <file>presentation_layer/main.qml</file> + <file>presentation_layer/HomePage.qml</file> + <file>presentation_layer/AudioManager.qml</file> + <file>presentation_layer/Button.qml</file> + <file>presentation_layer/Clock.qml</file> + <file>presentation_layer/Slider.qml</file> + <file>presentation_layer/Tab.qml</file> + <file>resources/scripts/tabs.js</file> + <file>resources/pics/bg_homepage.png</file> + <file>resources/pics/bg.png</file> + <file>resources/pics/clock_glass.png</file> + <file>resources/pics/clock.png</file> + <file>resources/pics/genivi_logo.png</file> + <file>resources/pics/home.png</file> + <file>resources/pics/sound.png</file> + <file>resources/pics/WindRiver_red_lrg.png</file> + </qresource> +</RCC> diff --git a/AudioManagerPoC/README b/AudioManagerPoC/README new file mode 100644 index 0000000..5b2333d --- /dev/null +++ b/AudioManagerPoC/README @@ -0,0 +1,78 @@ +GENIVI_AudioManager_PoC +=============================================== +:Author: Adrian Scarlat <adrian.scarlat@windriver.com> +:doctitle: GENIVI_AudioManager_PoC + +SPDX license identifier: CC-BY-SA-4.0 + +Copyright (C) 2011-2014, Wind River Systems +Copyright (C) 2014, GENIVI Alliance + +This file is part of AudioManager PoC. + +This Documentation Form is subject to the terms of the Creative +Commons Attribution Share Alike (CC-BY-SA), v. 4.0. If a copy +of the CC-BY-SA was not distributed with this file, you can +obtain one at http://spdx.org/licenses/CC-BY-SA-4.0 + +For further information see http://www.genivi.org/. + +== Description of AudioManager_PoC +The AudioManager Proof of Concept (AM PoC) is an Qt application, based +on Qt5 and QtQuick module. It uses the GENIVI AudioManager capabilities +to demonstrate how audio sources are managed based on mixing rules +that are defined in the configuration file for AM Control Plugin: +"libPluginControlInterface.conf". + +For a detailed description please consult the "libPluginControlInterface.conf", +"libPluginRoutingInterfacePulse.conf" and AudioManager documentation. + +Also please visit the following link: +http://wiki.projects.genivi.org/index.php/Intrepid_-_Yocto_GENIVI_Demo_Platform +for a description of the GENIVI Demo Platform into which the AM PoC is +pre-integrated. + +== How to add wav files to AudioManager PoC +Currently Am PoC uses aplay to play wav files using scripts. The audio wav files +are found in AudioManagerPoC/resources/audio/ and the scripts used are found +in AudioManagerPoC/resources/scripts. + +Below is a description of which script plays what wav file: + + Script name || Wav file played +===================||===================== +playCarReverse.sh || car_reverse.wav +------------------------------------------ + playnav.sh || navigation.wav +------------------------------------------ + playtel.sh || telephone-ring.wav +------------------------------------------ + playtts.sh || tts.wav +------------------------------------------ + +To change the wav files played, the following steps must be taken: +1. Edit the script corresponding to the file you want to change by + changing the aplay file name parameter with the wav file name you + want to use; +2. Edit the AudioManager_PoC.pro file by changing the corresponding + wav file name in the files member of the audio install set; This + ensures that the new audio wav file will be installed when deploying; + +There is one script: playmusic.sh, for which the audio wav file is not provided +because of copyright issues. +To add a wav file for the playmusic.sh script do the following: +1. Edit the playmusic.sh script by changing the aplay file name parameter with + the wav file name you want to use; +2. Edit the AudioManager_PoC.pro file by adding the corresponding + wav file name in the files member of the audio install set; This + ensures that the new audio wav file will be installed when deploying; + +IMPORTANT !! +To stop playing the audio files, scripts are also used and can be found in +AudioManagerPoC/resources/scripts. Be sure that the grep parameter used to +search for the process that plays the audio file, corresponds to the wav file +name being played. + +Example: +For the stopmusic.sh script, change "grep [U]NKLE" to "grep [y]our_wav_file.wav". +Do this for all the scripts that start with 'stop'; diff --git a/AudioManagerPoC/business_logic/include/audioManagerInterface.h b/AudioManagerPoC/business_logic/include/audioManagerInterface.h new file mode 100644 index 0000000..92b53d2 --- /dev/null +++ b/AudioManagerPoC/business_logic/include/audioManagerInterface.h @@ -0,0 +1,114 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +#ifndef AUDIOMANAGER_H +#define AUDIOMANAGER_H + +#include <stdint.h> + +#include <QDBusArgument> +#include <QDBusAbstractInterface> +#include <QDBusVariant> + +typedef struct +{ + ushort mainConnectionID; + ushort sourceID; + ushort sinkID; + short delay; + short connectionState; +} MainConnection; + + +typedef struct +{ + short available; + short reason; +} Availability; + + +typedef struct +{ + ushort sinkID; + QString name; + Availability availability; + short volume; + short muteState; + ushort sinkClassID; +} Sink; + + +typedef struct +{ + ushort sourceID; + QString name; + Availability availability; + ushort sourceClassID; + short volume; +} Source; + + +Q_DECLARE_METATYPE(ushort); +Q_DECLARE_METATYPE(MainConnection); +Q_DECLARE_METATYPE(Availability); +Q_DECLARE_METATYPE(Sink); +Q_DECLARE_METATYPE(Source); + +Q_DECLARE_METATYPE(QList<MainConnection>); +Q_DECLARE_METATYPE(QList<Availability>); +Q_DECLARE_METATYPE(QList<Sink>); +Q_DECLARE_METATYPE(QList<Source>); + +QDBusArgument &operator<<(QDBusArgument &argument, const MainConnection &theStruct); + +const QDBusArgument &operator>>(const QDBusArgument &argument, MainConnection &theStruct); + +QDBusArgument &operator<<(QDBusArgument &argument, const Availability &theStruct); + +const QDBusArgument &operator>>(const QDBusArgument &argument, Availability &theStruct); + +QDBusArgument &operator<<(QDBusArgument &argument, const Sink &theStruct); + +const QDBusArgument &operator>>(const QDBusArgument &argument, Sink &theStruct); + +QDBusArgument &operator<<(QDBusArgument &argument, const Source &theStruct); + +const QDBusArgument &operator>>(const QDBusArgument &argument, Source &theStruct); + +class Q_DBUS_EXPORT audioManagerInterface : public QDBusAbstractInterface +{ +public: + audioManagerInterface(QObject *parent); + void Connect(const QString sourceName, const QString sinkName); + void Disconnect(const QString sourceName, const QString sinkName); + void SetVolume(const QString sinkName, short volume); + + QList<Source> GetListMainSources(); + QList<Sink> GetListMainSinks(); + QList<MainConnection> GetListMainConnections(); + +private: + QMap<QString, ushort> sinkName2SinkID; + QMap<QString, ushort> sourceName2SourceID; + QMap<uint, QString> mainConnectionID2SourceName; + QMap<QString, uint> sourceName2mainConnectionID; +}; + +#endif // AUDIOMANAGER_H diff --git a/AudioManagerPoC/business_logic/include/qmlbuttoneventsreceiver.h b/AudioManagerPoC/business_logic/include/qmlbuttoneventsreceiver.h new file mode 100644 index 0000000..e424f81 --- /dev/null +++ b/AudioManagerPoC/business_logic/include/qmlbuttoneventsreceiver.h @@ -0,0 +1,72 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +#ifndef QMLBUTTONEVENTSRECEIVER_H +#define QMLBUTTONEVENTSRECEIVER_H + +#include <QObject> +#include <QQuickView> + +#include "business_logic/include/audioManagerInterface.h" +#include "business_logic/include/volumechart.h" + +#define BACKGROUND_CHANNEL 1 +#define FOREGROUND_CHANNEL 2 + +class QMLButtonEventsReceiver : public QObject +{ +Q_OBJECT + +public: + QMLButtonEventsReceiver(QQuickView *view); + + Q_INVOKABLE QString clicked(QString btnText) const; + Q_INVOKABLE void slider(QString sliderText, qreal value) const; + + +public slots: + void slotRefreshInfo(); + void slotMediaEnd(); + void slotCarEnd(); + void slotNavEnd(); + void slotTTSEnd(); + void slotTelEnd(); + + +private: + QQuickView *view; + audioManagerInterface *amgr; + int channel; + + QString playMusic; + QString stopMusic; + QString playCarReverse; + QString stopCarReverse; + QString playNav; + QString stopNav; + QString playTTS; + QString stopTTS; + QString playTel; + QString stopTel; + QString getConnections; + QString getVolumes; +}; + +#endif // QMLBUTTONEVENTSRECEIVER_H diff --git a/AudioManagerPoC/business_logic/include/volumechart.h b/AudioManagerPoC/business_logic/include/volumechart.h new file mode 100644 index 0000000..4711327 --- /dev/null +++ b/AudioManagerPoC/business_logic/include/volumechart.h @@ -0,0 +1,41 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +#ifndef VOLUMECHART_H +#define VOLUMECHART_H + +#include <QQuickImageProvider> +#include <QQuickView> +#include <QPixmap> +#include <QString> +#include <QSize> + +class volumechart : public QQuickImageProvider +{ +public: + static QList<QList<int> > volumes; + + volumechart(); + + QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize); +}; + + +#endif // VOLUMECHART_H diff --git a/AudioManagerPoC/business_logic/src/audioManagerInterface.cpp b/AudioManagerPoC/business_logic/src/audioManagerInterface.cpp new file mode 100644 index 0000000..90bbf37 --- /dev/null +++ b/AudioManagerPoC/business_logic/src/audioManagerInterface.cpp @@ -0,0 +1,230 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +#include <QtDBus> +#include <QDBusVariant> +#include <QVariant> + +#include "business_logic/include/audioManagerInterface.h" + + + +audioManagerInterface::audioManagerInterface(QObject *parent) : + QDBusAbstractInterface( + QString("org.genivi.audiomanager"), + QString("/org/genivi/audiomanager/commandinterface"), + "org.genivi.audiomanager.commandinterface", + QDBusConnection::sessionBus(), + parent) +{ + qDBusRegisterMetaType<MainConnection>(); + qDBusRegisterMetaType<Availability>(); + qDBusRegisterMetaType<Sink>(); + qDBusRegisterMetaType<Source>(); + + qDBusRegisterMetaType<QList<MainConnection> >(); + qDBusRegisterMetaType<QList<Availability> >(); + qDBusRegisterMetaType<QList<Sink> >(); + qDBusRegisterMetaType<QList<Source> >(); + + GetListMainSources(); + GetListMainSinks(); + GetListMainConnections(); + +} + +void audioManagerInterface::Connect(const QString sourceName, const QString sinkName) +{ + qDebug() <<"Connect got called: " << sourceName << " " << sinkName; + QDBusMessage result = this->call( + "Connect", + QVariant::fromValue((ushort) sourceName2SourceID[sourceName]), + QVariant::fromValue((ushort) sinkName2SinkID[sinkName])); + QVariant resultCode = result.arguments().at(0); + QVariant mainConnectionID = result.arguments().at(1); + qDebug() <<"Connection ID: " << mainConnectionID.toInt(); + + if (mainConnectionID.toUInt() != 0) // connection doesn't exist + { + mainConnectionID2SourceName[mainConnectionID.toUInt()] = sourceName; + sourceName2mainConnectionID[sourceName] = mainConnectionID.toUInt(); + } +} + +void audioManagerInterface::Disconnect(const QString sourceName, const QString sinkName) +{ + qDebug() <<"Disconnect got called: " << sourceName << " " << sinkName; + qDebug() <<"Disconnect got called Cond ID: " << sourceName2mainConnectionID[sourceName]; + QDBusMessage result = this->call( + "Disconnect", + QVariant::fromValue((ushort) sourceName2mainConnectionID[sourceName])); + QVariant resultCode = result.arguments().at(0); +} + +QList<Source> audioManagerInterface::GetListMainSources() +{ + QDBusMessage result = this->call("GetListMainSources"); + if (result.errorMessage() != "") + { + return QList<Source>(); + } + QList<Source> sources = qdbus_cast<QList<Source> >(result.arguments().at(1)); + for (int i = 0; i < sources.size(); i++) + { + + sourceName2SourceID[sources[i].name] = sources[i].sourceID; + } + return sources; +} + +QList<Sink> audioManagerInterface::GetListMainSinks() +{ + QDBusMessage result = this->call("GetListMainSinks"); + if (result.errorMessage() != "") + { + return QList<Sink>(); + } + QList<Sink> sinks = qdbus_cast<QList<Sink> >(result.arguments().at(1)); + for (int i = 0; i < sinks.size(); i++) + { + + sinkName2SinkID[sinks[i].name] = sinks[i].sinkID; + } + return sinks; +} + +QList<MainConnection> audioManagerInterface::GetListMainConnections() +{ + QDBusMessage result = this->call("GetListMainConnections"); + + if (result.errorMessage() != "") + { + return QList<MainConnection>(); + } + + QList<MainConnection> connections = qdbus_cast<QList<MainConnection> >(result.arguments().at(1)); + for (int i = 0; i < connections.size(); i++) + { + mainConnectionID2SourceName[connections[i].mainConnectionID] = connections[i].mainConnectionID; + } + + return connections; +} + +void audioManagerInterface::SetVolume(const QString sinkName, short volume) +{ + QDBusMessage result = this->call( + "SetVolume", + QVariant::fromValue((ushort) sinkName2SinkID[sinkName]), + QVariant::fromValue(volume)); + QVariant resultCode = result.arguments().at(0); +} + +QDBusArgument &operator<<(QDBusArgument &argument, const MainConnection &theStruct) +{ + argument.beginStructure(); + argument << theStruct.mainConnectionID + << theStruct.sourceID + << theStruct.sinkID + << theStruct.delay + << theStruct.connectionState; + argument.endStructure(); + return argument; +} + +const QDBusArgument &operator>>(const QDBusArgument &argument, MainConnection &theStruct) +{ + argument.beginStructure(); + argument >> theStruct.mainConnectionID + >> theStruct.sourceID + >> theStruct.sinkID + >> theStruct.delay + >> theStruct.connectionState; + argument.endStructure(); + return argument; +} + +QDBusArgument &operator<<(QDBusArgument &argument, const Availability &theStruct) +{ + argument.beginStructure(); + argument << theStruct.available + << theStruct.reason; + argument.endStructure(); + return argument; +} + +const QDBusArgument &operator>>(const QDBusArgument &argument, Availability &theStruct) +{ + argument.beginStructure(); + argument >> theStruct.available + >> theStruct.reason; + argument.endStructure(); + return argument; +} + +QDBusArgument &operator<<(QDBusArgument &argument, const Sink &theStruct) +{ + argument.beginStructure(); + argument << theStruct.sinkID + << theStruct.name + << theStruct.availability + << theStruct.volume + << theStruct.muteState + << theStruct.sinkClassID; + argument.endStructure(); + return argument; +} + +const QDBusArgument &operator>>(const QDBusArgument &argument, Sink &theStruct) +{ + argument.beginStructure(); + argument >> theStruct.sinkID + >> theStruct.name + >> theStruct.availability + >> theStruct.volume + >> theStruct.muteState + >> theStruct.sinkClassID; + argument.endStructure(); + return argument; +} + +QDBusArgument &operator<<(QDBusArgument &argument, const Source &theStruct) +{ + argument.beginStructure(); + argument << theStruct.sourceID + << theStruct.name + << theStruct.availability + << theStruct.sourceClassID + << theStruct.volume; + argument.endStructure(); + return argument; +} + +const QDBusArgument &operator>>(const QDBusArgument &argument, Source &theStruct) +{ + argument.beginStructure(); + argument >> theStruct.sourceID + >> theStruct.name + >> theStruct.availability + >> theStruct.sourceClassID + >> theStruct.volume; + argument.endStructure(); + return argument; +} diff --git a/AudioManagerPoC/business_logic/src/main.cpp b/AudioManagerPoC/business_logic/src/main.cpp new file mode 100644 index 0000000..3bdd518 --- /dev/null +++ b/AudioManagerPoC/business_logic/src/main.cpp @@ -0,0 +1,87 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + * + * 28.11.2014, Adrian Scarlat, Added code to allow only one instance of + * AM PoC to run; This was achieved by creating + * a file in /var/run and placing an advisory + * lock on it, using flock(). When another + * instance is created, it can't create the advisory + * lock on the same file since the first instance + * owns it and it will quit with an appropriate + * message. + */ + +#include <QApplication> +#include <QQuickView> +#include <QQmlContext> +#include <QDebug> +#include <QGraphicsObject> +#include <QTimer> +#include <QQmlEngine> +#include <QQuickItem> + +#include <sys/file.h> +#include <errno.h> + +#include "business_logic/include/qmlbuttoneventsreceiver.h" +#include "business_logic/include/volumechart.h" +#include "business_logic/include/audioManagerInterface.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + int pid_file = open("/var/run/AudioManager_PoC.pid", O_CREAT | O_RDWR, 0666); + if(pid_file != -1) + { + int rc = flock(pid_file, LOCK_EX | LOCK_NB); + if(rc) + { + if(EWOULDBLOCK == errno) + { + qDebug() << "Only one instance of AudioManager_PoC is allowed. Quitting!"; + return 0; + } + } + else + { + QQuickView view; + QMLButtonEventsReceiver rec(&view); + view.rootContext()->setContextProperty("QMLButtonEventsReceiver", &rec); + view.engine()->addImageProvider(QLatin1String("volumes"), new volumechart()); + view.setSource(QUrl("qrc:/presentation_layer/main.qml")); + view.showMaximized(); + + qDebug() << "Show maximized"; + + QTimer *timer = new QTimer(&rec); + QObject::connect(timer, SIGNAL(timeout()), &rec, SLOT(slotRefreshInfo())); + timer->start(500); + + QObject *sliderVolume = view.rootObject()->findChild<QObject*>("sliderVolume"); + sliderVolume->setProperty("value", 100.0); + + return app.exec(); + } + } + else + { + qDebug() << "Couldn't create /var/run/AudioManager_PoC.pid file."; + return 0; + } +} diff --git a/AudioManagerPoC/business_logic/src/qmlbuttoneventsreceiver.cpp b/AudioManagerPoC/business_logic/src/qmlbuttoneventsreceiver.cpp new file mode 100644 index 0000000..f6d95dc --- /dev/null +++ b/AudioManagerPoC/business_logic/src/qmlbuttoneventsreceiver.cpp @@ -0,0 +1,298 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +#include <QDebug> +#include <QProcess> +#include <QApplication> +#include <QQuickView> +#include <QQmlContext> +#include <QQuickItem> +#include <QDebug> +#include <QString> +#include <QStringList> +#include <QGraphicsObject> +#include <QFileDialog> +#include <QStringListModel> +#include <QThread> + +#include "business_logic/include/qmlbuttoneventsreceiver.h" +#include "business_logic/include/volumechart.h" + +/** + * The value for volume is in percentage and is relative to the PulseAudio + * volume. Consult PulseAudio documentaion for a description about how + * volume is measured inside PulseAudio. + */ +static int masterVolumeFG = 100; +static int masterVolumeBG = 100; +static audioManagerInterface *static_amgr; + +QMLButtonEventsReceiver::QMLButtonEventsReceiver(QQuickView *view) +{ + playMusic = "/opt/audiomanager-poc/scripts/playmusic.sh"; + stopMusic = "/opt/audiomanager-poc/scripts/stopmusic.sh"; + playCarReverse = "/opt/audiomanager-poc/scripts/playCarReverse.sh"; + stopCarReverse = "/opt/audiomanager-poc/scripts/stopCarReverse.sh"; + playNav = "/opt/audiomanager-poc/scripts/playnav.sh"; + stopNav = "/opt/audiomanager-poc/scripts/stopnav.sh"; + playTTS = "/opt/audiomanager-poc/scripts/playtts.sh"; + stopTTS = "/opt/audiomanager-poc/scripts/stoptts.sh"; + playTel = "/opt/audiomanager-poc/scripts/playtel.sh"; + stopTel = "/opt/audiomanager-poc/scripts/stoptel.sh"; + getConnections = "/opt/audiomanager-poc/scripts/getconnections.sh"; + getVolumes = "/opt/audiomanager-poc/scripts/getvolumes_val.sh"; + + this->amgr = new audioManagerInterface(view); + static_amgr = amgr; + this->view = view; + channel = BACKGROUND_CHANNEL; +} + +QString QMLButtonEventsReceiver::clicked(QString btnText) const +{ + qDebug() << "Clicked:" << btnText; + + if (btnText == "Play Music") { + amgr->Connect("MediaPlayer", "AlsaPrimary"); + QProcess *p1 = new QProcess(); + p1->start(playMusic); + connect(p1, SIGNAL(finished(int)), SLOT(slotMediaEnd())); + return "Stop Music"; + } + + if (btnText == "Stop Music") { + amgr->Disconnect("MediaPlayer", "AlsaPrimary"); + QProcess *p1 = new QProcess(); + p1->start(stopMusic); + return "Play Music"; + } + + if (btnText == "Parking Signal") { + amgr->Connect("ReverseBeep", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(playCarReverse); + connect(p1, SIGNAL(finished(int)), SLOT(slotCarEnd())); + return "Stop Parking Signal"; + } + + if (btnText == "Stop Parking Signal") { + amgr->Disconnect("ReverseBeep", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopCarReverse); + return "Parking Signal"; + } + + if (btnText == "Navigation Message") { + amgr->Connect("NaviPlayer", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(playNav); + connect(p1, SIGNAL(finished(int)), SLOT(slotNavEnd())); + return "Stop Navigation Message"; + } + + if (btnText == "Stop Navigation Message") { + amgr->Disconnect("NaviPlayer", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopNav); + return "Navigation Message"; + } + + if (btnText == "Text To Speech") { + amgr->Connect("TTSPlayer", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(playTTS); + connect(p1, SIGNAL(finished(int)), SLOT(slotTTSEnd())); + return "Stop Text To Speech"; + } + + if (btnText == "Stop Text To Speech") { + amgr->Disconnect("TTSPlayer", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopTTS); + return "Text To Speech"; + } + + if (btnText == "Start Phone Call") { + amgr->Connect("Skype", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(playTel); + connect(p1, SIGNAL(finished(int)), SLOT(slotTelEnd())); + return "End Phone Call"; + } + + if (btnText == "End Phone Call") { + amgr->Disconnect("Skype", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopTel); + return "Start Phone Call"; + } + + return btnText; +} + + +void QMLButtonEventsReceiver::slider(QString sliderText, qreal value) const +{ + if (sliderText == "Volume") + { + if (channel == FOREGROUND_CHANNEL) + { + masterVolumeFG = (int) value; + amgr->SetVolume("AlsaSecondary", value); + } + else + { + masterVolumeBG = (int) value; + amgr->SetVolume("AlsaPrimary", value); + } + } +} + +void QMLButtonEventsReceiver::slotRefreshInfo() +{ + QObject *text = view->rootObject()->findChild<QObject*>("textConnections"); + QObject *textSrc = view->rootObject()->findChild<QObject*>("textSources"); + QObject *textVol = view->rootObject()->findChild<QObject*>("textVolumes"); + + QProcess *p1 = new QProcess(); + p1->start(getConnections); + p1->waitForFinished(-1); + + QString p_stdout = p1->readAllStandardOutput(); + + text->setProperty("text", QString(p_stdout)); + QStringList linesConnections = QString(p_stdout).split("\n"); + + QProcess *p2 = new QProcess(); + p2->start(getVolumes); + p2->waitForFinished(-1); + + p_stdout = p2->readAllStandardOutput(); + + QStringList lines = QString(p_stdout).split("\n"); + QString audiosources = ""; + QString audiovolumes = ""; + + int oldChannel = channel; + + channel = BACKGROUND_CHANNEL; + QObject *channelTXT = view->rootObject()->findChild<QObject*>("channel"); + + for (int i = 0; i < lines.size(); i++) + { + QStringList x = lines[i].split(","); + if (x.length() == 2 && x.at(0).length() != 0 && x.at(1).length() != 0 ) + { + QString src = QString(x.at(0)); + QString vol = "0"; + audiosources += src + "\n"; + int masterVolume = masterVolumeBG; + for (int j = 0; j < linesConnections.size(); j++) + { + if (linesConnections[j].contains(src) && linesConnections[j].contains("Connected")) + { + vol = QString(x.at(1)); + if (linesConnections[j].contains("AlsaSecondary")) + { + channel = FOREGROUND_CHANNEL; + masterVolume = masterVolumeFG; + } + } + } + audiovolumes += vol + "\n"; + volumechart::volumes[i].push_back(masterVolume * vol.toInt() / 100); + } + } + + if (oldChannel != channel) + { + QObject *sliderVolume = view->rootObject()->findChild<QObject*>("sliderVolume"); + + if (channel == BACKGROUND_CHANNEL) + { + channelTXT->setProperty("text", "Background Channel"); + sliderVolume->setProperty("value", masterVolumeBG); + } + if (channel == FOREGROUND_CHANNEL) + { + channelTXT->setProperty("text", "Foreground Channel"); + sliderVolume->setProperty("value", masterVolumeFG); + } + } + + textSrc->setProperty("text", audiosources); + textVol->setProperty("text", audiovolumes); +} + +void QMLButtonEventsReceiver::slotMediaEnd() +{ + qDebug() << "slotMediaEnd"; + amgr->Disconnect("MediaPlayer", "AlsaPrimary"); + QProcess *p1 = new QProcess(); + p1->start(stopMusic); + + QObject *connectOptions = view->rootObject()->findChild<QObject*>("music"); + connectOptions->setProperty("text", "Play Music"); +} + +void QMLButtonEventsReceiver::slotCarEnd() +{ + qDebug() << "slotCarEnd"; + amgr->Disconnect("ReverseBeep", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopCarReverse); + + QObject *connectOptions = view->rootObject()->findChild<QObject*>("parking"); + connectOptions->setProperty("text", "Parking Signal"); +} + +void QMLButtonEventsReceiver::slotNavEnd() +{ + qDebug() << "slotNavEnd"; + amgr->Disconnect("NaviPlayer", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopNav); + + QObject *connectOptions = view->rootObject()->findChild<QObject*>("nav"); + connectOptions->setProperty("text", "Navigation Message"); +} + + +void QMLButtonEventsReceiver::slotTTSEnd() +{ + qDebug() << "slotTTSEnd"; + amgr->Disconnect("TTSPlayer", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopTTS); + + QObject *connectOptions = view->rootObject()->findChild<QObject*>("tts"); + connectOptions->setProperty("text", "Text To Speech"); +} + +void QMLButtonEventsReceiver::slotTelEnd() +{ + qDebug() << "slotTelEnd"; + amgr->Disconnect("Skype", "AlsaSecondary"); + QProcess *p1 = new QProcess(); + p1->start(stopTel); + + QObject *connectOptions = view->rootObject()->findChild<QObject*>("phone"); + connectOptions->setProperty("text", "Start Phone Call"); +} diff --git a/AudioManagerPoC/business_logic/src/volumechart.cpp b/AudioManagerPoC/business_logic/src/volumechart.cpp new file mode 100644 index 0000000..d8ecfbc --- /dev/null +++ b/AudioManagerPoC/business_logic/src/volumechart.cpp @@ -0,0 +1,86 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +#include <qqmlextensionplugin.h> +#include <QQmlEngine> +#include <QQuickItem> +#include <QQuickImageProvider> +#include <QQuickView> +#include <QImage> +#include <QPainter> +#include <QDebug> + +#include "business_logic/include/volumechart.h" + +QList<QList<int> > volumechart::volumes; + + +volumechart::volumechart() + : QQuickImageProvider(QQuickImageProvider::Pixmap) +{ + QList<int> l1; + volumechart::volumes.push_back(l1); + QList<int> l2; + volumechart::volumes.push_back(l2); + QList<int> l3; + volumechart::volumes.push_back(l3); + QList<int> l4; + volumechart::volumes.push_back(l4); + QList<int> l5; + volumechart::volumes.push_back(l5); +} + +QPixmap volumechart::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) +{ + int width = 400; + int height = 100; + + if (size) + *size = QSize(width, height); + QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width, + requestedSize.height() > 0 ? requestedSize.height() : height); + pixmap.fill(QColor(0, 0, 0)); + + QPainter painter(&pixmap); + QColor colors[10]; + colors[0] = Qt::red; + colors[1] = Qt::green; + colors[2] = Qt::blue; + colors[3] = Qt::yellow; + colors[4] = Qt::cyan; + colors[5] = Qt::magenta; + colors[6] = Qt::darkCyan; + painter.setRenderHints(QPainter::Antialiasing); + for (int src = 0; src < volumes.size(); src++) + { + painter.setPen(colors[src]); + int limitMin = 1; + if (volumes[src].size() > 40) + { + limitMin = volumes[src].size() - 40; + } + for (int i = limitMin; i < volumes[src].size(); i++) + { + painter.drawLine((i - 1 - (limitMin -1)) * 10, src * 2 + 75 - volumes[src][i - 1] / 2, + (i - (limitMin -1)) * 10, src * 2 + 75 - volumes[src][i]/2); + } + } + return pixmap; +} diff --git a/AudioManagerPoC/presentation_layer/AudioManager.qml b/AudioManagerPoC/presentation_layer/AudioManager.qml new file mode 100644 index 0000000..e919680 --- /dev/null +++ b/AudioManagerPoC/presentation_layer/AudioManager.qml @@ -0,0 +1,183 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +import QtQuick 2.2 + +Rectangle { + + Row{ + y: 20; + x: 380 + Button { + objectName: "music" + text: "Play Music" + width: 180 + } + } + + Row { + spacing: 10 + y: 100; + x: 50 + Button { + objectName: "parking" + text: "Parking Signal" + width: 200 + } + Button { + objectName: "nav" + text: "Navigation Message" + width: 250 + } + Button { + objectName: "tts" + text: "Text To Speech" + width: 200 + } + Button { + objectName: "phone" + text: "Start Phone Call" + width: 180 + } + } + + Rectangle + { + color: "#000000"; + radius: 5 + width: 410 + height: 110 + x: 45 + y: 175 + Image { + id: volChart + source: "image://volumes/1" + width: 400 + x:5 + y:5 + height: 100 + asynchronous: true + } + } + + Timer { + property int idx: 0 + id: timerImg; + interval: 1000 + repeat: true + running: true + onTriggered: { + idx++; + volChart.source = "image://volumes/" + idx; } + } + + Row { + z: 3 + x: 50 + y: 300 + spacing: 50 + //CONNECTIONS + Column { + x: 5 + width: 450 + z: 4 + Text { + id: titleConnections + z: 5 + font { + family: "Liberation Mono" + pointSize: 12 + } + color: "#000000" + text: "CONNECTIONS:" + } + + + Text { + id: id1 + z: 5 + font { + family: "Liberation Mono" + pointSize: 9 + } + color: "#000000" + objectName: "textConnections" + text: "" + } + }//end connections + + + //SOURCES + Column { + z: 4 + width: 100 + Text { + id: titleSources + z: 5 + font { + family: "Liberation Mono" + pointSize: 12 + } + color: "#000000" + text: "SOURCES" + } + + + Text { + objectName: "textSources" + z: 5 + font { + family: "Liberation Mono" + pointSize: 9 + } + color: "#000000" + text: "" + } + }//end sources + + //VOLUMES + Column { + width: 150 + z: 4 + Text { + id: titleVolumes + z: 5 + font { + family: "Liberation Mono" + pointSize: 12 + } + color: "#000000" + text: "VOLUME" + } + + Text { + objectName: "textVolumes" + z: 5 + font { + family: "Liberation Mono" + pointSize: 9 + bold: true; + } + color: "#000000" + text: "" + } + }//end connections + } +} diff --git a/AudioManagerPoC/presentation_layer/Button.qml b/AudioManagerPoC/presentation_layer/Button.qml new file mode 100644 index 0000000..392cf5c --- /dev/null +++ b/AudioManagerPoC/presentation_layer/Button.qml @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2011-2014, Wind River Systems +** Copyright (C) 2014, GENIVI Alliance +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 + +Rectangle { + + id: theRect + property alias text: label.text; + property alias icon: img.source; + smooth: true; + width: 150 + height:50 + border { + color: "#55000000" + width: 2 + } + gradient: Gradient { + GradientStop { position: 0.0; color: "#55444444" } + GradientStop { position: 0.05; color: "#55888888" } + GradientStop { id:gr;position: 0.8; color: "#55333333" } + GradientStop { position: 1.0; color: "#55000000" } + } + radius: 10 + //anchors: + Text { + id: label + y:20 + anchors.horizontalCenter: parent.horizontalCenter + text: "-" + //font.bold: true; + font { + family: "Verdana" + pointSize: 14 + } + style: Text.Raised; + styleColor: "#55000000" + color: "#55555555" + } + Image { + id: img + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + opacity: 0.4 + source: "" + } + transform: { + rotation: 10 + } + SequentialAnimation { + id:animation; + PropertyAnimation { + id: animation1; + target: gr; + property: "color"; + to: "#55000000"; + duration: 200 + } + PropertyAnimation { + id: animation2; + target: gr; + property: "color"; + to: "#55333333"; + duration: 200 + } + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true; + onEntered: { + border.width = 2; + } + onExited: { + border.width = 2; + } + onClicked: { + animation.start(); + label.text = QMLButtonEventsReceiver.clicked(label.text); + } + } +} diff --git a/AudioManagerPoC/presentation_layer/Clock.qml b/AudioManagerPoC/presentation_layer/Clock.qml new file mode 100644 index 0000000..91f3958 --- /dev/null +++ b/AudioManagerPoC/presentation_layer/Clock.qml @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2011-2014, Wind River Systems +** Copyright (C) 2014, GENIVI Alliance +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 + +Item { + id: clock + width: 180; height: 180 + + property int hours + property int minutes + property int seconds + property real shift + property bool night: false + + function timeChanged() { + var date = new Date; + hours = shift ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours() + night = ( hours < 7 || hours > 19 ) + minutes = shift ? date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes() + seconds = date.getUTCSeconds(); + } + + Timer { + interval: 1000; running: true; repeat: true; + onTriggered: clock.timeChanged() + } + + Image {x: clock.x; y: clock.y; smooth: true;id: background; source: "qrc:/resources/pics/clock.png"; z: clock.z+1; opacity: 0.9;} + Image {x: clock.x; y: clock.y; smooth: true;id: glass; source: "qrc:/resources/pics/clock_glass.png"; z: clock.z+10} + + Rectangle { + color: "#888888"; + height: clock.height/2 - 25 + width: 6 + z: clock.z + 2 + x: clock.x + clock.width/2 - 3 + y: clock.y + 35 + smooth: true + transform: Rotation { + id: hourRotation + origin.x: 3; origin.y: clock.height/2 - 35; + angle: (clock.hours * 30) + (clock.minutes * 0.5) + } + } + Rectangle { + color: "#333333"; + height: clock.height/2 - 20 + width: 4 + z: clock.z + 3 + x: clock.x + clock.width/2 - 2 + y: clock.y + 30 + smooth: true + transform: Rotation { + id: minuteRotation + origin.x: 2; origin.y: clock.height/2 - 30; + angle: clock.minutes * 6 + } + } + + Rectangle { + height: clock.height/2 - 15 + width: 2 + z: clock.z + 4 + x: clock.x + clock.width/2 - 1 + y: clock.y + 25 + color: "#555555"; + smooth: true + transform: Rotation { + id: secondRotation + origin.x: 1; origin.y: clock.height/2 - 25; + angle: clock.seconds * 6 + } + } + Column { + x: clock.x - clock.width/2 + y: clock.y + clock.height/2 + + Text { + color: "#FF5555" + font.pointSize: 12 + font.bold: true + text: Qt.formatDateTime(new Date(), "ddd,MMM") + } + Text { + color: "#FF3333" + font.pointSize: 48 + font.bold: true + text: Qt.formatDateTime(new Date(), "dd") + } + } +} diff --git a/AudioManagerPoC/presentation_layer/HomePage.qml b/AudioManagerPoC/presentation_layer/HomePage.qml new file mode 100644 index 0000000..1df54a4 --- /dev/null +++ b/AudioManagerPoC/presentation_layer/HomePage.qml @@ -0,0 +1,53 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +import QtQuick 2.2 + +Row { + spacing: 50 + anchors.fill: parent + + Image { + id: logoGENIVI + x: 0 + y: 100 + source: "qrc:/resources/pics/genivi_logo.png" + } + + Column { + x: 0 + y: 100 + spacing: 80 + + Clock { + id: myClock + z: 10 + x: 100 + y: 100 + } + + Image { + id: logoWR + anchors.horizontalCenter: myClock.horizontalCenter + anchors.topMargin: myClock.bottom + source: "qrc:/resources/pics/WindRiver_red_lrg.png" + } + } +} diff --git a/AudioManagerPoC/presentation_layer/Slider.qml b/AudioManagerPoC/presentation_layer/Slider.qml new file mode 100644 index 0000000..1657d89 --- /dev/null +++ b/AudioManagerPoC/presentation_layer/Slider.qml @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2011-2014, Wind River Systems +** Copyright (C) 2014, GENIVI Alliance +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 + +Item { + id: slider; + + smooth: true; + // value is read/write. + property real value + onValueChanged: { handle.x = 2 + (value - minimum) * slider.xMax / (maximum - minimum); } + property real maximum: 1 + property real minimum: 1 + property int xMax: slider.width - handle.width - 4 + + Rectangle { + smooth: true; + anchors.fill: parent + border.color: "black"; border.width: 0; radius: 16 + gradient: Gradient { + GradientStop { position: 0.0; color: "#66000000" } + GradientStop { position: 1.0; color: "#66555555" } + } + Text { + id: channel + objectName: "channel" + anchors.verticalCenter: parent.verticalCenter; + anchors.horizontalCenter: parent.horizontalCenter; + font.bold: true + font.pointSize: 16 + color: "#AAAAAA" + text: "Background Channel" + } + } + + Rectangle { + id: handle; smooth: true + x: slider.width / 2 - handle.width / 2; y: 2; width: 80; height: slider.height-4; + radius: 16 + gradient: Gradient { + GradientStop { position: 0.0; color: "#DDDDDD" } + GradientStop { position: 0.4; color: "#AAAAAA" } + GradientStop { position: 1.0; color: "#555555" } + } + + MouseArea { + anchors.fill: parent; drag.target: parent + drag.axis: Drag.XAxis; drag.minimumX: 2; drag.maximumX: slider.xMax+2 + onPositionChanged: { + value = (maximum - minimum) * (handle.x-2) / slider.xMax + minimum; + for (var i = 0; i < 5; i++) + { + if (value > (i)*20) + { + volumeButton.children[i].color = "#9900AA00"; + volumeButton.children[i].border.color = "#99005500"; + } else { + volumeButton.children[i].color = "#99333333"; + volumeButton.children[i].border.color = "#99000000"; + } + } + + QMLButtonEventsReceiver.slider("Volume", value); + } + } + + Row { + id: volumeButton + spacing: 2 + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + Repeater { + model: 5 + Rectangle { + width: 3; + height: 3 * (index + 1) + y: (16 - 3 * (index + 1)) + color: "#9900AA00" + border.width: 1 + border.color: "#99005500" + } + } + } + } +} diff --git a/AudioManagerPoC/presentation_layer/Tab.qml b/AudioManagerPoC/presentation_layer/Tab.qml new file mode 100644 index 0000000..8116029 --- /dev/null +++ b/AudioManagerPoC/presentation_layer/Tab.qml @@ -0,0 +1,135 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +import QtQuick 2.2 + +Rectangle { + + id: tab + + property bool isSelected: false; + property string iconURL: "" + property string basecolor: "#FFFFFF" + property variant idContainer + + Image { + id: name + source: iconURL; + smooth: true; + anchors.horizontalCenter: parent.horizontalCenter; + anchors.verticalCenter: parent.verticalCenter; + } + + Rectangle { + smooth: true; + z:1000 + x: -12 + y: -12 + radius: 14 + width: 24; + height: fullScreen.width * 0.08 + 10; + color: "#000000" + } + + + Rectangle { + id: unselected; + x: 0 + y: +1 + width: fullScreen.width * 0.08; + height: fullScreen.width * 0.08; + + gradient: Gradient { + GradientStop { + position: 0.00; + color: "#00000000"; + } + GradientStop { + position: 0.9; + color: "#55000000"; + } + GradientStop { + position: 1; + color: "#AA000000"; + } + } + color: "#000000" + } + + color: tab.basecolor + + + + gradient: Gradient { + GradientStop { + id: selected; + position: 0.00; + color: tab.basecolor;//"#77FFFFFF"; + } + GradientStop { + position: 0.2; + color: tab.basecolor; + } + } + + // color: "#FFCC33" + width: fullScreen.width * 0.08-1; + height: fullScreen.width * 0.08; + + transform: Rotation { + origin.x: fullScreen.width * 0.09 / 2; + origin.y: fullScreen.width * 0.09 / 2; + angle: -90 + } + + SequentialAnimation { + id:animationSelect; + PropertyAnimation { + id: animation1; + target: selected; + property: "color"; + to: "#77000000"; + duration: 200 + } + } + + SequentialAnimation { + id:animationUnselect; + PropertyAnimation { + id: animation2; + target: selected; + property: "color"; + to: tab.basecolor; + duration: 200 + } + } + onIsSelectedChanged: { + console.log("TAB", isSelected); + if (isSelected) { + console.log("TAB selected"); + animationSelect.start(); + unselected.visible = false; + } else { + console.log("TAB un-selected"); + unselected.visible = true; + animationUnselect.start(); + } + } +} diff --git a/AudioManagerPoC/presentation_layer/main.qml b/AudioManagerPoC/presentation_layer/main.qml new file mode 100644 index 0000000..1a85c3a --- /dev/null +++ b/AudioManagerPoC/presentation_layer/main.qml @@ -0,0 +1,163 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + */ + +import QtQuick 2.2 +import "qrc:/resources/scripts/tabs.js" as Tabs + +Rectangle { + id: fullScreen; + width: 1024; + height: 768; + color: "#000000" + + Image { + z: -1 + width: fullScreen.width;//1600// + height: fullScreen.height;//720//900// + fillMode: Image.Tile + source: "qrc:/resources/pics/bg_homepage.png" + } + gradient: Gradient { + GradientStop { + position: 0.00; + color: "#00000000"; + } + GradientStop { + position: 0.2; + color: "#FF000000"; + } + GradientStop { + position: 0.9; + color: "#FF000000"; + } + GradientStop { + position: 1; + color: "#00000000"; + } + } + + property int oldIndex: -1; + + function tabSelected(newIndex) + { + if (oldIndex != -1) + { + console.log("UNSELECT INDEX:", oldIndex); + tabs.children[oldIndex].isSelected = false; + tabs.children[oldIndex].idContainer.visible = false; + } + console.log("SELECT INDEX:", newIndex); + + tabs.children[newIndex].isSelected = true; + tabs.children[newIndex].idContainer.visible = true; + oldIndex = newIndex; + } + + Row { + x:0 + height: 100 + + Rectangle { + color: "#00000000" + width: fullScreen.width * 0.08; + height: fullScreen.width * 0.08; + } + + Slider { + y: 10; + height: 32; + width: fullScreen.width * 0.9 + id: sliderId + objectName: "sliderVolume" + minimum: 0 + maximum: 100 + onMaximumChanged: { + sliderId.value = 200 + } + } + } + + Row { + y: fullScreen.height * 0.1 + + Column { + id: tabs; + //TAB BAR + anchors.verticalCenter: parent.verticalCenter + spacing: 20 + + Tab { + id: tab1 + iconURL: "qrc:/resources/pics/home.png" + idContainer: tabContent1 + basecolor: "#FFFFFF"; + MouseArea {anchors.fill: parent; onClicked: { tabSelected(0); }} + } + + Tab { + id: tab2 + iconURL: "qrc:/resources/pics/sound.png" + idContainer: tabContent2 + basecolor: "#FFFFFF"; + MouseArea {anchors.fill: parent; onClicked: { tabSelected(1); }} + } + } + + Column { + //TAB CONTENT + anchors.verticalCenter: parent.verticalCenter + spacing: 20 + + Rectangle {//HOME + id: tabContent1; + visible: false; + color: tab1.color + width: fullScreen.width * 0.9; + height: fullScreen.height * 0.8; + radius: 10; + + HomePage { + id: homePage + anchors.rightMargin: -53 + anchors.bottomMargin: 204 + anchors.leftMargin: 124 + anchors.topMargin: -31 + } + } + + Rectangle {//SOUND SETTINGS + id: tabContent2; + visible: false; + color: tab2.color + width: fullScreen.width * 0.9; + height: fullScreen.height * 0.8 ; + radius: 10; + + AudioManager { + id: audioManager + } + } + } + + Component.onCompleted: { + tabSelected(0); + } + } +} diff --git a/AudioManagerPoC/resources/audio/car_reverse.wav b/AudioManagerPoC/resources/audio/car_reverse.wav Binary files differnew file mode 100755 index 0000000..ee22f68 --- /dev/null +++ b/AudioManagerPoC/resources/audio/car_reverse.wav diff --git a/AudioManagerPoC/resources/audio/navigation.wav b/AudioManagerPoC/resources/audio/navigation.wav Binary files differnew file mode 100755 index 0000000..46b147b --- /dev/null +++ b/AudioManagerPoC/resources/audio/navigation.wav diff --git a/AudioManagerPoC/resources/audio/telephone-ring.wav b/AudioManagerPoC/resources/audio/telephone-ring.wav Binary files differnew file mode 100755 index 0000000..fcc896c --- /dev/null +++ b/AudioManagerPoC/resources/audio/telephone-ring.wav diff --git a/AudioManagerPoC/resources/audio/tts.wav b/AudioManagerPoC/resources/audio/tts.wav Binary files differnew file mode 100755 index 0000000..00ca58c --- /dev/null +++ b/AudioManagerPoC/resources/audio/tts.wav diff --git a/AudioManagerPoC/resources/pics/WindRiver_red_lrg.png b/AudioManagerPoC/resources/pics/WindRiver_red_lrg.png Binary files differnew file mode 100644 index 0000000..12e64cc --- /dev/null +++ b/AudioManagerPoC/resources/pics/WindRiver_red_lrg.png diff --git a/AudioManagerPoC/resources/pics/bg.png b/AudioManagerPoC/resources/pics/bg.png Binary files differnew file mode 100644 index 0000000..8cd0ed0 --- /dev/null +++ b/AudioManagerPoC/resources/pics/bg.png diff --git a/AudioManagerPoC/resources/pics/bg_homepage.png b/AudioManagerPoC/resources/pics/bg_homepage.png Binary files differnew file mode 100644 index 0000000..2517d44 --- /dev/null +++ b/AudioManagerPoC/resources/pics/bg_homepage.png diff --git a/AudioManagerPoC/resources/pics/clock.png b/AudioManagerPoC/resources/pics/clock.png Binary files differnew file mode 100644 index 0000000..fdb660a --- /dev/null +++ b/AudioManagerPoC/resources/pics/clock.png diff --git a/AudioManagerPoC/resources/pics/clock_glass.png b/AudioManagerPoC/resources/pics/clock_glass.png Binary files differnew file mode 100644 index 0000000..d41cd44 --- /dev/null +++ b/AudioManagerPoC/resources/pics/clock_glass.png diff --git a/AudioManagerPoC/resources/pics/genivi_logo.png b/AudioManagerPoC/resources/pics/genivi_logo.png Binary files differnew file mode 100644 index 0000000..c474c06 --- /dev/null +++ b/AudioManagerPoC/resources/pics/genivi_logo.png diff --git a/AudioManagerPoC/resources/pics/home.png b/AudioManagerPoC/resources/pics/home.png Binary files differnew file mode 100644 index 0000000..0ca131f --- /dev/null +++ b/AudioManagerPoC/resources/pics/home.png diff --git a/AudioManagerPoC/resources/pics/sound.png b/AudioManagerPoC/resources/pics/sound.png Binary files differnew file mode 100644 index 0000000..4101212 --- /dev/null +++ b/AudioManagerPoC/resources/pics/sound.png diff --git a/AudioManagerPoC/resources/scripts/getconnections.sh b/AudioManagerPoC/resources/scripts/getconnections.sh new file mode 100755 index 0000000..6e51bc3 --- /dev/null +++ b/AudioManagerPoC/resources/scripts/getconnections.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +dbus-send --session --print-reply --dest=org.genivi.audiomanager /org/genivi/audiomanager/commandinterface org.genivi.audiomanager.commandinterface.GetListMainConnections | awk '/struct/ {getline;getline;SOURCE=$2;getline;SINK=$2;getline;getline;STATUS=$2;print "Source"SOURCE"-->Sink"SINK"(Status"STATUS")";}' | sed 's/Source100/MediaPlayer/g' | sed 's/Source101/NaviPlayer/g' | sed 's/Source102/TTSPlayer/g' | sed 's/Source103/Skype/g' | sed 's/Source104/ReverseBeep/g' | sed 's/Sink100/AlsaPrimary/g' | sed 's/Sink101/AlsaSecondary/g' | sed 's/Status1/Connecting/g' | sed 's/Status2/Connected/g' | sed 's/Status3/Disconnecting/g' | sed 's/Status4/Disconnected/g' | sed 's/Status5/Suspended/g' diff --git a/AudioManagerPoC/resources/scripts/getvolumes_val.sh b/AudioManagerPoC/resources/scripts/getvolumes_val.sh new file mode 100755 index 0000000..f44cb74 --- /dev/null +++ b/AudioManagerPoC/resources/scripts/getvolumes_val.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +dbus-send --session --print-reply --dest=org.genivi.audiomanager /org/genivi/audiomanager/commandinterface org.genivi.audiomanager.commandinterface.GetListMainSinks | awk '/struct/ {getline; FS="\""; getline;NAME=$2; getline; getline; getline; getline;FS=" "; getline;print NAME","$2}' diff --git a/AudioManagerPoC/resources/scripts/playCarReverse.sh b/AudioManagerPoC/resources/scripts/playCarReverse.sh new file mode 100755 index 0000000..b91acbc --- /dev/null +++ b/AudioManagerPoC/resources/scripts/playCarReverse.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +PULSE_PROP="media.role='reverse'" aplay /opt/audiomanager-poc/audio-files/car_reverse.wav diff --git a/AudioManagerPoC/resources/scripts/playmusic.sh b/AudioManagerPoC/resources/scripts/playmusic.sh new file mode 100755 index 0000000..8f15e7e --- /dev/null +++ b/AudioManagerPoC/resources/scripts/playmusic.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +PULSE_PROP="media.role='MEDIA'" aplay /opt/audiomanager-poc/audio-files/UNKLE_-_Burn_My_Shadow.wav diff --git a/AudioManagerPoC/resources/scripts/playnav.sh b/AudioManagerPoC/resources/scripts/playnav.sh new file mode 100755 index 0000000..40d7e3d --- /dev/null +++ b/AudioManagerPoC/resources/scripts/playnav.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +PULSE_PROP="media.role='NAVI'" aplay /opt/audiomanager-poc/audio-files/navigation.wav diff --git a/AudioManagerPoC/resources/scripts/playtel.sh b/AudioManagerPoC/resources/scripts/playtel.sh new file mode 100755 index 0000000..1d73bd3 --- /dev/null +++ b/AudioManagerPoC/resources/scripts/playtel.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +PULSE_PROP="media.role='skype'" aplay /opt/audiomanager-poc/audio-files/telephone-ring.wav diff --git a/AudioManagerPoC/resources/scripts/playtts.sh b/AudioManagerPoC/resources/scripts/playtts.sh new file mode 100755 index 0000000..ec8eb8a --- /dev/null +++ b/AudioManagerPoC/resources/scripts/playtts.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +PULSE_PROP="media.role='TextToSpeach'" aplay /opt/audiomanager-poc/audio-files/tts.wav diff --git a/AudioManagerPoC/resources/scripts/setvolume.sh b/AudioManagerPoC/resources/scripts/setvolume.sh new file mode 100755 index 0000000..8c9db7b --- /dev/null +++ b/AudioManagerPoC/resources/scripts/setvolume.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +RESULT=`python -c 'import dbus; print dbus.SessionBus().call_blocking("org.genivi.audiomanager", "/org/genivi/audiomanager/commandinterface", "org.genivi.audiomanager.commandinterface", "SetVolume", "ui", (dbus.UInt32(100), dbus.UInt32('$1') ))'` diff --git a/AudioManagerPoC/resources/scripts/stopCarReverse.sh b/AudioManagerPoC/resources/scripts/stopCarReverse.sh new file mode 100755 index 0000000..d5dce81 --- /dev/null +++ b/AudioManagerPoC/resources/scripts/stopCarReverse.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +ps aux | grep [c]ar_reverse.wav | awk '{print $2}' | xargs kill -9 diff --git a/AudioManagerPoC/resources/scripts/stopmusic.sh b/AudioManagerPoC/resources/scripts/stopmusic.sh new file mode 100755 index 0000000..a1d546e --- /dev/null +++ b/AudioManagerPoC/resources/scripts/stopmusic.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +ps aux | grep [U]NKLE | awk '{print $2}' | xargs kill -9 diff --git a/AudioManagerPoC/resources/scripts/stopnav.sh b/AudioManagerPoC/resources/scripts/stopnav.sh new file mode 100755 index 0000000..dd4894e --- /dev/null +++ b/AudioManagerPoC/resources/scripts/stopnav.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +ps aux | grep [n]avigation.wav | awk '{print $2}' | xargs kill -9 diff --git a/AudioManagerPoC/resources/scripts/stoptel.sh b/AudioManagerPoC/resources/scripts/stoptel.sh new file mode 100755 index 0000000..d6db116 --- /dev/null +++ b/AudioManagerPoC/resources/scripts/stoptel.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +ps aux | grep [t]elephone | awk '{print $2}' | xargs kill -9 diff --git a/AudioManagerPoC/resources/scripts/stoptts.sh b/AudioManagerPoC/resources/scripts/stoptts.sh new file mode 100755 index 0000000..2bc12b7 --- /dev/null +++ b/AudioManagerPoC/resources/scripts/stoptts.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# SPDX license identifier: MPL-2.0 +# +# Copyright (C) 2011-2014, Wind River Systems +# Copyright (C) 2014, GENIVI Alliance +# +# This file is part of GENIVI AudioManager PoC. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License (MPL), v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# For further information see http://www.genivi.org/. +# +# List of changes: +# +# 21.09.2014, Adrian Scarlat, First version of the code; +# Added Copyright and License information; +# + +ps aux | grep [t]ts.wav | awk '{print $2}' | xargs kill -9 diff --git a/AudioManagerPoC/resources/scripts/tabs.js b/AudioManagerPoC/resources/scripts/tabs.js new file mode 100644 index 0000000..836744a --- /dev/null +++ b/AudioManagerPoC/resources/scripts/tabs.js @@ -0,0 +1,36 @@ +/** + * SPDX license identifier: MPL-2.0 + * + * Copyright (C) 2011-2014, Wind River Systems + * Copyright (C) 2014, GENIVI Alliance + * + * This file is part of GENIVI AudioManager PoC. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License (MPL), v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * For further information see http://www.genivi.org/. + * + * List of changes: + * + * 21.09.2014, Adrian Scarlat, First version of the code; + * Added Copyright and License information; + * + */ + +var tabIDS = new Array(); + +var oldSelectedTab = null; +var oldSelectedTabContent; + +function tabSelected(newSelectedTab, newSelectedTabContent) +{ + console.log("newSelectedTab, newSelectedTabContent", newSelectedTab, newSelectedTabContent); + if (oldSelectedTab) + { + oldSelectedTab.visible = false; + } + + oldSelectedTab = newSelectedTab; +} |