diff --git a/src/gui/qt/ConfigurationManagerImpl.cpp b/src/gui/qt/ConfigurationManagerImpl.cpp index 44c77e261114f56c1c85a7db67686df7b8c60da6..5a8bba748512cb486dff64e55dbc24d5d910e490 100644 --- a/src/gui/qt/ConfigurationManagerImpl.cpp +++ b/src/gui/qt/ConfigurationManagerImpl.cpp @@ -26,7 +26,7 @@ #include "Request.hpp" // don't know if it's a good idea for this class to know request... ConfigurationManagerImpl::ConfigurationManagerImpl() - : mSession(0) + : mSession(0), mRateMode("8000") {} ConfigurationManagerImpl::~ConfigurationManagerImpl() @@ -88,12 +88,14 @@ ConfigurationManagerImpl::add(const ConfigEntry &entry) void ConfigurationManagerImpl::addAudioDevice(QString index, QString hostApiName, - QString deviceName) + QString deviceName, + QString defaultRate) { AudioDevice device; device.index = index; device.hostApiName = hostApiName; device.deviceName = deviceName; + device.defaultRate = defaultRate; add(device); } @@ -107,12 +109,14 @@ ConfigurationManagerImpl::add(const AudioDevice &entry) void ConfigurationManagerImpl::addAudioDeviceIn(QString index, QString hostApiName, - QString deviceName) + QString deviceName, + QString defaultRate) { AudioDevice device; device.index = index; device.hostApiName = hostApiName; device.deviceName = deviceName; + device.defaultRate = defaultRate; addIn(device); } @@ -126,12 +130,14 @@ ConfigurationManagerImpl::addIn(const AudioDevice &entry) void ConfigurationManagerImpl::addAudioDeviceOut(QString index, QString hostApiName, - QString deviceName) + QString deviceName, + QString defaultRate) { AudioDevice device; device.index = index; device.hostApiName = hostApiName; device.deviceName = deviceName; + device.defaultRate = defaultRate; addOut(device); } @@ -222,13 +228,15 @@ ConfigurationManagerImpl::reloadSoundDriver() { Request *r; r = mSession->list("audiodevicein"); QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), - this, SLOT(addAudioDeviceIn(QString, QString, QString))); + this, SLOT(addAudioDeviceIn(QString, QString, QString, QString))); + QObject::connect(r, SIGNAL(parsedEntry(const QString& )), + this, SLOT(setRateMode(const QString& ))); QObject::connect(r, SIGNAL(success(QString, QString)), this, SIGNAL(audioDevicesInUpdated())); r = mSession->list("audiodeviceout"); QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), - this, SLOT(addAudioDeviceOut(QString, QString, QString))); + this, SLOT(addAudioDeviceOut(QString, QString, QString, QString))); QObject::connect(r, SIGNAL(success(QString, QString)), this, SIGNAL(audioDevicesOutUpdated())); diff --git a/src/gui/qt/ConfigurationManagerImpl.hpp b/src/gui/qt/ConfigurationManagerImpl.hpp index ee9131aada999f998ee87a7e1306c76aaf8eab26..59c9c971eb870b224f9083348cce0508e65c4506 100644 --- a/src/gui/qt/ConfigurationManagerImpl.hpp +++ b/src/gui/qt/ConfigurationManagerImpl.hpp @@ -35,6 +35,7 @@ public: QString index; QString hostApiName; QString deviceName; + QString defaultRate; }; struct Ringtone @@ -166,13 +167,16 @@ public: public slots: void add(const ConfigEntry &entry); - void addAudioDevice(QString index, QString hostApiName, QString deviceName); + void addAudioDevice(QString index, QString hostApiName, QString deviceName, QString defaultRate); void add(const AudioDevice &entry); - void addAudioDeviceIn(QString index, QString hostApiName, QString deviceName); + void addAudioDeviceIn(QString index, QString hostApiName, QString deviceName, QString defaultRate); + void setRateMode(const QString& rateMode) { mRateMode = rateMode; } + const QString& getRateMode() { return mRateMode; } + void addIn(const AudioDevice &entry); - void addAudioDeviceOut(QString index, QString hostApiName, QString deviceName); + void addAudioDeviceOut(QString index, QString hostApiName, QString deviceName, QString defaultRate); void addOut(const AudioDevice &entry); void addRingtone(QString index, QString filename); @@ -194,6 +198,7 @@ private: std::list< Codec > mCodecs; Session *mSession; + QString mRateMode; // VARIANT or number }; #endif diff --git a/src/gui/qt/ConfigurationPanel.ui.h b/src/gui/qt/ConfigurationPanel.ui.h index 56f5e7a3b0233cb2b726a6fbfac5519b2709aa09..8faa38bed9bbabfcd4f22aa7e4277bc333daf639 100644 --- a/src/gui/qt/ConfigurationPanel.ui.h +++ b/src/gui/qt/ConfigurationPanel.ui.h @@ -163,6 +163,7 @@ ConfigurationPanel::generate() cboDriverChoiceOut->setCurrentItem(ConfigurationManager::instance().get(AUDIO_SECTION, AUDIO_DEFAULT_DEVICEOUT).toUInt()); cboDriverChoiceIn->setCurrentItem(ConfigurationManager::instance().get(AUDIO_SECTION, AUDIO_DEFAULT_DEVICEIN).toUInt()); + //preference tab updateSkins(); } diff --git a/src/gui/qt/PhoneLineManagerImpl.cpp b/src/gui/qt/PhoneLineManagerImpl.cpp index e4be25eabb9074424f5eb9ae660d91a2b4614110..c51f227a27ef3662eab8251ded70eb56f18a1c49 100644 --- a/src/gui/qt/PhoneLineManagerImpl.cpp +++ b/src/gui/qt/PhoneLineManagerImpl.cpp @@ -242,7 +242,7 @@ PhoneLineManagerImpl::handleEvents() QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), &ConfigurationManager::instance(), SLOT(addAudioDevice(QString, QString, - QString))); + QString, QString))); QObject::connect(r, SIGNAL(success(QString, QString)), &ConfigurationManager::instance(), SIGNAL(audioDevicesUpdated())); */ @@ -250,7 +250,10 @@ PhoneLineManagerImpl::handleEvents() QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), &ConfigurationManager::instance(), SLOT(addAudioDeviceIn(QString, QString, - QString))); + QString, QString))); + QObject::connect(r, SIGNAL(parsedEntry(const QString& )), + &ConfigurationManager::instance(), SLOT(setRateMode(const QString& ))); + QObject::connect(r, SIGNAL(success(QString, QString)), &ConfigurationManager::instance(), SIGNAL(audioDevicesInUpdated())); @@ -258,7 +261,7 @@ PhoneLineManagerImpl::handleEvents() QObject::connect(r, SIGNAL(parsedEntry(QString, QString, QString, QString, QString)), &ConfigurationManager::instance(), SLOT(addAudioDeviceOut(QString, QString, - QString))); + QString, QString))); QObject::connect(r, SIGNAL(success(QString, QString)), &ConfigurationManager::instance(), SIGNAL(audioDevicesOutUpdated())); diff --git a/src/gui/qt/Request.cpp b/src/gui/qt/Request.cpp index 81e83290f8a631adc85c71172f9f120a2a6acf95..5592543f0a0e3d96157e8b55c46c74fddb1210a5 100644 --- a/src/gui/qt/Request.cpp +++ b/src/gui/qt/Request.cpp @@ -84,10 +84,13 @@ Request::onEntry(const QString &code, const QString &message) if(args.size() >= 1) { arg1 = *args.begin(); args.pop_front(); - } + } if(args.size() >= 1) { arg2 = *args.begin(); args.pop_front(); + } else { // if we have only one argument, we send a signal with one parameter + emit parsedEntry(arg1); + return; } if(args.size() >= 1) { arg3 = *args.begin(); diff --git a/src/gui/qt/Request.hpp b/src/gui/qt/Request.hpp index 63c2cdb4cac6798f4b3908125410d7b449b1e7fe..baa442c1ca5b1851f933af837c98afbc4d8f86db 100644 --- a/src/gui/qt/Request.hpp +++ b/src/gui/qt/Request.hpp @@ -43,6 +43,7 @@ signals: void error(QString, QString); void success(QString, QString); void entry(QString, QString); + void parsedEntry(const QString& ); void parsedEntry(QString, QString, QString, QString, QString); public: diff --git a/src/gui/qt/SFLLcd.cpp b/src/gui/qt/SFLLcd.cpp index 5b83b5e6573f5889af14d39c90e785bc094f5708..8aec04b31905b9a4315bf8a571ebbe33c164602d 100644 --- a/src/gui/qt/SFLLcd.cpp +++ b/src/gui/qt/SFLLcd.cpp @@ -315,4 +315,6 @@ SFLLcd::mousePressEvent( QMouseEvent *e) if (e && e->button() == Qt::MidButton) { emit midClicked(); } + // pass the event to the widget + QWidget::mousePressEvent( e ); } diff --git a/src/gui/qt/SFLPhoneWindow.cpp b/src/gui/qt/SFLPhoneWindow.cpp index 31b6257a56dcce2b0567af7a03c558cbd0a027f6..88c1f59b03a72e63996e2aaf9e8b96f92d8a7b3f 100644 --- a/src/gui/qt/SFLPhoneWindow.cpp +++ b/src/gui/qt/SFLPhoneWindow.cpp @@ -233,7 +233,7 @@ SFLPhoneWindow::askResendStatus(QString message) void SFLPhoneWindow::mousePressEvent(QMouseEvent *e) { - mLastPos = e->pos(); + mLastPos = e->pos(); // this is relative to the widget } void diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 111b622f8f9a48fa02c5144b852322c5d309e3e7..9ae3e6c30f964436745f16013fa32f0e53a135b2 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -515,16 +515,21 @@ ManagerImpl::playDtmf(char code) // fast return, no sound, so no dtmf if (audiolayer==0 || _dtmfKey == 0) { return false; } int outChannel = audiolayer->getOutChannel(); - int size = pulselen * (audiolayer->getSampleRate()/1000); - - // this buffer is for mono - int16* _buf = new int16[size]; + // number of int16 sampling in one pulselen depends on samplerate + /** size (n sampling) = time_ms * sampling/s + --------------------- + ms/s + */ + int size = (int)(pulselen * ((float)audiolayer->getSampleRate()/1000)); + + // this buffer is for mono or stereo + int16* _buf = new int16[size*outChannel]; bool returnValue = false; // Handle dtmf _dtmfKey->startTone(code); - // copy the sound... + // copy the sound if ( _dtmfKey->generateDTMF(_buf, size * outChannel) ) { // Put buffer to urgentRingBuffer @@ -1039,7 +1044,7 @@ ManagerImpl::initConfigFile (void) fill_config_int(CONFIG_ZEROCONF, CONFIG_ZEROCONF_DEFAULT_STR); initConfigAccount(); - + _exist = createSettingsPath(); _setupLoaded = (_exist == 2 ) ? false : true; } @@ -1083,7 +1088,7 @@ ManagerImpl::selectAudioDriver (void) int noDeviceIn = getConfigInt(AUDIO, DRIVER_NAME_IN); int noDeviceOut = getConfigInt(AUDIO, DRIVER_NAME_OUT); int sampleRate = getConfigInt(AUDIO, DRIVER_SAMPLE_RATE); - #ifdef USE_SAMPLERATE + #ifndef USE_SAMPLERATE sampleRate = 8000; #else if (sampleRate <=0 ) { @@ -1438,52 +1443,47 @@ ManagerImpl::getAudioDeviceList(const std::string& sequenceId, int ioDeviceMask) const char *hostApiName; const char *deviceName; int deviceIsSupported = false; - int deviceRate = audiolayer->getSampleRate(); + double deviceRate; for (int index = 0; index < sys.deviceCount(); index++ ) { portaudio::Device& device = sys.deviceByIndex(index); deviceIsSupported = false; // TODO, put this code into AudioDriver() if (ioDeviceMask == AudioLayer::InputDevice && !device.isOutputOnlyDevice()) { - //portaudio::DirectionSpecificStreamParameters inputParameters(device, device.maxInputChannels(), portaudio::INT16, true, 0.0, NULL); - //portaudio::DirectionSpecificStreamParameters outputParameters = portaudio::DirectionSpecificStreamParameters::null(); - //portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, deviceRate, 0, paNoFlag); - //if (tmp.isSupported()) { deviceIsSupported = true; - //} } else if (ioDeviceMask == AudioLayer::OutputDevice && !device.isInputOnlyDevice()) { - //portaudio::DirectionSpecificStreamParameters inputParameters = portaudio::DirectionSpecificStreamParameters::null(); - //portaudio::DirectionSpecificStreamParameters outputParameters(device, device.maxOutputChannels(), portaudio::INT16, true, 0.0, NULL); - //portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, deviceRate, 0, paNoFlag); - //if (tmp.isSupported()) { deviceIsSupported = true; - //} } else if (device.isFullDuplexDevice()) { - //portaudio::DirectionSpecificStreamParameters inputParameters(device, device.maxInputChannels(), portaudio::INT16, true, 0.0, NULL); - //portaudio::DirectionSpecificStreamParameters outputParameters(device, device.maxOutputChannels(), portaudio::INT16, true, 0.0, NULL); - //portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, deviceRate, 0, paNoFlag); - //if (tmp.isSupported()) { deviceIsSupported = true; - //} } if (deviceIsSupported) { hostApiName = device.hostApi().name(); deviceName = device.name(); + deviceRate = device.defaultSampleRate(); tk.clear(); std::ostringstream str; str << index; tk.push_back(str.str()); tk.push_back(deviceName); tk.push_back(std::string(hostApiName)); + std::ostringstream rate; rate << (int)deviceRate; tk.push_back(rate.str()); _gui->sendMessage("100", sequenceId, tk); } } returnValue = true; + std::ostringstream rate; + #ifdef USE_SAMPLERATE + rate << "VARIABLE"; + #else + rate << "8000"; + #endif + tk.clear(); + tk.push_back(rate.str()); + _gui->sendMessage("101", sequenceId, tk); } catch (...) { returnValue = false; } - - audiolayer->startStream(); + //audiolayer->startStream(); return returnValue; }