syntax = "proto2";

package android.location.cts.gnss;
// RPC service for providing ephemeris data


message GpsTimeProto {
  optional int64 nanosecond = 1;
}

message GpsEphemerisProto {
  // Time used for generating this data (typically, the queried time).
  optional GpsTimeProto data_time = 1;

  // PRN.
  optional int32 prn = 2;

  // GPS week number.
  optional int32 week = 3;

  // Code on L2.
  optional int32 l2_code = 4;

  // L2 P data flag.
  optional int32 l2_flag = 5;

  // SV accuracy in meters.
  optional double sv_accuracy_m = 6;

  // SV health bits.
  optional int32 sv_health = 7;

  // Issue of data (ephemeris).
  optional int32 iode = 8;

  // Issue of data (clock).
  optional int32 iodc = 9;

  // Time of clock (second).
  optional double toc = 10;

  // Time of ephemeris (second).
  optional double toe = 11;

  // Transmission time of the message.
  optional double tom = 12;

  // Clock info (drift, bias, etc).
  optional double af0 = 13;
  optional double af1 = 14;
  optional double af2 = 15;
  optional double tgd = 16;

  // Orbital parameters.
  // Square root of semi-major axis
  optional double root_of_a = 17;

  // Eccentricity.
  optional double e = 18;

  // Inclination angle (radian).
  optional double i_0 = 19;

  // Rate of inclination angle (radians/sec).
  optional double i_dot = 20;

  // Argument of perigee.
  optional double omega = 21;

  // Longitude of ascending node of orbit plane at the beginning of week.
  optional double omega_0 = 22;

  // Rate of right ascension.
  optional double omega_dot = 23;

  // Mean anomaly at reference time.
  optional double m_0 = 24;

  // Mean motion difference from computed value.
  optional double delta_n = 25;

  // Amplitude of second-order harmonic perturbations.
  optional double crc = 26;
  optional double crs = 27;
  optional double cuc = 28;
  optional double cus = 29;
  optional double cic = 30;
  optional double cis = 31;

  // FIT interval.
  optional double fit_interval = 32;
}

// Klobuchar Ionospheric Model
message IonosphericModelProto {
  // Time used for generating this data (typically, the queried time).
  optional GpsTimeProto data_time = 1;

  // Amplitude parameters
  repeated double alpha = 2;

  // Period parameters.
  repeated double beta = 3;
}

message UtcModelProto {
  optional double a_0 = 1;
  optional double a_1 = 2;
  optional int64 tow = 3;
  optional int32 leap_seconds = 4;
}

message GpsNavMessageProto {
  // Status for the RPC call.
  enum RpcStatus {
    UNKNOWN_RPC_STATUS = 0;
    SUCCESS = 1;
    SERVER_ERROR = 2;
  }
  optional RpcStatus rpc_status = 1;
  optional IonosphericModelProto iono = 2;
  optional UtcModelProto utc_model = 3;
  repeated GpsEphemerisProto ephemerids = 4;
}
