fixes #123 by displaying the Audio test in the GUI

* added methods to get results in context
* added signal to indicate audio test completed
* updated GUI to display results
* changed test run methods to non-const to be consistent with voice lib
* Logic in GUI to avoid parallel / interfering tests
* Fixed wrong Q_ASSERT message and QTimer::singleShot in voice_vatlib.cpp
This commit is contained in:
Klaus Basan
2014-02-06 16:07:16 +01:00
parent 526cd916a8
commit 6bf930650a
10 changed files with 158 additions and 51 deletions

View File

@@ -22,8 +22,12 @@ namespace BlackCore
{
Q_ASSERT(runtime);
// 1. Init by "network driver"
// 1. Init by "voice driver"
this->m_voice = new CVoiceVatlib(this);
// 2. Signal / slots
connect(this->m_voice, &CVoiceVatlib::micTestFinished, this, &CContextVoice::audioTestCompleted);
connect(this->m_voice, &CVoiceVatlib::squelchTestFinished, this, &CContextVoice::audioTestCompleted);
}
/*
@@ -229,7 +233,7 @@ namespace BlackCore
/*
* Mic test.
*/
void CContextVoice::runMicrophoneTest() const
void CContextVoice::runMicrophoneTest()
{
Q_ASSERT(this->m_voice);
this->m_voice->runMicrophoneTest();
@@ -238,11 +242,29 @@ namespace BlackCore
/*
* Squelch test.
*/
void CContextVoice::runSquelchTest() const
void CContextVoice::runSquelchTest()
{
Q_ASSERT(this->m_voice);
this->m_voice->runSquelchTest();
}
/*
* Microphone test
*/
QString CContextVoice::getMicrophoneTestResult() const
{
Q_ASSERT(this->m_voice);
return this->m_voice->micTestResultAsString();
}
/*
* Squelch value
*/
double CContextVoice::getSquelchValue() const
{
Q_ASSERT(this->m_voice);
return static_cast<double>(this->m_voice->inputSquelch());
}
} // namespace

View File

@@ -159,12 +159,22 @@ namespace BlackCore
/*!
* \copydoc IContextVoice::runMicrophoneTest()
*/
virtual void runMicrophoneTest() const;
virtual void runMicrophoneTest();
/*!
* \copydoc IContextVoice::runSquelchTest()
*/
virtual void runSquelchTest() const;
virtual void runSquelchTest();
/*!
* \copydoc IContextVoice::getMicrophoneTestResult()
*/
virtual QString getMicrophoneTestResult() const;
/*!
* \copydoc IContextVoice::getSquelchValue()
*/
virtual double getSquelchValue() const;
private:
CVoiceVatlib *m_voice; //!< underlying voice lib

View File

@@ -26,9 +26,10 @@ namespace BlackCore
/*
* Workaround for signals, not working without, but why?
*/
void IContextVoice::relaySignals(const QString & /** serviceName **/, QDBusConnection & /** connection **/)
void IContextVoice::relaySignals(const QString &serviceName, QDBusConnection &connection)
{
// void
connection.connect(serviceName, IContextVoice::ServicePath(), IContextVoice::InterfaceName(),
"audioTestCompleted", this, SIGNAL(audioTestCompleted()));
}
/*
@@ -154,19 +155,35 @@ namespace BlackCore
/*
* MIC test
*/
void IContextVoice::runMicrophoneTest() const
void IContextVoice::runMicrophoneTest()
{
this->m_dBusInterface->callDBus(QLatin1Literal("runMicrophoneTest"));
}
/*
* MIC test
* Mic test
*/
void IContextVoice::runSquelchTest() const
void IContextVoice::runSquelchTest()
{
this->m_dBusInterface->callDBus(QLatin1Literal("runSquelchTest"));
}
/*
* Test result
*/
QString IContextVoice::getMicrophoneTestResult() const
{
return this->m_dBusInterface->callDBusRet<QString>(QLatin1Literal("getMicrophoneTestResult"));
}
/*
* Squelch value
*/
double IContextVoice::getSquelchValue() const
{
return this->m_dBusInterface->callDBusRet<double>(QLatin1Literal("getSquelchValue"));
}
/*
* Volumes, by COM systems
*/

View File

@@ -201,13 +201,28 @@ namespace BlackCore
/*!
* \brief Microphone test
*/
virtual void runMicrophoneTest() const;
virtual void runMicrophoneTest();
/*!
* \brief Microphone test
*/
virtual void runSquelchTest() const;
virtual void runSquelchTest();
/*!
* \brief Get the microphone test result
*/
virtual QString getMicrophoneTestResult() const;
/*!
* \brief Get the squelch value
*/
virtual double getSquelchValue() const;
signals:
/*!
* \brief Audio test has been completed
*/
void audioTestCompleted();
};
}

