/* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ #include #include "accelerometer.h" DeviceMotion::DeviceMotion(Cordova *cordova): CPlugin(cordova), _scId(0), _ecId(0) { _accelerometerSource = QSharedPointer(new QAccelerometer()); _sensorAvaliable = _accelerometerSource->start(); connect(_accelerometerSource.data(), SIGNAL(readingChanged()), SLOT(updateSensor())); } void DeviceMotion::start(int scId, int ecId) { assert(_ecId == 0); assert(_scId == 0); _ecId = ecId; _scId = scId; if (!_sensorAvaliable) { this->cb(ecId); return; } } void DeviceMotion::stop(int, int) { _scId = 0; _ecId = 0; } void DeviceMotion::updateSensor() { QAccelerometerReading *accelerometer = _accelerometerSource->reading(); QVariantMap obj; obj.insert("x", accelerometer->x()); obj.insert("y", accelerometer->y()); obj.insert("z", accelerometer->z()); // accelerometer->timestamp() is not sutiable. // Timestamps values are microseconds since _a_ fixed point(depend on backend). obj.insert("timestamp", QDateTime::currentDateTime().toMSecsSinceEpoch()); if (_scId) this->callbackWithoutRemove(_scId, CordovaInternal::format(obj)); }