// @file sns_thermopile.proto
//
// @brief Defines message types for Thermopile Sensors.
// All Thermopile Sensor drivers are required to comply with this API.
// Any new functionality for Thermopile Sensor can be defined in a
// device specific API file.
//
// @copyright
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n
// All rights reserved.\n
// Confidential and Proprietary - Qualcomm Technologies, Inc.\n
//
// @details
// ## Attribute requirements:
// The Thermopile Temperature Sensor publishes:
// 1. SNS_STD_SENSOR_ATTRID_TYPE attribute value as "thermopile"
// 2. SNS_STD_SENSOR_ATTRID_RESOLUTIONS attribute value in degrees Celsius/LSB
// 3. SNS_STD_SENSOR_ATTRID_RANGES attribute values in degrees Celsius unit
// 4. See sns_std_sensor.proto for other attributes
//
// ## Processing stream requests:
// 1. The Thermopile Sensor handles the sns_std_sensor_config
//    message request for all stream enable/update requests.
//
// ## Publishing stream events:
// 1. The Thermopile Sensor publishes data stream events using the
//    sns_std_sensor_event message.
// 2. Each stream event contains one output data field where data is
//    factory calibrated and ordered as:
//    data[0] = Object temperature in degrees Celsius
// 3. Each stream event publishes an accuracy field:
//    SNS_STD_SENSOR_SAMPLE_STATUS_UNRELIABLE to mark invalid samples when
//    hardware is yet to stabilize after the sensor is configured.
//    SNS_STD_SENSOR_SAMPLE_STATUS_ACCURACY_HIGH to mark samples when they are 
//    valid.
// 4. The Thermopile Sensor publishes a configuration event using the
//    sns_std_sensor_physical_config_event message.
//    It publishes this event each time there is change in hardware config of 
//    the sensor and contains current physical sensor config of the sensor.
// 5. The Thermopile Sensor publishes a factory calibration event using the
//    sns_cal_event message. It uses bias and scale_factor fields in this event.
//    It publishes this event each time there is change in it's factory 
//    calibration data or when a client sends a new streaming request.
//
// ## Processing self-test requests:
// 1. The Thermopile Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_COM test
//    type using the physical sensor test API.
// 2. The Thermopile Sensor implements SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY 
//    test type to determine factory calibration parameters using the physical
//    sensor test API.
// 3. The Thermopile Sensor could implement other test types.
//
// ## Publishing test events:
// 1. The Thermopile Sensor uses sns_physical_sensor_test_event message to 
//    publish a test completion event.
// 2. The test_passed field in sns_physical_sensor_test_event is used to 
//    output the pass/fail result of self-test execution.
// 3. The test_data field in sns_physical_sensor_test_event could be used to 
//    output any driver-specific error data.
syntax = "proto2";
import "nanopb.proto";
import "sns_std_sensor.proto";
import "sns_physical_sensor_test.proto";
import "sns_cal.proto";