1/*
2 Copyright (C) 2011 Samsung Electronics
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19
20#include "config.h"
21#include "Vibrator.h"
22
23#if ENABLE(VIBRATION)
24
25#include "VibratorClient.h"
26
27namespace WebCore {
28
29Vibrator::Vibrator(VibratorClient* vibratorClient)
30 : m_vibratorClient(vibratorClient)
31 , m_timer(this, &Vibrator::timerFired)
32 , m_isVibrating(false)
33{
34}
35
36void Vibrator::vibrate(const VibrationPattern& pattern)
37{
38 int length = pattern.size();
39
40 if (!length) {
41 if (m_isVibrating)
42 cancelVibrate();
43 return;
44 }
45
46 if (length == 1 && !pattern[0]) {
47 if (m_isVibrating)
48 cancelVibrate();
49 return;
50 }
51
52 if (!m_isVibrating && !m_timer.isActive()) {
53 m_pattern = pattern;
54 m_timer.startOneShot(0);
55 }
56}
57
58void Vibrator::cancelVibrate()
59{
60 m_vibratorClient->cancelVibrate();
61}
62
63bool Vibrator::isSupport()
64{
65 return m_vibratorClient->isSupport();
66}
67
68void Vibrator::timerFired(Timer<Vibrator>* timer)
69{
70 ASSERT_UNUSED(timer, timer == &m_timer);
71 m_timer.stop();
72 m_vibratorClient->vibrate(m_pattern[0]);
73
74 if (m_pattern.size() <= 2)
75 return;
76
77 m_timer.startOneShot(m_pattern[0] + m_pattern[1]);
78 m_pattern.remove(0, 2);
79}
80
81}
82
83#endif
84