syntax = "proto2";

package chre_cross_validation_sensor;

option java_package = "com.google.android.chre.nanoapp.proto";
option java_outer_classname = "ChreCrossValidationSensor";

// Nanoappp message type can be either host to chre (H2C) or chre to host (C2H)
enum MessageType {
  // Reserved for corrupted messages
  UNDEFINED = 0;

  // H2C: Host telling nanoapp to start collecting sensor data
  // Payload must be StartCommand message
  CHRE_CROSS_VALIDATION_START = 1;

  // C2H: Data payload to be validated. This is a batch of data exactly as it
  // was received from a CHRE API.
  // Payload must be Data message
  CHRE_CROSS_VALIDATION_DATA = 2;

  // H2C: Host asking nanoapp for information about a given sensor.
  // Payload must be SensorInfoCommand message.
  CHRE_CROSS_VALIDATION_INFO = 3;

  // C2H: Response to a information request for a sensor.
  // Payload must be a SensorInfoResponse message.
  CHRE_CROSS_VALIDATION_INFO_RESPONSE = 4;
}

message StartCommand {
  oneof command {
    StartSensorCommand startSensorCommand = 1;
  }
}

/*
 * apSensorType values defined in Sensor class of
 * android/frameworks/base/core/java/android/hardware/Sensor.java
 */
message StartSensorCommand {
  optional uint32 chreSensorType = 1;
  optional uint64 intervalInMs = 2;
  optional uint64 latencyInMs = 3;
  optional bool isContinuous = 4;
  optional uint32 sensorIndex = 5;
}

/*
 * Asks for the nanoapp to provide stats about the provided CHRE sensor type.
 */
message SensorInfoCommand {
  optional uint32 chreSensorType = 1;
  // The sensor name given by android.hardware.Sensor#getSensorName()
  optional bytes sensorName = 2;
}

/*
 * Response to a SensorInfoCommand containing data about the requested sensor.
 */
message SensorInfoResponse {
  optional uint32 chreSensorType = 1;
  optional bool isAvailable = 2;
  optional uint32 sensorIndex = 3;
  optional bytes sensorName = 4;
}

message Data {
  oneof data {
    SensorData sensorData = 1;
  }
}

/*
 * Similar data to structs with naming scheme chreSensor*Data found in
 * android/system/chre/chre_api/include/chre_api/chre/sensor_types.h
 */
message SensorData {
  optional uint32 chreSensorType = 1;
  optional uint32 accuracy = 2;
  repeated SensorDatapoint datapoints = 3;
}

/*
 * Similar data to structs with naming scheme chreSensor*SampleData found in
 * android/system/chre/chre_api/include/chre_api/chre/sensor_types.h except
 * that timestampDelta has been replaced with timestampInNs which is an
 * absolute timestamp instead of the delta relative to the last sample.
 */
message SensorDatapoint {
  optional uint64 timestampInNs = 1;
  repeated float values = 2;
}
