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