summaryrefslogtreecommitdiffstats
path: root/src/feedback/qfeedbackactuator.cpp
blob: edbfd9477f38083976afe6dc70d6d1b9d7d9b522 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
/****************************************************************************
**
** 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 Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, 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.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include "qfeedbackactuator.h"
#include "qfeedbackplugininterfaces.h"

#include <QtCore/QVariant>

QTM_BEGIN_NAMESPACE

/*!
    \class QFeedbackActuator
    \brief The QFeedbackActuator class describes actuators for tactile feedback.
    \inmodule QtFeedback
    \since 1.1

    An actuator knows how to play a \l{QFeedbackEffect}{tactile
    effect}. The class gives access to a specified actuator.

    An actuator can be used to play \l{QFeedbackHapticsEffect}s using
    \l{QFeedbackHapticsEffect::}{setActuator()}. Usually, you will not
    have to set an actuator directly on a QFeedbackHapticsEffect.
    QFeedbackHapticsEffect and QFeedbackFileEffect uses an appropriate
    actuator by default. However, you can query which actuators
    are available with actuators().

    \code
     QFeedbackActuator actuator; // default system actuator
     QList<QFeedbackActuator> actuators = QFeedbackActuator::actuators();
     foreach (const QFeedbackActuator& temp, actuators) {
         if (temp.name() == "ExampleActuatorName") {
             actuator = temp;
         }
     }
    \endcode

    The QFeedbackActuator class gives access to information about the
    actuator it represents. You can query if the actuator \l{isEnabled()}{is enabled}
    and if it \l{isValid()}{is valid }. Whether an actuator is ready to play an
    effect can be queried by checking the actuator's state(). The
    \l{QFeedbackActuator::}{State} enum describes the states and
    actuator can have. You can also get a human readable name for the actuator with the
    name() function.

    \sa QFeedbackHapticsEffect QFeedbackFileEffect QFeedbackEffect
*/

/*!
    \enum QFeedbackActuator::Capability

    \value Envelope Capability defining the wave type with attack/fade times and levels.
    \value Period   Capability defining that the device can play periodic effects.
*/

/*!
    \enum QFeedbackActuator::State

    \value Busy    The actuator is busy.
    \value Ready   The actuator is ready to play an effect.
    \value Unknown The actuator is in an unknown state.
*/


/*!
    Constructs a QFeedbackActuator, passing \a parent to the QObject constructor.

    The object will represent the default actuator on the system.
    If there are no actuators attached to the system, isValid() will return false.

    \sa isValid()
*/
QFeedbackActuator::QFeedbackActuator(QObject *parent) : QObject(parent), m_id(-1)
{
    QList<QFeedbackActuator*> list = actuators();
    if  (!list.isEmpty()) {
        QFeedbackActuator* defaultActuator = list.first();
        m_id = defaultActuator->id();
    }
}

/*!
    Constructs a QFeedbackActuator with id \a id, passing \a parent to the QObject constructor.

    This is used by plugins to represents their actuators.

    \sa isValid()
*/
QFeedbackActuator::QFeedbackActuator(QObject *parent, int id) : QObject(parent), m_id(id)
{
}

/*!
    \property QFeedbackActuator::id
    \brief id of the feedback actuator.
*/

/*!
    Returns the id of the actuator.
*/
int QFeedbackActuator::id() const
{
    return m_id;
}

/*!
    \property QFeedbackActuator::valid
    \brief validity of the feedback actuator
*/

/*!
    Returns true if the actuator is valid.
*/
bool QFeedbackActuator::isValid() const
{
    return m_id >= 0;
}

/*!
    \property QFeedbackActuator::name
    \brief name of the feedback actuator
*/

/*!
    Returns the name of the actuator.
*/
QString QFeedbackActuator::name() const
{
    return QFeedbackHapticsInterface::instance()->actuatorProperty(*this, QFeedbackHapticsInterface::Name).toString();
}

/*!
    \property QFeedbackActuator::state
    \brief state of the feedback actuator
*/

/*!
    Returns the state of the actuator.
*/
QFeedbackActuator::State QFeedbackActuator::state() const
{
    return QFeedbackActuator::State(QFeedbackHapticsInterface::instance()->actuatorProperty(*this, QFeedbackHapticsInterface::State).toInt());
}

/*!
    Returns if the actuator supports the supplied \a capability.
*/
bool QFeedbackActuator::isCapabilitySupported(Capability capability) const
{
    return QFeedbackHapticsInterface::instance()->isActuatorCapabilitySupported(*this, capability);
}

/*!
    \property QFeedbackActuator::enabled
    \brief whether the feedback actuator is enabled
*/

/*!
    Returns true if you can use this actuator to start effects.
*/
bool QFeedbackActuator::isEnabled() const
{
    return QFeedbackHapticsInterface::instance()->actuatorProperty(*this, QFeedbackHapticsInterface::Enabled).toBool();
}

/*!
    Allows you to enable or disable a actuator.  If \a enabled is true, the actuator will be enabled,
    and otherwise it will be disabled.

    \note Some systems may not allow you to change whether an actuator is enabled.
*/
void QFeedbackActuator::setEnabled(bool enabled)
{
    if (isEnabled() != enabled) {
        QFeedbackHapticsInterface::instance()->setActuatorProperty(*this, QFeedbackHapticsInterface::Enabled, enabled);
        emit enabledChanged();
    }
}

/*!
    \fn void QFeedbackActuator::enabledChanged()

    This signal is emitted when the actuator is requested to enable or disable itself.

    \sa isEnabled()
*/

/*!
    \fn QFeedbackActuator::actuators()

    Returns the list of actuators available on the system.
*/
QList<QFeedbackActuator*> QFeedbackActuator::actuators()
{
    return QFeedbackHapticsInterface::instance()->actuators();
}

/*!
    \fn QFeedbackActuator::operator==(const QFeedbackActuator &other) const

    Returns true if this actuator is equal to \a other.
*/
bool QFeedbackActuator::operator==(const QFeedbackActuator &other) const
{
    return m_id == other.m_id;
}

#include "moc_qfeedbackactuator.cpp"

QTM_END_NAMESPACE