| Index: arch/arm/mach-tegra/nv/include/nvodm_accelerometer.h
|
| diff --git a/arch/arm/mach-tegra/nv/include/nvodm_accelerometer.h b/arch/arm/mach-tegra/nv/include/nvodm_accelerometer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..54efabc240e5e4c34f6018bc0fe314c4dc63ac0f
|
| --- /dev/null
|
| +++ b/arch/arm/mach-tegra/nv/include/nvodm_accelerometer.h
|
| @@ -0,0 +1,414 @@
|
| +/*
|
| + * Copyright (c) 2006-2009 NVIDIA Corporation.
|
| + * All rights reserved.
|
| + *
|
| + * Redistribution and use in source and binary forms, with or without
|
| + * modification, are permitted provided that the following conditions are met:
|
| + *
|
| + * Redistributions of source code must retain the above copyright notice,
|
| + * this list of conditions and the following disclaimer.
|
| + *
|
| + * Redistributions in binary form must reproduce the above copyright notice,
|
| + * this list of conditions and the following disclaimer in the documentation
|
| + * and/or other materials provided with the distribution.
|
| + *
|
| + * Neither the name of the NVIDIA Corporation nor the names of its contributors
|
| + * may be used to endorse or promote products derived from this software
|
| + * without specific prior written permission.
|
| + *
|
| + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
| + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
| + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
| + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
| + * POSSIBILITY OF SUCH DAMAGE.
|
| + *
|
| + */
|
| +
|
| +/**
|
| + * @file
|
| + * <b>NVIDIA Tegra ODM Kit:
|
| + * Accelerometer Interface</b>
|
| + *
|
| + * @b Description: Defines the ODM interface for accelerometer devices.
|
| + *
|
| + */
|
| +
|
| +#ifndef INCLUDED_NVODM_ACCELEROMETER_H
|
| +#define INCLUDED_NVODM_ACCELEROMETER_H
|
| +
|
| +#if defined(__cplusplus)
|
| +extern "C"
|
| +{
|
| +#endif
|
| +
|
| +#include "nvodm_services.h"
|
| +#include "nvassert.h"
|
| +
|
| +/**
|
| + * @defgroup nvodm_accelerometer Accelerometer Adapation Interface
|
| + *
|
| + * This is the accelerometer ODM adaptation interface. Currently, only 3-axis
|
| + * accelerometers are supported by this interface.
|
| + *
|
| + * This section shows the calls made by the NVIDIA® Driver Development Kit
|
| + * (DDK) accelerometer.
|
| + *
|
| + * @par Physical Accelerometer
|
| + *
|
| + * All applications share the same physical accelerometer.
|
| + *
|
| + * @par Sample Rate
|
| + *
|
| + * Every application has its own sample rate in Hz (samples/second).
|
| + * You can set the sample rate with the NvOdmAccelSetSampleRate() function,
|
| + * or you can request the sample rate using the NvOdmAccelGetSampleRate()
|
| + * function.
|
| + *
|
| + *
|
| + * @par Motion/Tap Interrupt Trigger
|
| + *
|
| + * Applications can decide to accept motion/tap interrupts in NvOdmAccelOpen().
|
| + * The motion/tap interrupt threshold is set by the driver. The application
|
| + * can get a message queue name by \c NvOdmAccelOpen, and then use the name to
|
| + * create a Windows message queue. Then the application can read interrupt
|
| + * information from the queue.
|
| + *
|
| + * See also <a class="el" href="group__nvodm__example__accel.html">Examples:
|
| + * Accelerometer</a>
|
| + *
|
| + * @ingroup nvodm_adaptation
|
| + * @{
|
| + */
|
| +/**
|
| + * @brief Opaque handle to the vibrate device.
|
| + */
|
| +typedef struct NvOdmAccelRec *NvOdmAcrDeviceHandle;
|
| +
|
| +/**
|
| + * Defines interrupt events that accelerometers may generate during
|
| + * operation.
|
| + */
|
| +
|
| +typedef enum
|
| +{
|
| + /// Indicates that no interrupt has been generated (this value is returned
|
| + /// when interrupt time-outs occur).
|
| + NvOdmAccelInt_None = 0,
|
| +
|
| + /// Indicates that an interrupt has been generated due to motion across
|
| + /// any axis crossing the specified threshold level.
|
| + NvOdmAccelInt_MotionThreshold,
|
| +
|
| + /// Indicates that an interrupt has been generated due to a swinging
|
| + /// (forward and back motion) ocurring within the specified time threshold.
|
| + NvOdmAccelInt_TapThreshold,
|
| +
|
| + /// Indicates that an interrupt has been generated due to detection of
|
| + /// linear freefall motion.
|
| + NvOdmAccelInt_Freefall,
|
| +
|
| + NvOdmAccelInt_Num,
|
| +
|
| + /// Ignore -- Forces compilers to make 32-bit enums.
|
| + NvOdmAccelInt_Force32 = 0x7fffffffUL,
|
| +} NvOdmAccelIntType;
|
| +
|
| +/**
|
| + * Defines axis types for accelerometer. Interrupts are trigger by the axis.
|
| + * An interrupt is triggered for enabled interrupts whenever a forced value
|
| + * on an axis is greater than the threshold.
|
| + */
|
| +typedef enum {
|
| + NvOdmAccelAxis_None = 0x0,
|
| + NvOdmAccelAxis_X = 0x1,
|
| + NvOdmAccelAxis_Y = 0x2,
|
| + NvOdmAccelAxis_Z = 0x4,
|
| + NvOdmAccelAxis_All = 0x7,
|
| + NvOdmAccelAxis_Force32 = 0x7fffffffUL,
|
| +} NvOdmAccelAxisType;
|
| +
|
| +/**
|
| + * Defines the accelerometer power state.
|
| + */
|
| +typedef enum {
|
| + /// Specifies the accelerometer is working normally -- sample rate is high.
|
| + NvOdmAccelPower_Fullrun = 0,
|
| + /// Specifies the accelerometer is working normally -- sample rate is lower
|
| + /// than \c NvOdmAccelPower_Fullrun.
|
| + NvOdmAccelPower_Low,
|
| + /// Specifies the accelerometer is not working, but the power supply is there.
|
| + NvOdmAccelPower_Standby,
|
| + /// Specifies the accelerometer is not working, and there is no power supply
|
| + /// to the device.
|
| + NvOdmAccelPower_Off,
|
| + NvOdmAccelPower_None,
|
| + /// Ignore -- Forces compilers to make 32-bit enums.
|
| + NvOdmAccelPower_Force32 =0x7fffffffUL,
|
| +} NvOdmAccelPowerType;
|
| +
|
| +/**
|
| + * Holds device-specific accelerometer capabilities.
|
| + */
|
| +typedef struct NvOdmAccelCapsRec
|
| +{
|
| + /// Holds the maximum force in g-force (\em g) registered by this
|
| + /// accelerometer.
|
| + /// The value is in increments of 1000. For example, when the maximum
|
| + /// force is 2 \em g, the value should return 2000.
|
| + NvU32 MaxForceInGs;
|
| +
|
| + /// Holds the size of the register for the g-force values in bits.
|
| + /// This is to specify the resolution of the force value range.
|
| + NvU32 ForceResolution;
|
| +
|
| + /// Holds the number of motion thresholds that clients may use to generate
|
| + /// interrupts. 0 indicates that no threshold motion interrupts
|
| + /// are supported.
|
| + NvU32 NumMotionThresholds;
|
| +
|
| + /// Holds the maximum amount of time in microseconds (Usecs) that may
|
| + /// be specified as the threshold for a tap-style interrupt. 0
|
| + /// indicates that tap interrupts are not supported by the accelerometer.
|
| + NvU32 MaxTapTimeDeltaInUs;
|
| +
|
| + /// Holds TRUE if the accelerometer can generate an interrupt when
|
| + /// linear free-fall motion is detected.
|
| + NvBool SupportsFreefallInt;
|
| +
|
| + /// Holds the maximum sample rate the accelerometer supports.
|
| + NvU32 MaxSampleRate;
|
| +
|
| + /// Holds the minimum sample rate the accelerometer supports.
|
| + NvU32 MinSampleRate;
|
| +} NvOdmAccelerometerCaps;
|
| +
|
| +/// Opaque handle to an accelerometer object.
|
| +typedef struct NvOdmAccelRec *NvOdmAccelHandle;
|
| +
|
| +
|
| +/**
|
| + * Initializes the accelerometer and allocates resources used by the ODM
|
| + * adaptation driver.
|
| + *
|
| + * @return A handle to the accelerometer if initialization is successful, or
|
| + * NULL if unsuccessful or no accelerometer exists.
|
| + */
|
| +NvBool
|
| +NvOdmAccelOpen(NvOdmAccelHandle* hDevice);
|
| +
|
| +/**
|
| + * Disables the accelerometer and frees any resources used by the driver.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + */
|
| +void
|
| +NvOdmAccelClose(NvOdmAccelHandle hDevice);
|
| +
|
| +/**
|
| + * Sets the threshold value in g-force (\em g) for interrupt types that are
|
| + * triggered at g-force thresholds, such as NvOdmAccelInt_MotionThreshold().
|
| + * The threshold is applied to all 3 axes on the accelerometer. This does not
|
| + * enable or disable the specified interrupt.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @param IntType The type of interrupt being configured (::NvOdmAccelIntType).
|
| + * @param IntNum For accelerometers that support multiple interrupt thresholds
|
| + * (::NvOdmAccelerometerCaps), specifies which threshold to
|
| + * configure. If the accelerometer supports a single threshold for
|
| + * the specified interrupt type, this parameter should be 0.
|
| + * @param Threshold The desired threshold value, in g-forces. If this value is
|
| + * outside of the accelerometer's supported range, it will be
|
| + * clamped to the maximum supported value. If the accelerometer
|
| + * does not have enough precision to support the exact value
|
| + * specified, the threshold will be rounded to the nearest
|
| + * supported value. The value is by increments of 1000.
|
| + * For example, when the maximum force is 2 \em g, the value
|
| + * should return 2000.
|
| + *
|
| + * @return NV_TRUE if successful, or NV_FALSE otherwise.
|
| + */
|
| +NvBool
|
| +NvOdmAccelSetIntForceThreshold(NvOdmAccelHandle hDevice,
|
| + NvOdmAccelIntType IntType,
|
| + NvU32 IntNum,
|
| + NvU32 Threshold);
|
| +
|
| +/**
|
| + * Sets the threshold value in microseconds (Usecs) for interrupt types that
|
| + * are triggered at time thresholds. This does not enable or disable the
|
| + * specified interrupt.
|
| + *
|
| + * Sets the threshold value in g-force (\em g) for interrupt types that are
|
| + * triggered at g-force thresholds, such as NvOdmAccelInt_MotionThreshold().
|
| + * The threshold is applied to all 3 axes on the accelerometer. This does not
|
| + * enable or disable the specified interrupt.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @param IntType The type of interrupt being configured (::NvOdmAccelIntType).
|
| + * @param IntNum For accelerometers that support multiple interrupt thresholds
|
| + * (::NvOdmAccelerometerCaps), specifies which threshold to
|
| + * configure. If the accelerometer supports a single threshold for
|
| + * the specified interrupt type, this parameter should be 0.
|
| + * @param Threshold The desired threshold value in microseconds. If this value
|
| + * is outside of the accelerometer's supported range, it will be
|
| + * clamped to the maximum supported value.
|
| + *
|
| + * @return NV_TRUE if successful, or NV_FALSE otherwise.
|
| + */
|
| +NvBool
|
| +NvOdmAccelSetIntTimeThreshold(NvOdmAccelHandle hDevice,
|
| + NvOdmAccelIntType IntType,
|
| + NvU32 IntNum,
|
| + NvU32 Threshold);
|
| +
|
| +
|
| +/**
|
| + * Enables/disables the specified interrupt source. If the interrupt
|
| + * thresholds were not set prior to enabling the interrupt, the ODM-defined
|
| + * default values are used. If enabling a previously-enabled interrupt,
|
| + * or disabling a previously-disabled interrupt, this function returns
|
| + * silently.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @param IntType The type of interrupt being configured (::NvOdmAccelIntType).
|
| + * @param IntAxis The axis interrupt type (::NvOdmAccelAxisType).
|
| + * @param IntNum For accelerometers that support multiple interrupt thresholds
|
| + * (::NvOdmAccelerometerCaps), specifies which threshold to
|
| + * configure. If the accelerometer supports a single threshold for
|
| + * the specified interrupt type, this parameter should be 0.
|
| + * @param Toggle NV_TRUE specifies to enable the interrupt source, NV_FALSE to
|
| + * disable.
|
| + *
|
| + * @return NV_TRUE if successful, or NV_FALSE otherwise.
|
| + */
|
| +NvBool
|
| +NvOdmAccelSetIntEnable(NvOdmAccelHandle hDevice,
|
| + NvOdmAccelIntType IntType,
|
| + NvOdmAccelAxisType IntAxis,
|
| + NvU32 IntNum,
|
| + NvBool Toggle);
|
| +
|
| +/**
|
| + * Waits for any enabled interrupt, and returns the type of interrupt to the
|
| + * caller. If multiple interrupts occur simultaneously, returns each
|
| + * separately.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @param IntType The type of the interrupt that has been generated
|
| + * (::NvOdmAccelIntType). If no interrupt occurs before the timeout
|
| + * interval expires, or no interrupts are enabled, returns
|
| + * ::NvOdmAccelInt_None.
|
| + * @param IntMotionAxis The axis that triggered the motion interrupt (::NvOdmAccelAxisType).
|
| + * If no interrupt occurs before the timeout interval expires, or no
|
| + * interrupts are enabled, returns ::NvOdmAccelAxis_None.
|
| + * @param IntTapAxis The axis that triggered the tap interrupt (::NvOdmAccelAxisType).
|
| + * If no interrupt occurs before the timeout interval expires, or no
|
| + * interrupts are enabled, returns ::NvOdmAccelAxis_None.
|
| + */
|
| +
|
| +void
|
| +NvOdmAccelWaitInt(NvOdmAccelHandle hDevice,
|
| + NvOdmAccelIntType *IntType,
|
| + NvOdmAccelAxisType *IntMotionAxis,
|
| + NvOdmAccelAxisType *IntTapAxis);
|
| +
|
| +/**
|
| + * Signals the waiting semaphore.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + */
|
| +void
|
| +NvOdmAccelSignal(NvOdmAccelHandle hDevice);
|
| +
|
| +
|
| +/**
|
| + * Returns the current acceleration data in g-forces (\em g) as measured
|
| + * by the accelerometer.
|
| + *
|
| + * To allow higher-level software to be written independently of the
|
| + * precision and physical orientation of the accelerometer, the values
|
| + * returned by this function must be normalized by the adaptation to the
|
| + * following coordinate system:
|
| + *
|
| + * - Upright -- when the device is held upright with the primary display
|
| + * facing the user, the returned acceleration should be (0, 1, 0).
|
| + * - 90% rotation -- when the device is rotated 90 degrees clockwise, so that
|
| + * the left edge of the primary display is pointing up, the returned acceleration
|
| + * should be (1, 0, 0).
|
| + * - Flat face up -- when the device is laid flat, like on a desk, with
|
| + * the primary display face-up, the returned acceleration should be
|
| + * (0, 0, 1).
|
| + *
|
| + * @param [in] hDevice The accelerometer handle.
|
| + * @param [out] AccelX Measured acceleration along the X axis. The value is by
|
| + * increments of 1000. For example, 1 \em g is equal to 1000.
|
| + * @param [out] AccelY Measured acceleration along the Y axis. The value is by
|
| + * increments of 1000. For example, 1 \em g is equal to 1000.
|
| + * @param [out] AccelZ Measured acceleration along the Z axis. The value is by
|
| + * increments of 1000. For example, 1 \em g is equal to 1000.
|
| + *
|
| + * @return NV_TRUE if successful, or NV_FALSE otherwise.
|
| + */
|
| +NvBool
|
| +NvOdmAccelGetAcceleration(NvOdmAccelHandle hDevice,
|
| + NvS32 *AccelX,
|
| + NvS32 *AccelY,
|
| + NvS32 *AccelZ);
|
| +
|
| +/**
|
| + * Gets the accelerometer's character.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @return The accelerometer's character.
|
| + */
|
| +NvOdmAccelerometerCaps
|
| +NvOdmAccelGetCaps(NvOdmAccelHandle hDevice);
|
| +
|
| +
|
| +/**
|
| + * Sets the accelerometer's power state.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @param PowerState The accelerometer power state to set.
|
| + * @return NV_TRUE if successful, or NV_FALSE otherwise.
|
| + */
|
| +NvBool
|
| +NvOdmAccelSetPowerState(NvOdmAccelHandle hDevice, NvOdmAccelPowerType PowerState);
|
| +
|
| +
|
| +/**
|
| + * Sets the accelerometer's current sample rate state.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @param SampleRate The ::NvOdmAccelPowerType accelerometer
|
| + * sample rate in Hz (samples/second); if there
|
| + * is none suitable, the nearest sample rate is set.
|
| + * @return NV_TRUE if successful, or NV_FALSE otherwise.
|
| + */
|
| +NvBool
|
| +NvOdmAccelSetSampleRate(NvOdmAccelHandle hDevice, NvU32 SampleRate);
|
| +
|
| +/**
|
| + * Gets the accelerometer's current sample rate state.
|
| + *
|
| + * @param hDevice The accelerometer handle.
|
| + * @param pSampleRate The ::NvOdmAccelPowerType accelerometer
|
| + * sample rate in Hz (samples/second); if there
|
| + * is none suitable, the nearest sample rate is set.
|
| + * @return NV_TRUE if successful, or NV_FALSE otherwise.
|
| + */
|
| +NvBool
|
| +NvOdmAccelGetSampleRate(NvOdmAccelHandle hDevice, NvU32* pSampleRate);
|
| +
|
| +
|
| +#if defined(__cplusplus)
|
| +}
|
| +#endif
|
| +/** @} */
|
| +#endif // INCLUDED_NVODM_ACCELEROMETER_H
|
|
|