| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | /* * Copyright 2018 Scytl Secure Electronic Voting SA * * All rights reserved * * See our extended copyright notice in *file 'Copyright.txt' which is part of this source code package *//* jshint node:true */'use strict';var math = require('./math');module.exports = DeviceMotionCollector;var motionX_, motionY_, motionZ_;var collectEntropy_ = function() {};function DeviceMotionCollector(collectEntropyCallback) {  collectEntropy_ = collectEntropyCallback;}DeviceMotionCollector.prototype = {  handleEvent: function(ev) {    ev = ev || window.event;    var acceleration = ev.accelerationIncludingGravity;    var currentX = (math.entropyRound(acceleration.x) || 0);    var currentY = (math.entropyRound(acceleration.y) || 0);    var currentZ = (math.entropyRound(acceleration.z) || 0);    var rotation = ev.rotationRate;    if (rotation !== null) {      currentX += math.entropyRound(rotation.alpha);      currentY += math.entropyRound(rotation.beta);      currentZ += math.entropyRound(rotation.gamma);    }    // The API detects and delivers accelerometer data 50 times per    // second    // even if there is any event related, so this is    // a way to control if it really changed or not    if ((motionX_ === null) || (motionY_ === null) || (motionZ_ === null) ||        (motionX_ !== currentX) || (motionY_ !== currentY) ||        (motionZ_ !== currentZ)) {      motionX_ = currentX;      motionY_ = currentY;      motionZ_ = currentZ;      collectEntropy_(currentX + currentY + currentZ + (+new Date()), 1);    }  }};
 |