UNPKG

react-native-attitude

Version:

Obtain device attitude (roll, pitch and heading)

92 lines (78 loc) 2.49 kB
'use strict'; import {NativeEventEmitter, NativeModules} from 'react-native'; const {RNAttitude} = NativeModules; const AttitudeEventEmitter = new NativeEventEmitter(RNAttitude); let attitudeSubscriptions = []; let attitudeUpdatesEnabled = false; const Attitude = { // Starts watching/observing of attitude // The success function is called upon every change watch: function(success) { if (!attitudeUpdatesEnabled) { RNAttitude.startObserving(); attitudeUpdatesEnabled = true; } const watchID = attitudeSubscriptions.length; attitudeSubscriptions.push(AttitudeEventEmitter.addListener('attitudeUpdate', success)); return watchID; }, // Stops all watching/observing of the passed in watch ID clearWatch: function(watchID) { const sub = attitudeSubscriptions[watchID]; if (!sub) { // Silently exit when the watchID is invalid or already cleared return; } sub.remove(); // removes the listener attitudeSubscriptions[watchID] = undefined; // check for any remaining watchers let noWatchers = true; for (let ii = 0; ii < attitudeSubscriptions.length; ii++) { if (attitudeSubscriptions[ii]) { noWatchers = false; // still valid watchers } } if (noWatchers) { RNAttitude.stopObserving(); attitudeUpdatesEnabled = false; } }, // Stop all watching/observing stopObserving: function() { let ii = 0; RNAttitude.stopObserving(); for (ii = 0; ii < attitudeSubscriptions.length; ii++) { const sub = attitudeSubscriptions[ii]; if (sub) { sub.remove(); } } attitudeSubscriptions = []; attitudeUpdatesEnabled = false; }, // Zeros the baseline attitude based on our current attitude zero: function() { RNAttitude.zero(); }, // Resets the attitude reference reset: function() { RNAttitude.reset(); }, // Indicates if barometer updates are available on this device isSupported: async function() { return await RNAttitude.isSupported(); }, // Sets the desired output to either 'heading', 'attitude' or 'both' setOutput: function(output) { RNAttitude.setOutput(output); }, // Sets the interval between event samples setInterval: function(interval) { RNAttitude.setInterval(interval); }, // Sets the device rotation to either 'none', 'left' or 'right' setRotation: function(rotation) { RNAttitude.setRotation(rotation); } }; export default Attitude;