bool CanCalibrate(CalibrationAxes calibrationAxes)
        {
            bool result = false;

            lock (sampleBuffer)
            {
                if (DeviceStable)
                {
                    double accelerationMagnitude = 0;
                    if (calibrationAxes == CalibrationAxes.XAxis)
                    {
                        accelerationMagnitude += averageAcceleration.X * averageAcceleration.X;
                    }

                    if (calibrationAxes == CalibrationAxes.YAxis)
                    {
                        accelerationMagnitude += averageAcceleration.Y * averageAcceleration.Y;
                    }
                    accelerationMagnitude = Math.Sqrt(accelerationMagnitude);

                    if (accelerationMagnitude <= maximumCalibrationOffset)
                    {
                        /* Inclination is not out of bounds
                         * to consider it a calibration offset. */
                        result = true;
                    }
                }
            }
            return(result);
        }
        bool Calibrate(CalibrationAxes calibrationAxes)
        {
            bool result = false;

            lock (sampleBuffer)
            {
                if (CanCalibrate(calibrationAxes))
                {
                    CalibrationOffset = new ThreeDimensionalVector(
                        calibrationAxes == CalibrationAxes.XAxis ? -averageAcceleration.X : CalibrationOffset.X,
                        calibrationAxes == CalibrationAxes.YAxis ? -averageAcceleration.Y : CalibrationOffset.Y,
                        0);
                    /* Persist data. */
                    SetCalibrationSetting(CalibrationOffset);
                    result = true;
                }
            }
            return(result);
        }
        bool CanCalibrate(CalibrationAxes calibrationAxes)
        {
            bool result = false;

            lock (sampleBuffer)
            {
                if (DeviceStable)
                {
                    double accelerationMagnitude = 0;
                    if (calibrationAxes == CalibrationAxes.XAxis)
                    {
                        accelerationMagnitude += averageAcceleration.X * averageAcceleration.X;
                    }

                    if (calibrationAxes == CalibrationAxes.YAxis)
                    {
                        accelerationMagnitude += averageAcceleration.Y * averageAcceleration.Y;
                    }
                    accelerationMagnitude = Math.Sqrt(accelerationMagnitude);

                    if (accelerationMagnitude <= maximumCalibrationOffset)
                    {
                        /* Inclination is not out of bounds
                         * to consider it a calibration offset. */
                        result = true;
                    }
                }
            }
            return result;
        }
        bool Calibrate(CalibrationAxes calibrationAxes)
        {
            bool result = false;

            lock (sampleBuffer)
            {
                if (CanCalibrate(calibrationAxes))
                {
                    CalibrationOffset = new ThreeDimensionalVector(
                            calibrationAxes == CalibrationAxes.XAxis ? -averageAcceleration.X : CalibrationOffset.X,
                            calibrationAxes == CalibrationAxes.YAxis ? -averageAcceleration.Y : CalibrationOffset.Y,
                            0);
                    /* Persist data. */
                    SetCalibrationSetting(CalibrationOffset);
                    result = true;
                }
            }
            return result;
        }