// @file sns_pose_6dof.proto
//
// @brief Defines message types for Pose Six Degrees of Freedom sensors.
//
// @copyright
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
//
// @details
// Pose of the device is defined as the orientation of the device from a Earth Centered Earth Fixed frame 
// and the translation from an arbitrary point.
//
// ## Attribute Requirements:
// 1. SNS_STD_SENSOR_ATTRID_TYPE is "pose_6dof"
// 2. SNS_STD_SENSOR_ATTRID_STREAM_TYPE: SNS_STD_SENSOR_STREAM_TYPE_STREAMING
// 3. SNS_STD_SENSOR_ATTRID_API attribute contains "sns_pose_6dof.proto"
//
// ## Processing Stream Requests: 
// 1. The Pose 6DOF sensor handles the sns_std_sensor_config message
//    request with msgid SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_CONFIG.
//    sns_std_sensor_config::sample_rate is used to specify the sampling rate (Hz)
//    of the Pose 6DOF sensor. Sensor will generate data events at this rate.
//
// ## Publishing Stream Events:
// sns_std_sensor_event: Output of the Pose 6DOF sensor will be populated in sns_std_sensor_event
// A pose 6dof sensor events consists of a rotation expressed as a quaternion
// and a translation expressed in SI units.  
// A Pose 6DOF sensor reports the orientation of the device relative
// to the East-North-Up coordinates frame. It is obtained by
// integration of accelerometer and gyroscope readings.
// 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 orientation is represented by the rotation necessary to align
// the East-North-Up coordinates with the device's coordinates. That is,
// applying the rotation to the world frame (X,Y,Z) would align them with
// the device coordinates (x,y,z).
//
// The rotation can be seen as rotating the device by an angle theta around an
// axis rot_axis to go from the reference (East-North-Up aligned) device
// orientation to the current device orientation. The rotation is encoded
// as the four unitless x, y, z, w components of a unit quaternion:
//
// @code
// sns_std_sensor_event::data[0] = x*sin(theta/2)
// sns_std_sensor_event::data[1] = y*sin(theta/2)
// sns_std_sensor_event::data[2] = z*sin(theta/2)
// sns_std_sensor_event::data[3] = cos(theta/2)
// sns_std_sensor_event::data[4] = Translation along x axis from an arbitrary origin.
// sns_std_sensor_event::data[5] = Translation along y axis from an arbitrary origin.
// sns_std_sensor_event::data[6] = Translation along z axis from an arbitrary origin.
// sns_std_sensor_event::data[7] = Delta quaternion rotation x*sin(theta/2)
// sns_std_sensor_event::data[8] = Delta quaternion rotation y*sin(theta/2)
// sns_std_sensor_event::data[9] = Delta quaternion rotation z*sin(theta/2)
// sns_std_sensor_event::data[10] = Delta quaternion rotation cos(theta/2)
// sns_std_sensor_event::data[11] = Delta translation along x axis.
// sns_std_sensor_event::data[12] = Delta translation along y axis.
// sns_std_sensor_event::data[13] = Delta translation along z axis.
// sns_std_sensor_event::data[14] = Sequence number; ascending sequentially from 0
// @endcode

// 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 is of type sns_std_sensor_sample_status. see sns_std_sensor.proto for
// details.

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