From 3b2619f97a487f2612ff20d62335b32a1ff67e5c Mon Sep 17 00:00:00 2001
From: Pawel Wasowski
Date: Fri, 21 Jul 2017 14:48:31 +0200
Subject: [PATCH] [Sensor] Add acceleration sensor implementation
[Verification] The code was tested in Chrome Dev Tools console and
worked fine.
Change-Id: I56347e6f0ac2b71ff18d96d1b854b600a30a5dd2
Signed-off-by: Pawel Wasowski
---
src/sensor/sensor_api.js | 53 ++++++++++++++++++++++++++++++++++--
src/sensor/sensor_service.cc | 7 +++++
2 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/src/sensor/sensor_api.js b/src/sensor/sensor_api.js
index 609780c8..65ef8988 100755
--- a/src/sensor/sensor_api.js
+++ b/src/sensor/sensor_api.js
@@ -35,7 +35,8 @@ var SensorType = {
GYROSCOPE_ROTATION_VECTOR : 'GYROSCOPE_ROTATION_VECTOR',
LINEAR_ACCELERATION : 'LINEAR_ACCELERATION',
MAGNETIC_UNCALIBRATED : 'MAGNETIC_UNCALIBRATED',
- GYROSCOPE_UNCALIBRATED : 'GYROSCOPE_UNCALIBRATED'
+ GYROSCOPE_UNCALIBRATED : 'GYROSCOPE_UNCALIBRATED',
+ ACCELERATION : 'ACCELERATION'
};
var ProximityState = {
@@ -161,7 +162,8 @@ var _sensorListeners = {
'GYROSCOPE_ROTATION_VECTOR' : {},
'LINEAR_ACCELERATION' : {},
'MAGNETIC_UNCALIBRATED' : {},
- 'GYROSCOPE_UNCALIBRATED' : {}
+ 'GYROSCOPE_UNCALIBRATED' : {},
+ 'ACCELERATION' : {}
};
var errorWrapper = function (err) {
@@ -234,7 +236,9 @@ function getDefaultSensor() {
} else if (_supportedSensors[index] === SensorType.MAGNETIC_UNCALIBRATED) {
return new MagneticUncalibratedSensor();
} else if (_supportedSensors[index] === SensorType.GYROSCOPE_UNCALIBRATED) {
- return new GyroscopeUncalibratedSensor();
+ return new GyroscopeUncalibratedSensor();
+ } else if (_supportedSensors[index] === SensorType.ACCELERATION) {
+ return new AccelerationSensor();
}
};
@@ -659,6 +663,32 @@ GyroscopeUncalibratedSensor.prototype.getGyroscopeUncalibratedSensorData = funct
_sensorListeners[this.sensorType].getData(args.successCallback, errorWrapper.bind(args));
};
+//// AccelerationSensor
+var AccelerationSensor = function(data) {
+ Sensor.call(this, SensorType.ACCELERATION);
+};
+
+AccelerationSensor.prototype = new Sensor();
+
+AccelerationSensor.prototype.constructor = Sensor;
+
+AccelerationSensor.prototype.getAccelerationSensorData = function() {
+ var args = validator_.validateArgs(arguments, [
+ {
+ name : 'successCallback',
+ type : types_.FUNCTION
+ },
+ {
+ name : 'errorCallback',
+ type : types_.FUNCTION,
+ optional : true,
+ nullable : true
+ }
+ ]);
+
+ _sensorListeners[this.sensorType].getData(args.successCallback, errorWrapper.bind(args));
+};
+
////////////////////// Sensor Data classes/////////////////////////////////////////////////////
////Base SensorData class
var SensorData = function () {
@@ -870,6 +900,23 @@ SensorGyroscopeUncalibratedData.prototype.constructor = SensorData;
_sensorListeners[SensorType.GYROSCOPE_UNCALIBRATED] = new SensorListener(SensorType.GYROSCOPE_UNCALIBRATED,
SensorGyroscopeUncalibratedData);
+//// SensorAccelerationData
+var SensorAccelerationData = function(data) {
+ SensorData.call(this);
+ Object.defineProperties(this, {
+ x : {value: data.x, writable: false, enumerable: true},
+ y : {value: data.y, writable: false, enumerable: true},
+ z : {value: data.z, writable: false, enumerable: true},
+ });
+};
+
+SensorAccelerationData.prototype = new SensorData();
+
+SensorAccelerationData.prototype.constructor = SensorData;
+
+_sensorListeners[SensorType.ACCELERATION] = new SensorListener(SensorType.ACCELERATION,
+ SensorAccelerationData);
+
//////////////////////SensorHardwareInfo classes//////////////////////////////////////////////////////////
function SensorHardwareInfo(data) {
Object.defineProperties(this, {
diff --git a/src/sensor/sensor_service.cc b/src/sensor/sensor_service.cc
index 9e3164af..dd59b8ad 100755
--- a/src/sensor/sensor_service.cc
+++ b/src/sensor/sensor_service.cc
@@ -146,6 +146,12 @@ void ReportSensorData(sensor_type_e sensor_type, sensor_event_s* sensor_event,
(*out)["zAxisDrift"] = picojson::value(static_cast(sensor_event->values[5]));
break;
}
+ case SENSOR_ACCELEROMETER: {
+ (*out)["x"] = picojson::value(static_cast(sensor_event->values[0]));
+ (*out)["y"] = picojson::value(static_cast(sensor_event->values[1]));
+ (*out)["z"] = picojson::value(static_cast(sensor_event->values[2]));
+ break;
+ }
default: {
LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unsupported type"), out);
return;
@@ -848,6 +854,7 @@ SensorService::SensorService(SensorInstance& instance)
AddSensor(new SensorData(instance, SENSOR_LINEAR_ACCELERATION, "LINEAR_ACCELERATION", 3));
AddSensor(new SensorData(instance, SENSOR_GEOMAGNETIC_UNCALIBRATED, "MAGNETIC_UNCALIBRATED", 6));
AddSensor(new SensorData(instance, SENSOR_GYROSCOPE_UNCALIBRATED, "GYROSCOPE_UNCALIBRATED", 6));
+ AddSensor(new SensorData(instance, SENSOR_ACCELEROMETER, "ACCELERATION", 3));
}
SensorService::~SensorService() {
--
2.34.1