// @file sns_geomag_rv.proto
//
// Defines the API for Geomagnetic Rotation Vector sensors.
// This Sensor is similar to Rotation Vector, but uses a magnetometer instead
// of a gyroscope.
//
// Copyright (c) 2017 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.

syntax = "proto2";
import "sns_std_sensor.proto";

// A GeoMagRV sensor reports the orientation of the device relative to the
// East-North-Up coordinates frame. It is obtained by integration of
// accelerometer and magnetometer readings.
//
// ## GeoMagRV sensor attributes:
// SNS_STD_SENSOR_ATTRID_TYPE is "geomag_rv"
//
// ## Request Message: sns_std_sensor_config
// sns_std_sensor_config::sample_rate is used to specify the sampling rate (Hz)
// of the GeoMagRV sensor. Sensor will generate data events at this rate.
//
// ## Event Message: sns_std_sensor_event
// Output of the GeoMagRV sensor will be populated in sns_std_sensor_event
//
// The East-North-Up coordinate system is defined as a direct orthonormal
// basis where:
// - X points east and is tangential to the ground.
// - Y points north and is tangential to the ground.
// - Z points towards the sky and is perpendicular to the ground.
//
// The rotation can be seen as rotating the device by an angle theta around an
// axis rot_axis to go from the reference device orientation to the current
// device orientation. The rotation is encoded as the four unitless x, y, z, w
// components of a unit quaternion:
// sns_std_sensor_event::data[0] = rot_axis.x*sin(theta/2)
// sns_std_sensor_event::data[1] = rot_axis.y*sin(theta/2)
// sns_std_sensor_event::data[2] = rot_axis.z*sin(theta/2)
// sns_std_sensor_event::data[3] = cos(theta/2)
//
// Where:
// - the x, y and z fields of rot_axis are the East-North-Up coordinates
// of a unit length vector representing the rotation axis
// - theta is the rotation angle
//
// sns_std_sensor_event::status specifies the reliability of the sample value
// value is of type sns_std_sensor_sample_status. see sns_std_sensor.proto for
// details.