View File

@@ -112,7 +112,7 @@ namespace BlackCore
*/
void CVoiceVatlib::setInputDevice(const BlackMisc::Voice::CAudioDevice &device)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
if (!device.isValid())
{
qWarning() << "Cannot set invalid input device!";
@@ -142,7 +142,7 @@ namespace BlackCore
*/
void CVoiceVatlib::setOutputDevice(const BlackMisc::Voice::CAudioDevice &device)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
if (!device.isValid())
{
qWarning() << "Cannot set invalid output device!";
@@ -170,7 +170,7 @@ namespace BlackCore
*/
BlackMisc::Voice::CVoiceRoomList CVoiceVatlib::getComVoiceRoomsWithAudioStatus() const
{
Q_ASSERT_X(m_voiceRooms.size() == 2, "CVoiceClientVatlib", "Wrong numer of COM voice rooms");
Q_ASSERT_X(m_voiceRooms.size() == 2, "CVoiceVatlib", "Wrong numer of COM voice rooms");
CVoiceRoomList voiceRooms;
if (m_voice->IsValid() && m_voice->IsSetup())
{
@@ -208,8 +208,8 @@ namespace BlackCore
*/
void CVoiceVatlib::switchAudioOutput(const ComUnit comUnit, bool enable)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceClientVatlib", "Room index out of bounds!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceVatlib", "Room index out of bounds!");
try
{
m_voice->SetOutoutState(static_cast<qint32>(comUnit), 0, enable);
@@ -226,7 +226,7 @@ namespace BlackCore
*/
void CVoiceVatlib::runSquelchTest()
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
try
{
@@ -246,19 +246,18 @@ namespace BlackCore
*/
void CVoiceVatlib::runMicrophoneTest()
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
try
{
m_voice->BeginMicTest();
// Start the timer only if no exception was thrown before
QTimer::singleShot(5000, this, SLOT(onEndMicTest()));
}
catch (...)
{
this->exceptionDispatcher(Q_FUNC_INFO);
}
// Start the timer only if no exception was thrown before
QTimer::singleShot(5000, this, SLOT(onEndMicTest()));
}
/*
@@ -321,8 +320,8 @@ namespace BlackCore
*/
void CVoiceVatlib::joinVoiceRoom(const ComUnit comUnit, const BlackMisc::Voice::CVoiceRoom &voiceRoom)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceClientVatlib", "Room index out of bounds!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceVatlib", "Room index out of bounds!");
if (!voiceRoom.isValid())
{
@@ -354,8 +353,8 @@ namespace BlackCore
CVoiceRoom vr = this->voiceRoomForUnit(comUnit);
if (!vr.isConnected()) return;
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceClientVatlib", "Room index out of bounds!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceVatlib", "Room index out of bounds!");
try
{
@@ -383,8 +382,8 @@ namespace BlackCore
*/
void CVoiceVatlib::setRoomOutputVolume(const ComUnit comUnit, const qint32 volume)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceClientVatlib", "Room index out of bounds!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceVatlib", "Room index out of bounds!");
try
{
@@ -401,8 +400,8 @@ namespace BlackCore
*/
void CVoiceVatlib::startTransmitting(const ComUnit comUnit)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceClientVatlib", "Room index out of bounds!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceVatlib", "Room index out of bounds!");
try
{
@@ -419,8 +418,8 @@ namespace BlackCore
*/
void CVoiceVatlib::stopTransmitting(const ComUnit comUnit)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceClientVatlib", "Room index out of bounds!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsRoomValid(static_cast<qint32>(comUnit)), "CVoiceVatlib", "Room index out of bounds!");
try
{
m_voice->SetMicState(static_cast<qint32>(comUnit), false);
@@ -486,7 +485,7 @@ namespace BlackCore
*/
void CVoiceVatlib::timerEvent(QTimerEvent *)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
try
{
@@ -504,7 +503,7 @@ namespace BlackCore
*/
void CVoiceVatlib::onEndFindSquelch()
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
try
{
@@ -520,7 +519,7 @@ namespace BlackCore
void CVoiceVatlib::onEndMicTest()
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
try
{
@@ -538,7 +537,7 @@ namespace BlackCore
*/
void CVoiceVatlib::onUserJoinedLeft(const ComUnit comUnit)
{
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceClientVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
Q_ASSERT_X(m_temporaryUserRoomIndex == CVoiceVatlib::InvalidRoomIndex, "CVoiceClientVatlib::onUserJoinedLeft", "Cannot list users for two rooms in parallel!");
try
{