| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.hardware; |
| |
| /** |
| * This class represents a sensor event and holds informations such as the |
| * sensor type (eg: accelerometer, orientation, etc...), the time-stamp, |
| * accuracy and of course the sensor's {@link SensorEvent#values data}. |
| * |
| * <p><u>Definition of the coordinate system used by the SensorEvent API.</u><p> |
| * |
| * <pre> |
| * The coordinate space is defined relative to the screen of the phone |
| * in its default orientation. The axes are not swapped when the device's |
| * screen orientation changes. |
| * |
| * The OpenGL ES coordinate system is used. The origin is in the |
| * lower-left corner with respect to the screen, with the X axis horizontal |
| * and pointing right, the Y axis vertical and pointing up and the Z axis |
| * pointing outside the front face of the screen. In this system, coordinates |
| * behind the screen have negative Z values. |
| * |
| * <b>Note:</b> This coordinate system is different from the one used in the |
| * Android 2D APIs where the origin is in the top-left corner. |
| * |
| * x<0 x>0 |
| * ^ |
| * | |
| * +-----------+--> y>0 |
| * | | |
| * | | |
| * | | |
| * | | / z<0 |
| * | | / |
| * | | / |
| * O-----------+/ |
| * |[] [ ] []/ |
| * +----------/+ y<0 |
| * / |
| * / |
| * |/ z>0 (toward the sky) |
| * |
| * O: Origin (x=0,y=0,z=0) |
| * </pre> |
| */ |
| |
| public class SensorEvent { |
| /** |
| * The length and contents of the values array vary depending on which |
| * sensor type is being monitored (see also {@link SensorEvent} for a |
| * definition of the coordinate system used): |
| * |
| * <p>{@link android.hardware.Sensor#TYPE_ORIENTATION Sensor.TYPE_ORIENTATION}:<p> |
| * All values are angles in degrees. |
| * |
| * <p>values[0]: Azimuth, angle between the magnetic north direction and |
| * the Y axis, around the Z axis (0 to 359). |
| * 0=North, 90=East, 180=South, 270=West |
| * |
| * <p>values[1]: Pitch, rotation around X axis (-180 to 180), |
| * with positive values when the z-axis moves <b>toward</b> the y-axis. |
| * |
| * <p>values[2]: Roll, rotation around Y axis (-90 to 90), with |
| * positive values when the x-axis moves <b>away</b> from the z-axis. |
| * |
| * <p><b>Note:</b> This definition is different from <b>yaw, pitch and |
| * roll</b> used in aviation where the X axis is along the long side of |
| * the plane (tail to nose). |
| * |
| * <p><b>Note:</b> It is preferable to use |
| * {@link android.hardware.SensorManager#getRotationMatrix |
| * getRotationMatrix()} in conjunction with |
| * {@link android.hardware.SensorManager#remapCoordinateSystem |
| * remapCoordinateSystem()} and |
| * {@link android.hardware.SensorManager#getOrientation getOrientation()} |
| * to compute these values; while it may be more expensive, it is usually |
| * more accurate. |
| * |
| * <p>{@link android.hardware.Sensor#TYPE_ACCELEROMETER Sensor.TYPE_ACCELEROMETER}:<p> |
| * All values are in SI units (m/s^2) and measure the acceleration applied |
| * to the phone minus the force of gravity. |
| * |
| * <p>values[0]: Acceleration minus Gx on the x-axis |
| * <p>values[1]: Acceleration minus Gy on the y-axis |
| * <p>values[2]: Acceleration minus Gz on the z-axis |
| * |
| * <p><u>Examples</u>: |
| * <li>When the device lies flat on a table and is pushed on its left |
| * side toward the right, the x acceleration value is positive.</li> |
| * |
| * <li>When the device lies flat on a table, the acceleration value is |
| * +9.81, which correspond to the acceleration of the device (0 m/s^2) |
| * minus the force of gravity (-9.81 m/s^2).</li> |
| * |
| * <li>When the device lies flat on a table and is pushed toward the sky |
| * with an acceleration of A m/s^2, the acceleration value is equal to |
| * A+9.81 which correspond to the acceleration of the |
| * device (+A m/s^2) minus the force of gravity (-9.81 m/s^2).</li> |
| * |
| * |
| * <p>{@link android.hardware.Sensor#TYPE_MAGNETIC_FIELD Sensor.TYPE_MAGNETIC_FIELD}:<p> |
| * All values are in micro-Tesla (uT) and measure the ambient magnetic |
| * field in the X, Y and Z axis. |
| * |
| */ |
| public final float[] values; |
| |
| /** |
| * The sensor that generated this event. |
| * See {@link android.hardware.SensorManager SensorManager} |
| * for details. |
| */ |
| public Sensor sensor; |
| |
| /** |
| * The accuracy of this event. |
| * See {@link android.hardware.SensorManager SensorManager} |
| * for details. |
| */ |
| public int accuracy; |
| |
| |
| /** |
| * The time in nanosecond at which the event happened |
| */ |
| public long timestamp; |
| |
| |
| SensorEvent(int size) { |
| values = new float[size]; |
| } |
| } |