summaryrefslogtreecommitdiffstats
path: root/src/multimedia/qradiotuner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/qradiotuner.cpp')
-rw-r--r--src/multimedia/qradiotuner.cpp614
1 files changed, 614 insertions, 0 deletions
diff --git a/src/multimedia/qradiotuner.cpp b/src/multimedia/qradiotuner.cpp
new file mode 100644
index 000000000..25f76b83a
--- /dev/null
+++ b/src/multimedia/qradiotuner.cpp
@@ -0,0 +1,614 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qradiotuner.h"
+#include "qmediaservice.h"
+#include "qmediaobject_p.h"
+#include "qradiotunercontrol.h"
+
+#include <QPair>
+
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QRadioTuner
+ \brief The QRadioTuner class provides an interface to the systems analog radio device.
+
+ \inmodule QtMultimedia
+ \ingroup multimedia
+ \since 1.0
+
+ You can control the systems analog radio device using this interface, for example:
+
+ \snippet doc/src/snippets/multimedia-snippets/media.cpp Radio tuner
+
+ The radio object will emit signals for any changes in state such as:
+ bandChanged(), frequencyChanged(), stereoStatusChanged(), searchingChanged(),
+ signalStrengthChanged(), volumeChanged(), mutedChanged().
+
+ You can change between the frequency bands using setBand() however it is recommended
+ that you check to make sure the band is available first using isBandSupported().
+
+*/
+
+
+class QRadioTunerPrivate : public QMediaObjectPrivate
+{
+public:
+ QRadioTunerPrivate():provider(0), control(0) {}
+ QMediaServiceProvider *provider;
+ QRadioTunerControl* control;
+};
+
+
+
+/*!
+ Constructs a radio tuner based on a media service allocated by a media service \a provider.
+
+ The \a parent is passed to QMediaObject.
+ \since 1.0
+*/
+
+QRadioTuner::QRadioTuner(QObject *parent, QMediaServiceProvider* provider):
+ QMediaObject(*new QRadioTunerPrivate, parent, provider->requestService(Q_MEDIASERVICE_RADIO))
+{
+ Q_D(QRadioTuner);
+
+ d->provider = provider;
+
+ if (d->service != 0) {
+ d->control = qobject_cast<QRadioTunerControl*>(d->service->requestControl(QRadioTunerControl_iid));
+ if (d->control != 0) {
+ connect(d->control, SIGNAL(stateChanged(QRadioTuner::State)), SIGNAL(stateChanged(QRadioTuner::State)));
+ connect(d->control, SIGNAL(bandChanged(QRadioTuner::Band)), SIGNAL(bandChanged(QRadioTuner::Band)));
+ connect(d->control, SIGNAL(frequencyChanged(int)), SIGNAL(frequencyChanged(int)));
+ connect(d->control, SIGNAL(stereoStatusChanged(bool)), SIGNAL(stereoStatusChanged(bool)));
+ connect(d->control, SIGNAL(searchingChanged(bool)), SIGNAL(searchingChanged(bool)));
+ connect(d->control, SIGNAL(signalStrengthChanged(int)), SIGNAL(signalStrengthChanged(int)));
+ connect(d->control, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged(int)));
+ connect(d->control, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged(bool)));
+ connect(d->control, SIGNAL(error(QRadioTuner::Error)), SIGNAL(error(QRadioTuner::Error)));
+ }
+ }
+}
+
+/*!
+ Destroys a radio tuner.
+*/
+
+QRadioTuner::~QRadioTuner()
+{
+ Q_D(QRadioTuner);
+
+ if (d->service && d->control)
+ d->service->releaseControl(d->control);
+
+ d->provider->releaseService(d->service);
+}
+
+/*!
+ Returns true if the radio tuner service is ready to use.
+ \since 1.0
+*/
+bool QRadioTuner::isAvailable() const
+{
+ if (d_func()->control != NULL)
+ return d_func()->control->isAvailable();
+ else
+ return false;
+}
+
+/*!
+ Returns the availability error state.
+ \since 1.0
+*/
+QtMultimedia::AvailabilityError QRadioTuner::availabilityError() const
+{
+ if (d_func()->control != NULL)
+ return d_func()->control->availabilityError();
+ else
+ return QtMultimedia::ServiceMissingError;
+}
+
+/*!
+ \property QRadioTuner::state
+ Return the current radio tuner state.
+
+ \since 1.0
+ \sa QRadioTuner::State
+*/
+
+QRadioTuner::State QRadioTuner::state() const
+{
+ return d_func()->control ?
+ d_func()->control->state() : QRadioTuner::StoppedState;
+}
+
+/*!
+ \property QRadioTuner::band
+ \brief the frequency band a radio tuner is tuned to.
+
+ \since 1.0
+ \sa QRadioTuner::Band
+*/
+
+QRadioTuner::Band QRadioTuner::band() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->band();
+
+ return QRadioTuner::FM;
+}
+
+/*!
+ \property QRadioTuner::frequency
+ \brief the frequency in Hertz a radio tuner is tuned to.
+ \since 1.0
+*/
+
+int QRadioTuner::frequency() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->frequency();
+
+ return 0;
+}
+
+/*!
+ Returns the number of Hertz to increment the frequency by when stepping through frequencies
+ within a given \a band.
+ \since 1.0
+*/
+
+int QRadioTuner::frequencyStep(QRadioTuner::Band band) const
+{
+ Q_D(const QRadioTuner);
+
+ if(d->control != 0)
+ return d->control->frequencyStep(band);
+
+ return 0;
+}
+
+/*!
+ Returns a frequency \a band's minimum and maximum frequency.
+ \since 1.0
+*/
+
+QPair<int,int> QRadioTuner::frequencyRange(QRadioTuner::Band band) const
+{
+ Q_D(const QRadioTuner);
+
+ if(d->control != 0)
+ return d->control->frequencyRange(band);
+
+ return qMakePair<int,int>(0,0);
+}
+
+/*!
+ \property QRadioTuner::stereo
+ \brief whether a radio tuner is receiving a stereo signal.
+ \since 1.0
+*/
+
+bool QRadioTuner::isStereo() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->isStereo();
+
+ return false;
+}
+
+
+/*!
+ \property QRadioTuner::stereoMode
+ \brief the stereo mode of a radio tuner.
+ \since 1.0
+*/
+
+QRadioTuner::StereoMode QRadioTuner::stereoMode() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->stereoMode();
+
+ return QRadioTuner::Auto;
+}
+
+void QRadioTuner::setStereoMode(QRadioTuner::StereoMode mode)
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->setStereoMode(mode);
+}
+
+/*!
+ Identifies if a frequency \a band is supported by a radio tuner.
+
+ Returns true if the band is supported, and false if it is not.
+ \since 1.0
+*/
+
+bool QRadioTuner::isBandSupported(QRadioTuner::Band band) const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->isBandSupported(band);
+
+ return false;
+}
+
+/*!
+ Activate the radio device.
+ \since 1.0
+*/
+
+void QRadioTuner::start()
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ d->control->start();
+}
+
+/*!
+ Deactivate the radio device.
+ \since 1.0
+*/
+
+void QRadioTuner::stop()
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ d->control->stop();
+}
+
+/*!
+ \property QRadioTuner::signalStrength
+ \brief the strength of the current radio signal as a percentage.
+ \since 1.0
+*/
+
+int QRadioTuner::signalStrength() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->signalStrength();
+
+ return 0;
+}
+
+/*!
+ \property QRadioTuner::volume
+ \brief the volume of a radio tuner's audio output as a percentage.
+ \since 1.0
+*/
+
+
+int QRadioTuner::volume() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->volume();
+
+ return 0;
+}
+
+/*!
+ \property QRadioTuner::muted
+ \brief whether a radio tuner's audio output is muted.
+ \since 1.0
+*/
+
+bool QRadioTuner::isMuted() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->isMuted();
+
+ return false;
+}
+
+/*!
+ Sets a radio tuner's frequency \a band.
+
+ Changing the band will reset the \l frequency to the new band's minimum frequency.
+ \since 1.0
+*/
+
+void QRadioTuner::setBand(QRadioTuner::Band band)
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ d->control->setBand(band);
+}
+
+/*!
+ Sets a radio tuner's \a frequency.
+
+ If the tuner is set to a frequency outside the current \l band, the band will be changed to
+ one occupied by the new frequency.
+ \since 1.0
+*/
+
+void QRadioTuner::setFrequency(int frequency)
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ d->control->setFrequency(frequency);
+}
+
+void QRadioTuner::setVolume(int volume)
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ d->control->setVolume(volume);
+}
+
+void QRadioTuner::setMuted(bool muted)
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ d->control->setMuted(muted);
+}
+
+/*!
+ \property QRadioTuner::searching
+ \brief whether a radio tuner is currently scanning for a signal.
+
+ \sa searchForward(), searchBackward(), cancelSearch()
+ \since 1.0
+*/
+
+bool QRadioTuner::isSearching() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->isSearching();
+
+ return false;
+}
+
+/*!
+ Starts a forward scan for a signal, starting from the current \l frequency.
+
+ \since 1.0
+ \sa searchBackward(), cancelSearch(), searching
+*/
+
+void QRadioTuner::searchForward()
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ d->control->searchForward();
+}
+
+/*!
+ Starts a backwards scan for a signal, starting from the current \l frequency.
+
+ \since 1.0
+ \sa searchForward(), cancelSearch(), searching
+*/
+
+void QRadioTuner::searchBackward()
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ d->control->searchBackward();
+}
+
+/*!
+ Stops scanning for a signal.
+
+ \since 1.0
+ \sa searchForward(), searchBackward(), searching
+*/
+
+void QRadioTuner::cancelSearch()
+{
+ Q_D(QRadioTuner);
+
+ if (d->control != 0)
+ d->control->cancelSearch();
+}
+
+/*!
+ Returns the error state of a radio tuner.
+
+ \since 1.0
+ \sa errorString()
+*/
+
+QRadioTuner::Error QRadioTuner::error() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->error();
+
+ return QRadioTuner::ResourceError;
+}
+
+/*!
+ Returns a description of a radio tuner's error state.
+
+ \since 1.0
+ \sa error()
+*/
+
+QString QRadioTuner::errorString() const
+{
+ Q_D(const QRadioTuner);
+
+ if (d->control != 0)
+ return d->control->errorString();
+
+ return QString();
+}
+
+/*!
+ \fn void QRadioTuner::bandChanged(QRadioTuner::Band band)
+
+ Signals a radio tuner's \a band has changed.
+ \since 1.0
+*/
+
+/*!
+ \fn void QRadioTuner::frequencyChanged(int frequency)
+
+ Signals that the \a frequency a radio tuner is tuned to has changed.
+ \since 1.0
+*/
+
+/*!
+ \fn void QRadioTuner::mutedChanged(bool muted)
+
+ Signals that the \a muted state of a radio tuner's audio output has changed.
+ \since 1.0
+*/
+
+/*!
+ \fn void QRadioTuner::volumeChanged(int volume)
+
+ Signals that the \a volume of a radio tuner's audio output has changed.
+ \since 1.0
+*/
+
+/*!
+ \fn void QRadioTuner::searchingChanged(bool searching)
+
+ Signals that the \a searching state of a radio tuner has changed.
+ \since 1.0
+*/
+
+/*!
+ \fn void QRadioTuner::stereoStatusChanged(bool stereo)
+
+ Signals that the \a stereo state of a radio tuner has changed.
+ \since 1.0
+*/
+
+/*!
+ \fn void QRadioTuner::signalStrengthChanged(int strength)
+
+ Signals that the \a strength of the signal received by a radio tuner has changed.
+ \since 1.0
+*/
+
+/*!
+ \fn void QRadioTuner::error(QRadioTuner::Error error)
+
+ Signals that an \a error occurred.
+ \since 1.0
+*/
+
+/*!
+ \enum QRadioTuner::State
+
+ Enumerates radio tuner states.
+
+ \value ActiveState The tuner is started and active.
+ \value StoppedState The tuner device is stopped.
+*/
+
+
+/*!
+ \enum QRadioTuner::Band
+
+ Enumerates radio frequency bands.
+
+ \value AM 520 to 1610 kHz, 9 or 10kHz channel spacing, extended 1610 to 1710 kHz
+ \value FM 87.5 to 108.0 MHz, except Japan 76-90 MHz
+ \value SW 1.711 to 30.0 MHz, divided into 15 bands. 5kHz channel spacing
+ \value LW 148.5 to 283.5 kHz, 9kHz channel spacing (Europe, Africa, Asia)
+ \value FM2 range not defined, used when area supports more than one FM range.
+*/
+
+/*!
+ \enum QRadioTuner::Error
+
+ Enumerates radio tuner error conditions.
+
+ \value NoError No errors have occurred.
+ \value ResourceError There is no radio service available.
+ \value OpenError Unable to open radio device.
+ \value OutOfRangeError An attempt to set a frequency or band that is not supported by radio device.
+*/
+
+/*!
+ \enum QRadioTuner::StereoMode
+
+ Enumerates radio tuner policy for receiving stereo signals.
+
+ \value Auto Uses the stereo mode matching the station.
+ \value ForceStereo Provide stereo mode, converting if required.
+ \value ForceMono Provide mono mode, converting if required.
+*/
+
+/*! \fn void QRadioTuner::stateChanged(QRadioTuner::State state)
+ This signal is emitted when the state changes to \a state.
+ \since 1.0
+ */
+
+#include "moc_qradiotuner.cpp"
+QT_END_NAMESPACE
+