From b5853350dfc537b48a1cd15af900dfdee9443668 Mon Sep 17 00:00:00 2001 From: yanmorin <yanmorin> Date: Tue, 23 May 2006 00:06:53 +0000 Subject: [PATCH] New AudioDriver testing button --- src/gui/Makefile.am | 2 +- src/gui/guiframework.cpp | 4 +- src/gui/guiframework.h | 2 +- src/gui/qt/ConfigurationManagerImpl.cpp | 59 ++++++++- src/gui/qt/ConfigurationManagerImpl.hpp | 24 +++- src/gui/qt/ConfigurationPanel.ui | 78 +++++++++--- src/gui/qt/ConfigurationPanel.ui.h | 155 ++++++++++++++++++------ src/gui/qt/PhoneLineManagerImpl.cpp | 66 +++++++--- src/gui/qt/PhoneLineManagerImpl.hpp | 10 +- src/gui/qt/Request.cpp | 8 +- src/gui/qt/SFLPhoneApp.cpp | 17 ++- src/gui/qt/SFLPhoneWindow.cpp | 26 ++-- src/gui/qt/SFLPhoneWindow.hpp | 8 +- src/gui/qt/Session.cpp | 14 ++- src/gui/qt/Session.hpp | 14 ++- src/gui/qt/globals.h | 3 + src/gui/server/requestconfig.cpp | 7 +- src/managerimpl.cpp | 24 +++- src/managerimpl.h | 10 +- 19 files changed, 404 insertions(+), 127 deletions(-) diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 846fa28d47..f584fb1cb8 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -13,7 +13,7 @@ endif # cd qt && make -SUBDIRS = $(serverdir) $(qtdir) cli +SUBDIRS = $(serverdir) $(qtdir) cli qt noinst_LTLIBRARIES = libguiframework.la diff --git a/src/gui/guiframework.cpp b/src/gui/guiframework.cpp index 49150ab495..56ff4e6074 100644 --- a/src/gui/guiframework.cpp +++ b/src/gui/guiframework.cpp @@ -264,7 +264,7 @@ GuiFramework::getRegistrationState(std::string& stateCode, std::string& stateMes } bool -GuiFramework::setSwitch(const std::string& switchName) +GuiFramework::setSwitch(const std::string& switchName, std::string& returnMessage) { - return Manager::instance().setSwitch(switchName); + return Manager::instance().setSwitch(switchName, returnMessage); } diff --git a/src/gui/guiframework.h b/src/gui/guiframework.h index 9a45ac5ca0..347a93757a 100644 --- a/src/gui/guiframework.h +++ b/src/gui/guiframework.h @@ -92,7 +92,7 @@ public: bool setMicVolume(int volume); int getSpkrVolume(); int getMicVolume(); - bool setSwitch(const std::string& switchName); + bool setSwitch(const std::string& switchName, std::string& returnMessage); bool hasLoadedSetup(); const CallID& getCurrentId(); diff --git a/src/gui/qt/ConfigurationManagerImpl.cpp b/src/gui/qt/ConfigurationManagerImpl.cpp index 68d432e963..c4a2f7442c 100644 --- a/src/gui/qt/ConfigurationManagerImpl.cpp +++ b/src/gui/qt/ConfigurationManagerImpl.cpp @@ -1,5 +1,6 @@ -/** - * Copyright (C) 2004-2005 Savoir-Faire Linux inc. +/* + * Copyright (C) 2004-2006 Savoir-Faire Linux inc. + * Author: Yan Morin <yan.morin@savoirfairelinux.com> * Author: Jean-Philippe Barrette-LaPierre <jean-philippe.barrette-lapierre@savoirfairelinux.com> * @@ -56,9 +57,9 @@ ConfigurationManagerImpl::save() while(pos != mEntries.end()) { VariableMap::iterator vpos = pos->second.begin(); while(vpos != pos->second.end()) { - ConfigEntry entry(vpos->second); - mSession->configSet(entry.section, entry.name, entry.value); - vpos++; + ConfigEntry entry(vpos->second); + mSession->configSet(entry.section, entry.name, entry.value); + vpos++; } pos++; @@ -100,7 +101,45 @@ void ConfigurationManagerImpl::add(const AudioDevice &entry) { mAudioDevices.push_back(entry); - emit audioDevicesUpdated(); + // emit audioDevicesUpdated(); // <-- wrong call with success +} + +void +ConfigurationManagerImpl::addAudioDeviceIn(QString index, + QString hostApiName, + QString deviceName) +{ + AudioDevice device; + device.index = index; + device.hostApiName = hostApiName; + device.deviceName = deviceName; + addIn(device); +} + +void +ConfigurationManagerImpl::addIn(const AudioDevice &entry) +{ + mAudioDevicesIn.push_back(entry); + //emit audioDevicesInUpdated(); // <-- wrong call with success() +} + +void +ConfigurationManagerImpl::addAudioDeviceOut(QString index, + QString hostApiName, + QString deviceName) +{ + AudioDevice device; + device.index = index; + device.hostApiName = hostApiName; + device.deviceName = deviceName; + addOut(device); +} + +void +ConfigurationManagerImpl::addOut(const AudioDevice &entry) +{ + mAudioDevicesOut.push_back(entry); + //emit audioDevicesOutUpdated(); // <-- wrong call with success() } void @@ -136,6 +175,7 @@ ConfigurationManagerImpl::add(const Codec &entry) mCodecs.push_back(entry); emit codecsUpdated(); } + void ConfigurationManagerImpl::set(const QString §ion, const QString &name, @@ -150,6 +190,13 @@ ConfigurationManagerImpl::set(const QString §ion, } } +void +ConfigurationManagerImpl::save(const QString §ion, const QString &name) +{ + QString value = get(section, name); + mSession->configSet(section, name, value); +} + QString ConfigurationManagerImpl::get(const QString §ion, const QString &name) diff --git a/src/gui/qt/ConfigurationManagerImpl.hpp b/src/gui/qt/ConfigurationManagerImpl.hpp index 10391f9ad9..51fa3de318 100644 --- a/src/gui/qt/ConfigurationManagerImpl.hpp +++ b/src/gui/qt/ConfigurationManagerImpl.hpp @@ -1,5 +1,6 @@ -/** - * Copyright (C) 2004-2005 Savoir-Faire Linux inc. +/* + * Copyright (C) 2004-2006 Savoir-Faire Linux inc. + * Author: Yan Morin <yan.morin@savoirfairelinux.com> * Author: Jean-Philippe Barrette-LaPierre <jean-philippe.barrette-lapierre@savoirfairelinux.com> * @@ -88,6 +89,8 @@ class ConfigurationManagerImpl : public QObject signals: void audioDevicesUpdated(); + void audioDevicesInUpdated(); + void audioDevicesOutUpdated(); void ringtonesUpdated(); void codecsUpdated(); void updated(); @@ -126,9 +129,17 @@ public: void clearAudioDevices() {mAudioDevices.clear();} + void clearAudioDevicesIn() + {mAudioDevices.clear();} + void clearAudioDevicesOut() + {mAudioDevices.clear();} std::list< AudioDevice > getAudioDevices() {return mAudioDevices;} + std::list< AudioDevice > getAudioDevicesIn() + {return mAudioDevicesIn;} + std::list< AudioDevice > getAudioDevicesOut() + {return mAudioDevicesOut;} std::list< Ringtone > getRingtones() {return mRingtones;} @@ -143,6 +154,7 @@ public: {emit updated();} void save(); + void save(const QString& section, const QString& name); void finishSave(); @@ -152,6 +164,12 @@ public slots: void addAudioDevice(QString index, QString hostApiName, QString deviceName); void add(const AudioDevice &entry); + void addAudioDeviceIn(QString index, QString hostApiName, QString deviceName); + void addIn(const AudioDevice &entry); + + void addAudioDeviceOut(QString index, QString hostApiName, QString deviceName); + void addOut(const AudioDevice &entry); + void addRingtone(QString index, QString filename); void add(const Ringtone &entry); @@ -165,6 +183,8 @@ private: SectionMap mEntries; std::list< AudioDevice > mAudioDevices; + std::list< AudioDevice > mAudioDevicesIn; + std::list< AudioDevice > mAudioDevicesOut; std::list< Ringtone > mRingtones; std::list< Codec > mCodecs; diff --git a/src/gui/qt/ConfigurationPanel.ui b/src/gui/qt/ConfigurationPanel.ui index 3d2016dbd9..2f7db9b344 100644 --- a/src/gui/qt/ConfigurationPanel.ui +++ b/src/gui/qt/ConfigurationPanel.ui @@ -741,22 +741,37 @@ <attribute name="title"> <string>Drivers</string> </attribute> - <widget class="QButtonGroup"> - <property name="name"> - <cstring>DriverChoice</cstring> - </property> - <property name="geometry"> - <rect> - <x>10</x> - <y>10</y> - <width>410</width> - <height>180</height> - </rect> - </property> - <property name="title"> - <string>Drivers list</string> - </property> - </widget> +<widget class="QLayoutWidget"> + <property name="geometry"> + <rect><x>0</x><y>0</y><width>410</width><height>360</height></rect> + </property> + <vbox> + <widget class="QVButtonGroup"> + <property name="name"><cstring>DriverChoice</cstring></property> + <property name="title"><string>Driver for Speaker</string></property> + </widget> + <widget class="QVButtonGroup"> + <property name="name"><cstring>DriverChoiceIn</cstring></property> + <property name="title"><string>Driver for Microphone</string></property> + </widget> + <widget class="QLayoutWidget"> + <property name="name"><cstring>layoutforsounddriver</cstring></property> + <hbox> + <property name="name"><cstring>unnamed</cstring></property> + <widget class="QPushButton"> + <property name="name"><cstring>buttonTestSoundDriver</cstring></property> + <property name="enabled"><bool>true</bool></property> + <property name="text"><string>Test</string></property> + </widget> + <widget class="QLabel"> + <property name="name"><cstring>lblSoundDriver</cstring></property> + <property name="text"><string></string></property> + <property name="paletteForegroundColor"><color><red>255</red><green>0</green><blue>0</blue></color></property> + </widget> + </hbox> + </widget> + </vbox> +</widget> </widget> <widget class="QWidget"> <property name="name"> @@ -766,7 +781,7 @@ <string>Codecs</string> </attribute> <widget class="QButtonGroup"> - <property name="name"> + <property name="name"> <cstring>CodecsChoice</cstring> </property> <property name="geometry"> @@ -1405,12 +1420,30 @@ Montreal, Quebec H2T 1S6</p></string> <receiver>ConfigurationPanel</receiver> <slot>changeTabSlot()</slot> </connection> + <connection> + <sender>buttonRegister</sender> + <signal>clicked()</signal> + <receiver>ConfigurationPanel</receiver> + <slot>slotRegister()</slot> + </connection> <connection> <sender>DriverChoice</sender> <signal>clicked(int)</signal> <receiver>ConfigurationPanel</receiver> <slot>driverSlot(int)</slot> </connection> + <connection> + <sender>DriverChoiceIn</sender> + <signal>clicked(int)</signal> + <receiver>ConfigurationPanel</receiver> + <slot>driverSlotIn(int)</slot> + </connection> + <connection> + <sender>buttonTestSoundDriver</sender> + <signal>clicked()</signal> + <receiver>ConfigurationPanel</receiver> + <slot>slotTestSoundDriver()</slot> + </connection> <connection> <sender>buttonCancel</sender> <signal>clicked()</signal> @@ -1462,6 +1495,7 @@ Montreal, Quebec H2T 1S6</p></string> <tabstop>sendDTMFas</tabstop> <tabstop>Menu</tabstop> <tabstop>Tab_Audio</tabstop> + <tabstop>buttonTestSoundDriver</tabstop> <tabstop>codec1</tabstop> <tabstop>codec2</tabstop> <tabstop>codec3</tabstop> @@ -1474,20 +1508,26 @@ Montreal, Quebec H2T 1S6</p></string> </includes> <signals> <signal>needRegister()</signal> + <signal>soundDriverChanged()</signal> </signals> <slots> <slot>generate()</slot> - <slot>slotRegisterFailed( QString )</slot> - <slot>slotRegisterSucceed( QString )</slot> + <slot>slotRegister()</slot> + <slot>slotRegisterReturn( bool, QString )</slot> + <slot>slotTestSoundDriver()</slot> + <slot>slotSoundDriverReturn( bool, QString )</slot> <slot>saveSlot()</slot> <slot>changeTabSlot()</slot> <slot>useStunSlot( int id )</slot> <slot>applySkinSlot()</slot> <slot>driverSlot( int id )</slot> + <slot>driverSlotIn( int id )</slot> <slot>updateSkins()</slot> <slot>updateRingtones()</slot> <slot>updateCodecs()</slot> <slot>updateAudioDevices()</slot> + <slot>updateAudioDevicesIn()</slot> + <slot>updateAudioDevicesOut()</slot> <slot>SkinChoice_selected( const QString & )</slot> </slots> <functions> diff --git a/src/gui/qt/ConfigurationPanel.ui.h b/src/gui/qt/ConfigurationPanel.ui.h index fe7c445f70..0e81493e93 100644 --- a/src/gui/qt/ConfigurationPanel.ui.h +++ b/src/gui/qt/ConfigurationPanel.ui.h @@ -34,6 +34,7 @@ #include <qmessagebox.h> #include <qstringlist.h> #include <qcolor.h> +#include <qvbuttongroup.h> #include "globals.h" #include "ConfigurationManager.hpp" @@ -109,12 +110,6 @@ void ConfigurationPanel::init() TransparentWidget::retreive(ABOUT_IMAGE), "About", Menu); - - // we save the configuration, then we try to register - QObject::connect(buttonRegister, SIGNAL(clicked()), this, SLOT(saveSlot())); - QObject::connect(buttonRegister, SIGNAL(clicked()), - this, SIGNAL(needRegister())); - } void @@ -129,8 +124,7 @@ ConfigurationPanel::generate() .get(AUDIO_SECTION, AUDIO_CODEC3)); - ringsChoice->setCurrentText(ConfigurationManager::instance() - .get(AUDIO_SECTION, + ringsChoice->setCurrentText(ConfigurationManager::instance().get(AUDIO_SECTION, AUDIO_RINGTONE)); QString account = ACCOUNT_DEFAULT_NAME; @@ -171,11 +165,17 @@ ConfigurationPanel::generate() QRadioButton* device = static_cast< QRadioButton * >(DriverChoice->find(ConfigurationManager::instance() .get(AUDIO_SECTION, - AUDIO_DEFAULT_DEVICE).toUInt())); + AUDIO_DEFAULT_DEVICEOUT).toUInt())); if(device) { device->setChecked(true); } + device = static_cast< QRadioButton * >(DriverChoiceIn->find(ConfigurationManager::instance() + .get(AUDIO_SECTION, AUDIO_DEFAULT_DEVICEIN).toUInt())); + if (device) { + device->setChecked(true); + } + //preference tab updateSkins(); } @@ -220,33 +220,25 @@ void ConfigurationPanel::saveSlot() QString::number(sendDTMFas->currentItem())); if (codec1->currentText() != NULL) { - ConfigurationManager::instance().set(AUDIO_SECTION, - AUDIO_CODEC1, - codec1->currentText()); + ConfigurationManager::instance().set(AUDIO_SECTION, AUDIO_CODEC1, codec1->currentText()); } if (codec2->currentText() != NULL) { - ConfigurationManager::instance().set(AUDIO_SECTION, - AUDIO_CODEC2, - codec2->currentText()); + ConfigurationManager::instance().set(AUDIO_SECTION, AUDIO_CODEC2, codec2->currentText()); } if (codec3->currentText() != NULL) { - ConfigurationManager::instance().set(AUDIO_SECTION, - AUDIO_CODEC3, - codec3->currentText()); + ConfigurationManager::instance().set(AUDIO_SECTION, AUDIO_CODEC3, codec3->currentText()); } if (ringsChoice->currentText() != NULL) { - ConfigurationManager::instance().set(AUDIO_SECTION, - AUDIO_RINGTONE, - ringsChoice->currentText()); + ConfigurationManager::instance().set(AUDIO_SECTION, AUDIO_RINGTONE, ringsChoice->currentText()); } SkinManager::instance().load(SkinChoice->currentText()); SkinManager::instance().save(); #if 0 - QMessageBox::information(this, "Save settings", - "You must restart SFLPhone", + QMessageBox::information(this, tr("Save settings"), + tr("You must restart SFLPhone"), QMessageBox::Yes); #endif @@ -258,14 +250,14 @@ void ConfigurationPanel::changeTabSlot() { switch (Menu->currentItem()) { case 0: - TitleTab->setText("Setup signalisation"); + TitleTab->setText(tr("Setup signalisation")); Tab_Signalisations->show(); Tab_Audio->hide(); Tab_Preferences->hide(); Tab_About->hide(); break; case 1: - TitleTab->setText("Setup audio"); + TitleTab->setText(tr("Setup audio")); Tab_Signalisations->hide(); Tab_Audio->show(); Tab_Preferences->hide(); @@ -273,14 +265,14 @@ void ConfigurationPanel::changeTabSlot() break; case 2: updateSkins(); - TitleTab->setText("Setup preferences"); + TitleTab->setText(tr("Setup preferences")); Tab_Signalisations->hide(); Tab_Audio->hide(); Tab_Preferences->show(); Tab_About->hide(); break; case 3: - TitleTab->setText("About"); + TitleTab->setText(tr("About")); Tab_Signalisations->hide(); Tab_Audio->hide(); Tab_Preferences->hide(); @@ -308,8 +300,19 @@ void ConfigurationPanel::applySkinSlot() void ConfigurationPanel::driverSlot(int id) { ConfigurationManager::instance().set(AUDIO_SECTION, - AUDIO_DEFAULT_DEVICE, + AUDIO_DEFAULT_DEVICEOUT, + QString::number(id)); + lblSoundDriver->setPaletteForegroundColor(black); + lblSoundDriver->setText(tr("Not tested")); +} + +void ConfigurationPanel::driverSlotIn(int id) +{ + ConfigurationManager::instance().set(AUDIO_SECTION, + AUDIO_DEFAULT_DEVICEIN, QString::number(id)); + lblSoundDriver->setPaletteForegroundColor(black); + lblSoundDriver->setText(tr("Not tested")); } void ConfigurationPanel::updateSkins() @@ -346,8 +349,55 @@ void ConfigurationPanel::updateCodecs() codec3->insertItem(pos->codecName); } } - +void ConfigurationPanel::updateAudioDevicesIn() +{ + static std::list< QRadioButton * > buttonsIn; + while(buttonsIn.begin() != buttonsIn.end()) { + DriverChoiceIn->remove(*buttonsIn.begin()); + buttonsIn.pop_front(); + } + int top = 0; + + //In + std::list< AudioDevice > audio = ConfigurationManager::instance().getAudioDevicesIn(); + std::list< AudioDevice >::iterator pos; + + for (pos = audio.begin(); pos != audio.end(); pos++) { + QString hostApiName = pos->hostApiName; + QString deviceName = pos->deviceName; + + QString name = hostApiName + + QObject::tr(" (device #%1)").arg(pos->index); + + // New radio button with found device name + QRadioButton* device = new QRadioButton(DriverChoiceIn); + buttonsIn.push_back(device); + DriverChoiceIn->insert(device, pos->index.toUInt()); + //device->setGeometry( QRect( 10, 30 + top, 360, 21 ) ); + // Set label of radio button + //device->setText(deviceName); + // Add tooltip for each one + QString text = deviceName + " " + name; + + if(text.length() > 50) { + device->setText(text.left(50) + "..."); + } + else { + device->setText(text); + } + + QToolTip::add(device, text); + top += 30; + } + // Set position of the button group, with appropriate length + //DriverChoiceIn->setGeometry( QRect( 10, 200, 410, top + 30 ) ); +} + +void ConfigurationPanel::updateAudioDevicesOut() +{ + updateAudioDevices(); +} void ConfigurationPanel::updateAudioDevices() { @@ -359,7 +409,7 @@ void ConfigurationPanel::updateAudioDevices() } int top = 0; - std::list< AudioDevice > audio = ConfigurationManager::instance().getAudioDevices(); + std::list< AudioDevice > audio = ConfigurationManager::instance().getAudioDevicesOut(); std::list< AudioDevice >::iterator pos; for (pos = audio.begin(); pos != audio.end(); pos++) { @@ -373,7 +423,7 @@ void ConfigurationPanel::updateAudioDevices() QRadioButton* device = new QRadioButton(DriverChoice); buttons.push_back(device); DriverChoice->insert(device, pos->index.toUInt()); - device->setGeometry( QRect( 10, 30 + top, 390, 21 ) ); + //device->setGeometry( QRect( 10, 30 + top, 360, 21 ) ); // Set label of radio button //device->setText(deviceName); // Add tooltip for each one @@ -391,8 +441,10 @@ void ConfigurationPanel::updateAudioDevices() top += 30; } + // Set position of the button group, with appropriate length - DriverChoice->setGeometry( QRect( 10, 10, 410, top + 30 ) ); + //DriverChoice->setGeometry( QRect( 10, 10, 410, top + 30 ) ); + } @@ -402,19 +454,42 @@ ConfigurationPanel::SkinChoice_selected( const QString & ) } +void +ConfigurationPanel::slotRegister() +{ + saveSlot(); + emit needRegister(); +} + void -ConfigurationPanel::slotRegisterFailed( QString message ) +ConfigurationPanel::slotRegisterReturn( bool hasError, QString ) +{ + if (hasError) { + lblError->setPaletteForegroundColor(red); // red + lblError->setText("Register failed"); + } else { + lblError->setPaletteForegroundColor(black); // black + lblError->setText("Register Succeed"); + } + lblError->show(); +} + +void ConfigurationPanel::slotTestSoundDriver() { - lblError->setPaletteForegroundColor(QColor(255,0,0)); // red - lblError->setText("Register failed"); - lblError->show(); + ConfigurationManager::instance().save(AUDIO_SECTION, AUDIO_DEFAULT_DEVICEOUT); + ConfigurationManager::instance().save(AUDIO_SECTION, AUDIO_DEFAULT_DEVICEIN); + emit soundDriverChanged(); } void -ConfigurationPanel::slotRegisterSucceed( QString message ) +ConfigurationPanel::slotSoundDriverReturn( bool hasError, QString message ) { - lblError->setPaletteForegroundColor(QColor(0,0,0)); // black - lblError->setText("Register Succeed"); - lblError->show(); + if (hasError) { // no error + lblSoundDriver->setPaletteForegroundColor(red); // error in red + } else { + lblSoundDriver->setPaletteForegroundColor(black); + } + lblSoundDriver->setText(message); + lblSoundDriver->show(); } diff --git a/src/gui/qt/PhoneLineManagerImpl.cpp b/src/gui/qt/PhoneLineManagerImpl.cpp index 960c763a18..9d0e5441c4 100644 --- a/src/gui/qt/PhoneLineManagerImpl.cpp +++ b/src/gui/qt/PhoneLineManagerImpl.cpp @@ -68,14 +68,10 @@ PhoneLineManagerImpl::PhoneLineManagerImpl() EventFactory::instance().registerEvent< BusyStatus >("114"); EventFactory::instance().registerEvent< CongestionStatus >("115"); EventFactory::instance().registerEvent< WrongNumberStatus >("116"); - QObject::connect(this, SIGNAL(disconnected()), - this, SLOT(closeSession())); - QObject::connect(this, SIGNAL(readyToHandleEvents()), - this, SLOT(handleEvents())); - QObject::connect(this, SIGNAL(connected()), - this, SIGNAL(readyToSendStatus())); - QObject::connect(this, SIGNAL(readyToSendStatus()), - this, SLOT(startSession())); + QObject::connect(this, SIGNAL(disconnected()), this, SLOT(closeSession())); + QObject::connect(this, SIGNAL(readyToHandleEvents()), this, SLOT(handleEvents())); + QObject::connect(this, SIGNAL(connected()), this, SIGNAL(readyToSendStatus())); + QObject::connect(this, SIGNAL(readyToSendStatus()), this, SLOT(startSession())); } @@ -129,10 +125,10 @@ PhoneLineManagerImpl::connect() } void -PhoneLineManagerImpl::registerToServer() +PhoneLineManagerImpl::slotRegisterToServer() { isInitialized(); - + Request *r = mSession->registerToServer(); QObject::connect(r, SIGNAL(success(QString, QString)), this, SLOT(slotRegisterSucceed(QString, QString))); @@ -141,17 +137,42 @@ PhoneLineManagerImpl::registerToServer() } void -PhoneLineManagerImpl::slotRegisterSucceed(QString /*code*/, QString message) +PhoneLineManagerImpl::slotRegisterSucceed(QString message, QString /* code */) { - emit registerSucceed(message); + emit registerReturn(false, message); } void -PhoneLineManagerImpl::slotRegisterFailed(QString /*code*/, QString message) +PhoneLineManagerImpl::slotRegisterFailed(QString message, QString /* code */) { - emit registerFailed(message); + // it's true, we have error + emit registerReturn(true, message); } +void +PhoneLineManagerImpl::slotReloadSoundDriver() +{ + Request *r = mSession->switchAudioDriver(); + QObject::connect(r, SIGNAL(success(QString, QString)), + this, SLOT(slotSoundDriverSucceed(QString, QString))); + QObject::connect(r, SIGNAL(error(QString, QString)), + this, SLOT(slotSoundDriverFailed(QString,QString))); +} + +void +PhoneLineManagerImpl::slotSoundDriverSucceed(QString message, QString /* code */) +{ + emit testSoundDriverReturn(false, message); +} + +void +PhoneLineManagerImpl::slotSoundDriverFailed(QString message, QString /* code */) +{ + // it's true, we have error + emit testSoundDriverReturn(true, message); +} + + void PhoneLineManagerImpl::stop() { @@ -194,6 +215,7 @@ PhoneLineManagerImpl::handleEvents() QObject::connect(r, SIGNAL(success(QString, QString)), &ConfigurationManager::instance(), SIGNAL(ringtonesUpdated())); +/* r = mSession->list("audiodevice"); QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), &ConfigurationManager::instance(), SLOT(addAudioDevice(QString, @@ -201,6 +223,22 @@ PhoneLineManagerImpl::handleEvents() QString))); QObject::connect(r, SIGNAL(success(QString, QString)), &ConfigurationManager::instance(), SIGNAL(audioDevicesUpdated())); +*/ + r = mSession->list("audiodevicein"); + QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), + &ConfigurationManager::instance(), SLOT(addAudioDeviceIn(QString, + QString, + QString))); + QObject::connect(r, SIGNAL(success(QString, QString)), + &ConfigurationManager::instance(), SIGNAL(audioDevicesInUpdated())); + + r = mSession->list("audiodeviceout"); + QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), + &ConfigurationManager::instance(), SLOT(addAudioDeviceOut(QString, + QString, + QString))); + QObject::connect(r, SIGNAL(success(QString, QString)), + &ConfigurationManager::instance(), SIGNAL(audioDevicesOutUpdated())); r = mSession->list("codecdescriptor"); QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), diff --git a/src/gui/qt/PhoneLineManagerImpl.hpp b/src/gui/qt/PhoneLineManagerImpl.hpp index dbb6a02825..924d59b3fb 100644 --- a/src/gui/qt/PhoneLineManagerImpl.hpp +++ b/src/gui/qt/PhoneLineManagerImpl.hpp @@ -82,9 +82,8 @@ signals: void lineStatusSet(QString); void talkingStarted(QTime); void talkingStopped(); - void registerFailed(QString); - void registerSucceed(QString); - + void registerReturn(bool, QString); + void testSoundDriverReturn(bool, QString); void stopped(); void volumeUpdated(int); @@ -97,9 +96,12 @@ public slots: void hasDisconnected(); - void registerToServer(); + void slotRegisterToServer(); void slotRegisterFailed(QString, QString); void slotRegisterSucceed(QString, QString); + void slotReloadSoundDriver(); + void slotSoundDriverFailed(QString, QString); + void slotSoundDriverSucceed(QString, QString); /** * You need to call this function once. It must be diff --git a/src/gui/qt/Request.cpp b/src/gui/qt/Request.cpp index c563888a43..81e83290f8 100644 --- a/src/gui/qt/Request.cpp +++ b/src/gui/qt/Request.cpp @@ -60,8 +60,10 @@ Request::onError(const QString &code, const QString &message) .arg(code) .arg(mSequenceId) .arg(message); + QString messageDecoded = message; + Url::decode(messageDecoded); - emit error(message, code); + emit error(messageDecoded, code); } void @@ -111,8 +113,10 @@ Request::onSuccess(const QString &code, const QString &message) .arg(code) .arg(mSequenceId) .arg(message); + QString messageDecoded = message; + Url::decode(messageDecoded); - emit success(message, code); + emit success(messageDecoded, code); } QString diff --git a/src/gui/qt/SFLPhoneApp.cpp b/src/gui/qt/SFLPhoneApp.cpp index 651c788fb5..e26a4e3f31 100644 --- a/src/gui/qt/SFLPhoneApp.cpp +++ b/src/gui/qt/SFLPhoneApp.cpp @@ -58,6 +58,7 @@ SFLPhoneApp::SFLPhoneApp(int argc, char **argv) Requester::instance().registerObject< Request >(QString("playdtmf")); Requester::instance().registerObject< Request >(QString("register")); + Requester::instance().registerObject< Request >(QString("switch")); Requester::instance().registerObject< ConfigGetAllRequest >(QString("configgetall")); Requester::instance().registerObject< ConfigSaveRequest >(QString("configsave")); Requester::instance().registerObject< StopRequest >(QString("stop")); @@ -126,9 +127,15 @@ SFLPhoneApp::initConnections(SFLPhoneWindow *w) QObject::connect(w, SIGNAL(needRegister()), - &PhoneLineManager::instance(), SLOT(registerToServer())); - QObject::connect(&PhoneLineManager::instance(), SIGNAL(registerFailed(QString)), w, SIGNAL(registerFailed(QString))); - QObject::connect(&PhoneLineManager::instance(), SIGNAL(registerSucceed(QString)), w, SIGNAL(registerSucceed(QString))); + &PhoneLineManager::instance(), SLOT(slotRegisterToServer())); + QObject::connect(&PhoneLineManager::instance(), SIGNAL(registerReturn(bool, QString)), + w, SIGNAL(registerReturn(bool, QString))); + + QObject::connect(w, SIGNAL(soundDriverChanged()), + &PhoneLineManager::instance(), SLOT(slotReloadSoundDriver())); + QObject::connect(&PhoneLineManager::instance(), SIGNAL(testSoundDriverReturn(bool, QString)), + w, SIGNAL(testSoundDriverReturn(bool, QString))); + //QObject::connect(&PhoneLineManager::instance(), SIGNAL(registered()), // w, SIGNAL(registered())); @@ -231,6 +238,10 @@ SFLPhoneApp::initConnections(SFLPhoneWindow *w) w, SIGNAL(ringtonesUpdated())); QObject::connect(&ConfigurationManager::instance(), SIGNAL(audioDevicesUpdated()), w, SIGNAL(audioDevicesUpdated())); + QObject::connect(&ConfigurationManager::instance(), SIGNAL(audioDevicesInUpdated()), + w, SIGNAL(audioDevicesInUpdated())); + QObject::connect(&ConfigurationManager::instance(), SIGNAL(audioDevicesOutUpdated()), + w, SIGNAL(audioDevicesOutUpdated())); QObject::connect(&ConfigurationManager::instance(), SIGNAL(codecsUpdated()), w, SIGNAL(codecsUpdated())); //QObject::connect(&ConfigurationManager::instance(), SIGNAL(saved()), diff --git a/src/gui/qt/SFLPhoneWindow.cpp b/src/gui/qt/SFLPhoneWindow.cpp index 1e8928b023..79f35e10fb 100644 --- a/src/gui/qt/SFLPhoneWindow.cpp +++ b/src/gui/qt/SFLPhoneWindow.cpp @@ -58,18 +58,20 @@ SFLPhoneWindow::SFLPhoneWindow() { mLastWindowPos = pos(); mSetupPanel = new ConfigurationPanel(this, "ConfigurationPanel"); - connect(this, SIGNAL(ringtonesUpdated()), - mSetupPanel, SLOT(updateRingtones())); - connect(this, SIGNAL(audioDevicesUpdated()), - mSetupPanel, SLOT(updateAudioDevices())); - connect(this, SIGNAL(codecsUpdated()), - mSetupPanel, SLOT(updateCodecs())); - connect(mSetupPanel, SIGNAL(needRegister()), - this, SIGNAL(needRegister())); - connect(this, SIGNAL(registerFailed(QString)), - mSetupPanel, SLOT(slotRegisterFailed(QString))); - connect(this, SIGNAL(registerSucceed(QString)), - mSetupPanel, SLOT(slotRegisterSucceed(QString))); + connect(this, SIGNAL(ringtonesUpdated()), mSetupPanel, SLOT(updateRingtones())); + connect(this, SIGNAL(audioDevicesUpdated()), mSetupPanel, SLOT(updateAudioDevices())); + connect(this, SIGNAL(audioDevicesInUpdated()), mSetupPanel, SLOT(updateAudioDevicesIn())); + connect(this, SIGNAL(audioDevicesOutUpdated()),mSetupPanel, SLOT(updateAudioDevicesOut())); + connect(this, SIGNAL(codecsUpdated()), mSetupPanel, SLOT(updateCodecs())); + + connect(mSetupPanel, SIGNAL(needRegister()), this, SIGNAL(needRegister())); + connect(this, SIGNAL(registerReturn(bool, QString)), mSetupPanel, SLOT(slotRegisterReturn(bool, QString))); + + // when we receive a signal from mSetupPanel, we should resend one to... + connect(mSetupPanel, SIGNAL(soundDriverChanged()), this, SIGNAL(soundDriverChanged())); + + // we are an intermediate... + connect(this, SIGNAL(testSoundDriverReturn(bool, QString)), mSetupPanel, SLOT(slotSoundDriverReturn(bool, QString))); // Initialize the background image setName("main"); diff --git a/src/gui/qt/SFLPhoneWindow.hpp b/src/gui/qt/SFLPhoneWindow.hpp index d8679b5e17..b32e817442 100644 --- a/src/gui/qt/SFLPhoneWindow.hpp +++ b/src/gui/qt/SFLPhoneWindow.hpp @@ -62,11 +62,15 @@ signals: void needToCloseDaemon(); void ringtonesUpdated(); void audioDevicesUpdated(); + void audioDevicesInUpdated(); + void audioDevicesOutUpdated(); void codecsUpdated(); + void needRegister(); - void registerFailed(QString); - void registerSucceed(QString); + void registerReturn(bool, QString); + void soundDriverChanged(); + void testSoundDriverReturn(bool, QString); public slots: void delayedMove(const QPoint &point); diff --git a/src/gui/qt/Session.cpp b/src/gui/qt/Session.cpp index 9491565ac6..1647687321 100644 --- a/src/gui/qt/Session.cpp +++ b/src/gui/qt/Session.cpp @@ -1,5 +1,6 @@ -/** - * Copyright (C) 2004-2005 Savoir-Faire Linux inc. +/* + * Copyright (C) 2004-2006 Savoir-Faire Linux inc. + * Author: Yan Morin <yan.morin@savoirfairelinux.com> * Author: Jean-Philippe Barrette-LaPierre * <jean-philippe.barrette-lapierre@savoirfairelinux.com> * @@ -82,7 +83,6 @@ Session::configSet(const QString §ion, return Requester::instance().send(mId, "configset", args); } - Request * Session::configGetAll() const { @@ -167,6 +167,14 @@ Session::registerToServer() const return Requester::instance().send(mId, "register", args); } +Request * +Session::switchAudioDriver() const +{ + std::list< QString > args; + args.push_back("audiodriver"); + return Requester::instance().send(mId, "switch", args); +} + Account Session::getAccount(const QString &name) const { diff --git a/src/gui/qt/Session.hpp b/src/gui/qt/Session.hpp index 1d79d63144..cfd997b9c5 100644 --- a/src/gui/qt/Session.hpp +++ b/src/gui/qt/Session.hpp @@ -1,5 +1,6 @@ -/** - * Copyright (C) 2004-2005 Savoir-Faire Linux inc. +/* + * Copyright (C) 2004-2006 Savoir-Faire Linux inc. + * Author: Yan Morin <yan.morin@savoirfairelinux.com> * Author: Jean-Philippe Barrette-LaPierre * <jean-philippe.barrette-lapierre@savoirfairelinux.com> * @@ -77,14 +78,17 @@ class Session */ Request *registerToServer() const; + /** + * This function try to switch audio (sound) driver + */ + Request *switchAudioDriver() const; + /** * This function will stop sflphoned. */ Request *stop() const; - Request *configSet(const QString §ion, - const QString &name, - const QString &value) const; + Request *configSet(const QString §ion, const QString &name, const QString &value) const; Request *configSave() const; Request *configGetAll() const; diff --git a/src/gui/qt/globals.h b/src/gui/qt/globals.h index 80565bebd6..64933f858c 100644 --- a/src/gui/qt/globals.h +++ b/src/gui/qt/globals.h @@ -27,6 +27,9 @@ #define AUDIO_SECTION "Audio" #define AUDIO_DEFAULT_DEVICE "Drivers.driverName" +#define AUDIO_DEFAULT_DEVICEIN "Drivers.driverNameIn" +#define AUDIO_DEFAULT_DEVICEOUT "Drivers.driverNameOut" + #define AUDIO_CODEC1 "Codecs.codec1" #define AUDIO_CODEC2 "Codecs.codec2" #define AUDIO_CODEC3 "Codecs.codec3" diff --git a/src/gui/server/requestconfig.cpp b/src/gui/server/requestconfig.cpp index c87376bcb5..e06c2602de 100644 --- a/src/gui/server/requestconfig.cpp +++ b/src/gui/server/requestconfig.cpp @@ -296,10 +296,11 @@ RequestSwitch::RequestSwitch(const std::string &sequenceId, const TokenList& arg ResponseMessage RequestSwitch::execute() { - if (GUIServer::instance().setSwitch(_switchName)) { - return message("200", _("OK")); + std::string switchMessage; + if (GUIServer::instance().setSwitch(_switchName, switchMessage)) { + return message("200", switchMessage); } else { - return message("500",_("Server Error")); + return message("500", switchMessage); } } diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 6ccde181ce..ae9f04f765 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -892,15 +892,15 @@ ManagerImpl::notificationIncomingCall(void) { AudioLayer* audiolayer = getAudioDriver(); if (audiolayer != 0) { - unsigned int sampleRate = audiolayer->getSampleRate(); + unsigned int samplerate = audiolayer->getSampleRate(); std::ostringstream frequency; frequency << "440/" << FRAME_PER_BUFFER; - Tone tone(frequency.str(), sampleRate, audiolayer->getOutChannel()); - unsigned int nbInt16 = tone.getSize(); - int16 buf[nbInt16]; + Tone tone(frequency.str(), samplerate, audiolayer->getOutChannel()); + unsigned int nbint16 = tone.getSize(); + int16 buf[nbint16]; tone.getNext(buf, tone.getSize()); - audiolayer->putUrgent(buf, sizeof(int16)*nbInt16); + audiolayer->putUrgent(buf, sizeof(int16)*nbint16); } } @@ -1093,6 +1093,7 @@ ManagerImpl::selectAudioDriver (void) noDeviceOut = 0; } } + _debug(" Setting audiolayer to device in=%d and out=%d\n", noDeviceIn, noDeviceOut); _debugInit(" AudioLayer Opening Device"); _audiodriverPA->openDevice(noDeviceIn, noDeviceOut); } catch(...) { @@ -1433,6 +1434,7 @@ ManagerImpl::getAudioDeviceList(const std::string& sequenceId, int ioDeviceMask) } catch (...) { returnValue = false; } + return returnValue; } @@ -1495,34 +1497,44 @@ ManagerImpl::getDirListing(const std::string& sequenceId, const std::string& pat * Experimental... */ bool -ManagerImpl::setSwitch(const std::string& switchName) { +ManagerImpl::setSwitch(const std::string& switchName, std::string& message) { if (switchName == "audiodriver" ) { try { selectAudioDriver(); + message = _("Change with success"); + playDtmf('9'); + getAudioDriver()->sleep(300); // in milliseconds + playDtmf('1'); + getAudioDriver()->sleep(300); // in milliseconds + playDtmf('1'); return true; } catch (const portaudio::PaException &e) { getAudioDriver()->setErrorMessage(e.paErrorText()); _debug("Portaudio exception: %s\n", e.paErrorText()); + message = e.paErrorText(); return false; } catch (const portaudio::PaCppException &e) { getAudioDriver()->setErrorMessage(e.what()); _debug("Portaudio exception: %s\n", e.what()); + message = e.what(); return false; } catch (const std::runtime_error &e) { getAudioDriver()->setErrorMessage(e.what()); _debug("Portaudio exception: %s\n", e.what()); + message = e.what(); return false; } catch(...) { _debug("Portaudio exception: <unknown>\n"); + message = _("Sound error, please use another configuration"); return false; } } else { diff --git a/src/managerimpl.h b/src/managerimpl.h index e12c51908e..31c655a78e 100644 --- a/src/managerimpl.h +++ b/src/managerimpl.h @@ -202,8 +202,14 @@ public: bool setConfig(const std::string& section, const std::string& name, int value); bool getConfigList(const std::string& sequenceId, const std::string& name); void selectAudioDriver(void); - /** Set Audio Driver with switchName == audiodriver */ - bool setSwitch(const std::string& switchName); + /** + * Set Audio Driver with switchName == audiodriver + * @param sflphoned internal parameter to change + * @param message to return to the user + * @return true if everything is ok + */ + + bool setSwitch(const std::string& switchName, std::string& message); // configuration function for extern // throw an Conf::ConfigTreeItemException if not found -- GitLab