// Copyright 2014 Google Inc. All Rights Reserved.
// Author: siddharthr@google.com (Siddharth Ray)
// Protos for uploading GNSS metrics.

syntax = "proto2";

package clearcut.connectivity;

option java_package = "com.android.internal.location";
option java_outer_classname = "GnssLogsProto";

message GnssLog {
  // Number of location reports processed
  optional int32 num_location_report_processed = 1;

  // Location failure (in percent)
  optional int32 percentage_location_failure = 2;

  // Number of time to first fix processed
  optional int32 num_time_to_first_fix_processed = 3;

  // Mean time to first fix (in seconds)
  optional int32 mean_time_to_first_fix_secs = 4;

  // Standard deviation of time to first fix (in seconds)
  optional int32 standard_deviation_time_to_first_fix_secs = 5;

  // Number of position accuracy processed
  optional int32 num_position_accuracy_processed = 6;

  // Mean position accuracy (in meters)
  optional int32 mean_position_accuracy_meters = 7;

  // Standard deviation of position accuracy (in meters)
  optional int32 standard_deviation_position_accuracy_meters = 8;

  // Number of top 4 average CN0 processed
  optional int32 num_top_four_average_cn0_processed = 9;

  // Mean of top 4 average CN0 (dB-Hz)
  optional double mean_top_four_average_cn0_db_hz = 10;

  // Standard deviation of top 4 average CN0 (dB-Hz)
  optional double standard_deviation_top_four_average_cn0_db_hz = 11;

  // Power metrics
  optional PowerMetrics power_metrics = 12;

  // Hardware revision (EVT, DVT, PVT etc.)
  optional string hardware_revision = 13;

  // Total number of sv status messages processed
  optional int32 num_sv_status_processed = 14;

  // Total number of L5 sv status messages processed
  optional int32 num_l5_sv_status_processed = 15;

  // Total number of sv status messages processed, where sv is used in fix
  optional int32 num_sv_status_used_in_fix = 16;

  // Total number of L5 sv status messages processed, where sv is used in fix
  optional int32 num_l5_sv_status_used_in_fix = 17;

  // Number of l5 top 4 average CN0 processed
  optional int32 num_l5_top_four_average_cn0_processed = 18;

  // Mean of l5 top 4 average CN0 (dB-Hz)
  optional double mean_l5_top_four_average_cn0_db_hz = 19;

  // Standard deviation of l5 top 4 average CN0 (dB-Hz)
  optional double standard_deviation_l5_top_four_average_cn0_db_hz = 20;
}

// Power metrics
message PowerMetrics {

  // Duration of power log (ms)
  optional int64 logging_duration_ms = 1;

  // Energy consumed (mAh)
  optional double energy_consumed_mah = 2;

  // Time spent in signal quality level (ms)
  repeated int64 time_in_signal_quality_level_ms = 3;
}
