/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";

// C++ namespace: android::hardware::google::pixel::PixelAtoms
package android.hardware.google.pixel.PixelAtoms;

option java_package = "android.hardware.google.pixel";
option java_outer_classname = "PixelAtoms";

/*
 * Please note that the following features are not currently supported by
 * the IStats->reportVendorAtom implementation:
 *   - types outside of int, long, float, and string (ex. uint)
 *   - submessages within an atom
 *   - repeated fields - arrays must be unrolled
 *   - field # 1 - this will be occupied by the vendor namespace
 */

/* Allocated atom IDs. */
message Atom {
    oneof pushed {
      // AOSP atom ID range starts at 105000
      ChargeStats charge_stats = 105000;
      VoltageTierStats voltage_tier_stats = 105001;
      BatteryCapacity battery_capacity = 105002;
      StorageUfsHealth storage_ufs_health = 105003;
      F2fsStatsInfo f2fs_stats = 105004;
      ZramMmStat zram_mm_stat = 105005;
      ZramBdStat zram_bd_stat = 105006;
      BootStatsInfo boot_stats = 105007;
      WirelessChargingStats wireless_charging_stats = 105008;
      DeviceOrientation device_orientation = 105009;
      BatteryCapacityFG fg_capacity = 105010;
      PdVidPid pd_vid_pid = 105011;
      BatteryEEPROM battery_eeprom = 105012;
      VendorSpeakerImpedance vendor_speaker_impedance = 105013; // moved from atoms.proto
      StorageUfsResetCount ufs_reset_count = 105014;
      PixelMmMetricsPerHour pixel_mm_metrics_per_hour = 105015;
      PixelMmMetricsPerDay pixel_mm_metrics_per_day = 105016;
      F2fsCompressionInfo f2fs_compression_info = 105017;
      VendorChargeCycles vendor_charge_cycles = 105018; // moved from atoms.proto
      VendorHardwareFailed vendor_hardware_failed = 105019; // moved from atoms.proto
      VendorSlowIo vendor_slow_io = 105020; // moved from atoms.proto
      VendorSpeechDspStat vendor_speech_dsp_stat = 105021; // moved from atoms.proto
      VendorPhysicalDropDetected vendor_physical_drop_detected = 105022; // moved from atoms.proto
      VendorUsbPortOverheat vendor_usb_port_overheat = 105023; // moved from atoms.proto
      CmaStatus cma_status = 105024;
      CmaStatusExt cma_status_ext = 105025;
      VendorBatteryHealthSnapshot vendor_battery_health_snapshot = 105026; // moved from atoms.proto
      VendorBatteryCausedShutdown vendor_battery_caused_shutdown = 105027; // moved from atoms.proto
      F2fsGcSegmentInfo f2fs_gc_segment_info = 105028;
      PowerMitigationStats mitigation_stats = 105029; // moved from atoms.proto

      CitadelVersion citadel_version = 100018; // moved from vendor proprietary
      CitadelEvent citadel_event = 100019;  // moved from vendor proprietary
      VendorSpeakerStatsReported vendor_speaker_stats_reported = 105030;

      ChreHalNanoappLoadFailed chre_hal_nanoapp_load_failed = 105031;
      ChrePalOpenFailed chre_pal_open_failed = 105032;
      ChreApiErrorCodeDistributionTaken chre_api_error_code_distribution_taken = 105033;
      ChreDynamicMemorySnapshotReported chre_dynamic_memory_snapshot_reported = 105034;
      ChreEventQueueSnapshotReported chre_event_queue_snapshot_reported = 105035;
      ChreApWakeUpOccurred chre_ap_wake_up_occurred = 105036;

      BatteryHealthStatus battery_health_status = 105037;
      BatteryHealthUsage battery_health_usage = 105038;
    }
    // AOSP atom ID range ends at 109999
}

/* Supported reverse domain names. */
message ReverseDomainNames {
    optional string pixel = 1 [default = "com.google.pixel"];
}

/* A message containing detailed statistics and debug information about a charge session. */
message ChargeStats {
    /* Charge Adapter stats. */
    enum AdapterType {
        ADAPTER_TYPE_UNKNOWN = 0;
        ADAPTER_TYPE_USB = 1;
        ADAPTER_TYPE_USB_SDP = 2;
        ADAPTER_TYPE_USB_DCP = 3;
        ADAPTER_TYPE_USB_CDP = 4;
        ADAPTER_TYPE_USB_ACA = 5;
        ADAPTER_TYPE_USB_C = 6;
        ADAPTER_TYPE_USB_PD = 7;
        ADAPTER_TYPE_USB_PD_DRP = 8;
        ADAPTER_TYPE_USB_PD_PPS = 9;
        ADAPTER_TYPE_USB_PD_BRICKID = 10;
        ADAPTER_TYPE_HVDCP = 11;
        ADAPTER_TYPE_HVDCP3 = 12;
        ADAPTER_TYPE_FLOAT = 13;
        ADAPTER_TYPE_WLC  = 14;
        ADAPTER_TYPE_WLC_EPP = 15;
        ADAPTER_TYPE_WLC_SPP = 16;
        ADAPTER_TYPE_GPP = 17;
        ADAPTER_TYPE_10W = 18;
        ADAPTER_TYPE_L7 = 19;
        ADAPTER_TYPE_DL = 20;
        ADAPTER_TYPE_WPC_EPP = 21;
        ADAPTER_TYPE_WPC_GPP = 22;
        ADAPTER_TYPE_WPC_10W = 23;
        ADAPTER_TYPE_WPC_BPP = 24;
        ADAPTER_TYPE_WPC_L7 = 25;
    }
    optional string reverse_domain_name = 1;
    /* Type of charge adapter, enumerated above. */
    optional AdapterType adapter_type = 2;
    /* Max negotiated voltage by charge adapter, in mV. */
    optional int32 adapter_voltage = 3;
    /* Max negotiated current by charge adapter current, in mA. */
    optional int32 adapter_amperage = 4;

    /* Stats at beginning of charge session. */
    /* System State of Charge, in percent. */
    optional int32 ssoc_in = 5;
    /* Voltage in mV. */
    optional int32 voltage_in = 6;

    /* Stats at end of charge session. */
    /* System State of Charge, in percent. */
    optional int32 ssoc_out = 7;
    /* Voltage in mV. */
    optional int32 voltage_out = 8;

    /**
     * These values are  meant to represent status of the charging device, used
     * to validate the charging algorithm and explain charging performances.
     * Examples of the content of the register:
     * - APDO, PDO (power capabilities of the device, eg. 5V3A, 9V2A, 20V2A) for wired charging
     * - Wireless charging MFG code. This is the value of a register of the WLC integrated
     *   circuit to identify the vendor and type of WLC pad
     * - Receiver operating frequency
     * - Register status
     */
    optional int32 adapter_capabilities0 = 9;
    optional int32 adapter_capabilities1 = 10;
    optional int32 adapter_capabilities2 = 11;
    optional int32 adapter_capabilities3 = 12;
    optional int32 adapter_capabilities4 = 13;

    /**
     * These are values which reports the state of the wireless receiver, which will help in
     * debugging charging issues and alternate configurations.
     */
    optional int32 receiver_state0 = 14;
    optional int32 receiver_state1 = 15;

    /* AACR feature to record capacity */
    optional int32 charge_capacity = 16;
}

/* A message containing stats from each charge voltage tier. */
message VoltageTierStats {
    optional string reverse_domain_name = 1;
    /* Voltage tier number, custom to implementation, should be <= 3. */
    optional int32 voltage_tier = 2;

    /* Stats when entering voltage tier. */
    /* State of charge, in percent. */
    optional float soc_in = 3;
    /* Coulomb count, in mAh. */
    optional int32 cc_in = 4;
    /* Battery temperature, in deciC. */
    optional int32 temp_in = 5;

    /* Time spent at various charge speeds, in seconds. */
    optional int32 time_fast_secs = 6;
    optional int32 time_taper_secs = 7;
    optional int32 time_other_secs = 8;

    /* Battery temperature stats, in deciC. */
    optional int32 temp_min = 9;
    optional int32 temp_avg = 10;
    optional int32 temp_max = 11;

    /* Battery current stats, in mA. */
    optional int32 ibatt_min = 12;
    optional int32 ibatt_avg = 13;
    optional int32 ibatt_max = 14;

    /* Input current limit stats, in mA. */
    optional int32 icl_min = 15;
    optional int32 icl_avg = 16;
    optional int32 icl_max = 17;

    /**
     * Efficiency number, receiver operating frequency in kHz for wireless charging
     * (alignment)
     */
    optional int32 charging_operating_point = 18;
    /* The minimum power out of the adapter at the given charging tier */
    optional int32 min_adapter_power_out = 19;
    /* The time-averaged power out of the adapter at the given charging tier */
    optional int32 time_avg_adapter_power_out = 20;
    /* The maximum power out of the adapter at the given charging tier */
    optional int32 max_adapter_power_out = 21;
}

/* A message containing an alternate proprietary full battery capacity estimate. */
message BatteryCapacity {
    optional string reverse_domain_name = 1;
    /* Sum of the change in coulomb count. */
    optional int32 delta_cc_sum = 2;
    /* Sum of the change in state of charge (battery level). */
    optional int32 delta_vfsoc_sum = 3;
}

/* A message containing health values of UFS */
message StorageUfsHealth {
    optional string reverse_domain_name = 1;
    /* The value of lifetimeA for UFS health */
    optional int32 lifetime_a = 2;
    /* The value of lifetimeB for UFS health */
    optional int32 lifetime_b = 3;
    /* The value of lifetimeC for UFS health */
    optional int32 lifetime_c = 4;
}

/* A message containing filesystem stats of F2FS */
message F2fsStatsInfo {
    optional string reverse_domain_name = 1;
    /* The value of dirty segments of f2fs */
    optional int32 dirty_segments = 2;
    /* The value of free segments of f2fs */
    optional int32 free_segments = 3;
    /* The times of checkpoint function called in foreground*/
    optional int32 cp_calls_fg = 4;
    /* The times of checkpoint function called in background */
    optional int32 cp_calls_bg = 5;
    /* The times of garbage collection function called in foreground */
    optional int32 gc_calls_fg = 6;
    /* The times of garbage collection function called in background */
    optional int32 gc_calls_bg = 7;
    /* The amount of blocks been moved by garbage collection in foreground */
    optional int32 moved_blocks_fg = 8;
    /* The amount of blocks been moved by garbage collection in background */
    optional int32 moved_blocks_bg = 9;
    /* The average of how many valid blocks is in a segment */
    optional int32 valid_blocks = 10;
}

message ZramMmStat {
    optional string reverse_domain_name = 1;
    /* The value of original memory size */
    optional int64 orig_data_size = 2;
    /* The value of compressed memory size */
    optional int64 compr_data_size = 3;
    /* The value of consumed memory size to store compressed memory */
    optional int64 mem_used_total = 4;
    /* The value of number of page filled with same elements data */
    optional int64 same_pages = 5;
    /* The value of number of incompressible page */
    optional int64 huge_pages = 6;
    /* The value of number of incompressible pages since boot */
    optional int64 huge_pages_since_boot = 7;
}

message ZramBdStat {
    optional string reverse_domain_name = 1;
    /* the number of pages in backing device */
    optional int64 bd_count = 2;
    /* The number of pages readed from backing device */
    optional int64 bd_reads = 3;
    /* The number of pages written to backing device */
    optional int64 bd_writes = 4;
}

/* A message containing boot times */
message BootStatsInfo {
    optional string reverse_domain_name = 1;
    /* The F2FS fsck time in secs */
    optional int32 fsck_time_sec = 2;
    /* The F2FS mounted time in secs */
    optional int32 mounted_time_sec = 3;
    /* The F2FS checkpoint=disable time in secs */
    optional int32 checkpoint_time_sec = 4;
}

/* A message containing wireless charging health info. */
message WirelessChargingStats {
    /* Captures if a google charger used when start wireless charging */
    enum ChargerVendor {
        VENDOR_UNKNOWN = 0;
        VENDOR_GOOGLE = 1;
    }

    optional string reverse_domain_name = 1;
    optional ChargerVendor charger_vendor = 2;
}

/* Current device Orientation */
message DeviceOrientation {
    enum Orientation {
        ORIENTATION_UNKNOWN = 0;
        ORIENTATION_0 = 1;
        ORIENTATION_90 = 2;
        ORIENTATION_180 = 3;
        ORIENTATION_270 = 4;
    }

    optional string reverse_domain_name = 1;
    /* Device orientation. */
    optional Orientation orientation = 2;
}

/* Raw battery capacity stats */
message BatteryCapacityFG {
    enum LogReason {
        LOG_REASON_UNKNOWN = 0;
        LOG_REASON_CONNECTED = 1;
        LOG_REASON_DISCONNECTED = 2;
        LOG_REASON_FULL_CHARGE = 3;
        LOG_REASON_PERCENT_SKIP = 4;
        LOG_REASON_DIVERGING_FG = 5;
    }

    optional string reverse_domain_name = 1;
    /* Uevent logging reason, enumerated above. */
    optional LogReason capacity_log_reason = 2;

    /* The battery capacity reported from the FG (fuel gauge) hardware  */
    optional float capacity_gdf = 3;
    /* The filtered system battery capacity reported to the UI */
    optional float capacity_ssoc = 4;
    /* The fuel gauge capacity curve midpoint FG (fuel gauge) value */
    optional float capacity_gdf_curve = 5;
    /* The fuel gauge capacity curve midpoint UI value */
    optional float capacity_ssoc_curve = 6;
}

message  PdVidPid {
    optional string reverse_domain_name = 1;
    /* Vendor ID of wired charger */
    optional int32 vid = 2;
    /* Product ID of wired charger */
    optional int32 pid = 3;
}

message BatteryEEPROM {
    optional string reverse_domain_name = 1;
   /* The cycle count number; record of charge/discharge times */
    optional int32 cycle_cnt = 2;
    /* The current full capacity of the battery under nominal conditions */
    optional int32 full_cap = 3;
    /* The battery equivalent series resistance */
    optional int32 esr = 4;
    /* Battery resistance related to temperature change */
    optional int32 rslow = 5;
    /* Battery health indicator reflecting the battery age state */
    optional int32 soh = 6;
    /* The battery temperature */
    optional int32 batt_temp = 7;

    /* Battery state of charge (SOC) shutdown point */
    optional int32 cutoff_soc = 8;
    /* Raw battery state of charge (SOC), based on battery current (CC = Coulomb Counter) */
    optional int32 cc_soc = 9;
    /* Estimated battery state of charge (SOC) from batt_soc with endpoint limiting (0% and 100%) */
    optional int32 sys_soc = 10;
    /* Filtered monotonic SOC, handles situations where the cutoff_soc is increased and
     * then decreased from the battery physical properties
     */
    optional int32 msoc = 11;
    /* Estimated SOC derived from cc_soc that provides voltage loop feedback correction using
     * battery voltage, current, and status values
     */
    optional int32 batt_soc = 12;

    /* Field used for data padding in the EEPROM data */
    optional int32 reserve = 13;

    /* The maximum battery temperature ever seen */
    optional int32 max_temp = 14;
    /* The minimum battery temperature ever seen */
    optional int32 min_temp = 15;
    /* The maximum battery voltage ever seen */
    optional int32 max_vbatt = 16;
    /* The minimum battery voltage ever seen */
    optional int32 min_vbatt = 17;
    /* The maximum battery current ever seen */
    optional int32 max_ibatt = 18;
    /* The minimum battery current ever seen */
    optional int32 min_ibatt = 19;
    /* Field used to verify the integrity of the EEPROM data */
    optional int32 checksum = 20;

    /* Extend data for P21 */
    /* Temperature compensation information */
    optional int32 tempco = 21;
    /* Learned characterization related to the voltage gauge */
    optional int32 rcomp0 = 22;
    /* For time to monitor the life of cell */
    optional int32 timer_h = 23;
    /* The full capacity of the battery learning at the end of every charge cycle */
    optional int32 full_rep = 24;
}

/* A message containing an exceptional event from citadel. */
message CitadelEvent {
  enum Event {
    ALERT = 1;
    REBOOTED = 2;
    UPGRADED = 3;
    ALERT_V2 = 4;
  };
  optional string reverse_domain_name = 1;
  optional Event event = 2;
  optional int32 reset_count = 3;
  optional int64 uptime_micros = 4;
  enum Priority {
    LOW = 0;
    MEDIUM = 1;
    HIGH = 2;
  };
  optional Priority priority = 5;

  // ALERT-specific fields.  These fields correspond to the interrupt status
  // bits for alerts within citadel.  When alerts fire one or more of these
  // bits are set to indicate the alert source.
  optional int32 intr_sts_0 = 6;
  optional int32 intr_sts_1 = 7;
  optional int32 intr_sts_2 = 8;

  // REBOOTED-specific fields.  These fields correspond to the details of how
  // the hardware reboot occurred.  A reboot is a noteworthy event for citadel,
  // as it can be triggered by events like stack overflow or other software
  // bugs.
  optional int32 rstsrc = 9;
  optional int32 exitpd = 10;
  optional int32 which0 = 11;
  optional int32 which1 = 12;

  // UPGRADED-specific field. This field corresponds to the result of FW
  // upgrade for citadel.
  optional int32 upgrade_state = 13;

  // ALERT_V2-specific field. This field corresponds to the GLOBALSEC Log
  // which contains normal globalsec, camo, temp and buserr.
  optional int32 alert_grp_0 = 14;
  optional int32 alert_grp_1 = 15;
  optional int32 alert_grp_2 = 16;
  optional int32 alert_grp_3 = 17;
  optional int32 camo_breaches_0 = 18;
  optional int32 camo_breaches_1 = 19;
  optional int32 temp_min = 20;
  optional int32 temp_max = 21;
  optional int32 bus_err = 22;
}

/* A message containing the citadel firmware version. */
message CitadelVersion {
   optional string reverse_domain_name = 1;
   optional string version = 2;
}

/* A message containing the speaker impedance. */
 message VendorSpeakerImpedance {
    optional string reverse_domain_name = 1;
    optional int32 speaker_location = 2;
    optional int32 impedance = 3;
}

/**
 * Logs the reported vendor speaker health stats.
 * Logged from: hardware/google/pixel/pixelstats/SysfsCollector.cpp
 */
message VendorSpeakerStatsReported {
  /* Vendor reverse domain name (expecting "com.google.pixel") */
  optional string reverse_domain_name = 1;
  /* The location of speaker; 0 = left , 1 = right */
  optional int32 speaker_location = 2;
  /* The speaker's impedance value (milliOhm) */
  optional int32 impedance = 3;
  /* The speaker's maximum temperature (milliDegree C) */
  optional int32 max_temperature = 4;
  /* The speaker's execursion length (micrometer) */
  optional int32 excursion = 5;
  /* The speaker's heart beat count */
  optional int32 heartbeat = 6;
}

/* A message containing how many times of ufs host reset */
message StorageUfsResetCount {
    optional string reverse_domain_name = 1;
    /* How many UFS error reset are triggered */
    optional int32 host_reset_count = 2;
}

/* A message containing Pixel memory metrics collected hourly. */
message PixelMmMetricsPerHour {
    optional string reverse_domain_name = 1;
    optional int64 free_pages = 2;
    optional int64 anon_pages = 3;
    optional int64 file_pages = 4;
    optional int64 slab_reclaimable = 5;
    optional int64 zspages = 6;
    optional int64 unevictable = 7;
    optional int64 ion_total_pools = 8;
    optional int64 gpu_memory = 9;
}

/* A message containing Pixel memory metrics collected daily. */
message PixelMmMetricsPerDay {
    optional string reverse_domain_name = 1;
    optional int64 workingset_refault = 2;
    optional int64 pswpin = 3;
    optional int64 pswpout = 4;
    optional int64 allocstall_dma = 5;
    optional int64 allocstall_dma32 = 6;
    optional int64 allocstall_normal = 7;
    optional int64 allocstall_movable = 8;
    optional int64 pgalloc_dma = 9;
    optional int64 pgalloc_dma32 = 10;
    optional int64 pgalloc_normal = 11;
    optional int64 pgalloc_movable = 12;
    optional int64 pgsteal_kswapd = 13;
    optional int64 pgsteal_direct = 14;
    optional int64 pgscan_kswapd = 15;
    optional int64 pgscan_direct = 16;
    optional int64 oom_kill = 17;
    optional int64 pgalloc_high = 18;
    optional int64 pgcache_hit = 19;
    optional int64 pgcache_miss = 20;
    optional int64 kswapd_stime_clks = 21;
    optional int64 kcompactd_stime_clks = 22;
}

/* A message containing CMA metrics collected from dogfooding only. */
message CmaStatus {
  optional string reverse_domain_name = 1;
  optional int32 type = 2;
  optional int64 cma_alloc_pages_attempts = 3;
  optional int64 cma_alloc_pages_soft_attempts = 4;
  optional int64 cma_fail_pages = 5;
  optional int64 cma_fail_soft_pages = 6;
  optional int64 migrated_pages = 7;
  optional string cma_heap_name = 8;
}

/* A message containing CMA metrics (External). */
message CmaStatusExt {
  optional string reverse_domain_name = 1;
  optional int32 type = 2;
  optional int64 cma_alloc_latency_low = 3;
  optional int64 cma_alloc_latency_mid = 4;
  optional int64 cma_alloc_latency_high = 5;
  optional string cma_heap_name = 6;
}

message F2fsCompressionInfo {
    optional string reverse_domain_name = 1;
    /* Show the block count written after compression since mount */
    optional int32 compr_written_blocks = 2;
    /* Show the saved block count with compression since mount */
    optional int32 compr_saved_blocks = 3;
    /* Show the count of inode newly enabled for compression since mount */
    optional int32 compr_new_inodes = 4;
}

/**
 * Log bucketed battery charge cycles.
 *
 * Each bucket represents cycles of the battery past
 * a given charge point.  For example, bucket 1 is the
 * lowest 1/8th of the battery, and bucket 8 is 100%.
 *
 * Logged from:
 * /sys/class/power_supply/bms/cycle_count, via Vendor.
 */
message VendorChargeCycles {
    optional string reverse_domain_name = 1;
    optional int32 cycle_bucket_1 = 2;
    optional int32 cycle_bucket_2 = 3;
    optional int32 cycle_bucket_3 = 4;
    optional int32 cycle_bucket_4 = 5;
    optional int32 cycle_bucket_5 = 6;
    optional int32 cycle_bucket_6 = 7;
    optional int32 cycle_bucket_7 = 8;
    optional int32 cycle_bucket_8 = 9;
    optional int32 cycle_bucket_9 = 10;
    optional int32 cycle_bucket_10 = 11;
}

/**
 * Logs the report of a failed hardware.
 *
 * Logged from:
 *  Vendor HALs.
 *
 */
message VendorHardwareFailed {
    enum HardwareType {
      HARDWARE_FAILED_UNKNOWN = 0;
      HARDWARE_FAILED_MICROPHONE = 1;
      HARDWARE_FAILED_CODEC = 2;
      HARDWARE_FAILED_SPEAKER = 3;
      HARDWARE_FAILED_FINGERPRINT = 4;
    }
    optional string reverse_domain_name = 1;
    optional HardwareType hardware_type = 2;

    /**
     * hardware_location allows vendors to differentiate between multiple
     * instances of the same hardware_type.  The specific locations are vendor
     * defined integers, referring to board-specific numbering schemes.
     */
    optional int32 hardware_location = 3;
    /**
     * failure_code is specific to the HardwareType of the failed hardware.
     * It should use one of the enum values defined below.
     */
    enum HardwareErrorCode {
      UNKNOWN = 0;
      COMPLETE = 1;
      SPEAKER_HIGH_Z = 2;
      SPEAKER_SHORT = 3;
      FINGERPRINT_SENSOR_BROKEN = 4;
      FINGERPRINT_TOO_MANY_DEAD_PIXELS = 5;
      DEGRADE = 6;
    }
    optional int32 failure_code = 4;
}

/**
 * Log slow I/O operations on the primary storage.
 */
message VendorSlowIo {
    // Classifications of IO Operations.
    enum IoOperation {
      UNKNOWN = 0;
      READ = 1;
      WRITE = 2;
      UNMAP = 3;
      SYNC = 4;
    }
    optional string reverse_domain_name = 1;
    optional IoOperation operation = 2;

    // The number of slow IO operations of this type over 24 hours.
    optional int32 count = 3;
}

/*
 * Logs the reported speech DSP status.
 * Logged from: Vendor audio implementation.
 */
message VendorSpeechDspStat {
    optional string reverse_domain_name = 1;
    // The total Speech DSP uptime in milliseconds.
    optional int32 total_uptime_millis = 2;
    // The total Speech DSP downtime in milliseconds.
    optional int32 total_downtime_millis = 3;
    optional int32 total_crash_count = 4;
    optional int32 total_recover_count = 5;
}

/**
 * Log an event when the device has been physically dropped.
 * Reported from the /vendor partition.
 */
message VendorPhysicalDropDetected {
  optional string reverse_domain_name = 1;
  // Confidence that the event was actually a drop, 0 -> 100
  optional int32 confidence_pctg = 2;
  // Peak acceleration of the drop, in 1/1000s of a g.
  optional int32 accel_peak_thousandths_g = 3;
  // Duration of freefall in ms
  optional int32 freefall_time_millis = 4;
}

/** Represents USB port overheat event. */
message VendorUsbPortOverheat {
  optional string reverse_domain_name = 1;
  /* Temperature of USB port at USB plug event, in 1/10ths of degree C. */
  optional int32 plug_temperature_deci_c = 2;
  /* Maximum temperature of USB port during overheat event, in 1/10ths of degree
   * C. */
  optional int32 max_temperature_deci_c = 3;
  /* Time between USB plug event and overheat threshold trip, in seconds. */
  optional int32 time_to_overheat_secs = 4;
  /* Time between overheat threshold trip and hysteresis, in seconds. */
  optional int32 time_to_hysteresis_secs = 5;
  /* Time between hysteresis and active mitigation ending, in seconds. */
  optional int32 time_to_inactive_secs = 6;
}

/**
 * Log battery health snapshot.
 *
 * Resistance, Voltage, Open Circuit Voltage, Temperature, and Charge Level
 * are snapshotted periodically over 24hrs.
 */
message VendorBatteryHealthSnapshot {
  enum BatterySnapshotType {
    BATTERY_SNAPSHOT_TYPE_UNKNOWN = 0;
    BATTERY_SNAPSHOT_TYPE_MIN_TEMP = 1;         // Snapshot at min batt temp over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MAX_TEMP = 2;         // Snapshot at max batt temp over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MIN_RESISTANCE = 3;   // Snapshot at min batt resistance over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MAX_RESISTANCE = 4;   // Snapshot at max batt resistance over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MIN_VOLTAGE = 5;      // Snapshot at min batt voltage over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MAX_VOLTAGE = 6;      // Snapshot at max batt voltage over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MIN_CURRENT = 7;      // Snapshot at min batt current over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MAX_CURRENT = 8;      // Snapshot at max batt current over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MIN_BATT_LEVEL = 9;   // Snapshot at min battery level (SoC) over 24hrs.
    BATTERY_SNAPSHOT_TYPE_MAX_BATT_LEVEL = 10;  // Snapshot at max battery level (SoC) over 24hrs.
    BATTERY_SNAPSHOT_TYPE_AVG_RESISTANCE = 11;  // Snapshot at average battery resistance over 24hrs.
  }
  optional string reverse_domain_name = 1;
  optional BatterySnapshotType type = 2;
  // Temperature, in 1/10ths of degree C.
  optional int32 temperature_deci_celsius = 3;
  // Voltage Battery Voltage, in microVolts.
  optional int32 voltage_micro_volt = 4;
  // Current Battery current, in microAmps.
  optional int32 current_micro_amps = 5;
  // OpenCircuitVoltage Battery Open Circuit Voltage, in microVolts.
  optional int32 open_circuit_micro_volt = 6;
  // Resistance Battery Resistance, in microOhms.
  optional int32 resistance_micro_ohm = 7;
  // Level Battery Level, as % of full.
  optional int32 level_percent = 8;
}

/**
 * Log battery caused shutdown with the last recorded voltage.
 */
message VendorBatteryCausedShutdown {
 optional string reverse_domain_name = 1;
 // The last recorded battery voltage prior to shutdown.
 optional int32 last_recorded_micro_volt = 2;
}

/**
 * Log mitigation statistics.
 */
message PowerMitigationStats {
 optional string reverse_domain_name = 1;
 // The last triggered count: batoilo.
 optional int32 batoilo_count = 2;
 // The last triggered count: vdroop1.
 optional int32 vdroop1_count = 3;
 // The last triggered count: vdroop2.
 optional int32 vdroop2_count = 4;
 // The last triggered count: smpl_warn.
 optional int32 smpl_warn_count = 5;
 // The last triggered count: ocp_cpu1.
 optional int32 ocp_cpu1_count = 6;
 // The last triggered count: ocp_cpu2.
 optional int32 ocp_cpu2_count = 7;
 // The last triggered count: ocp_gpu.
 optional int32 ocp_gpu_count = 8;
 // The last triggered count: ocp_tpu.
 optional int32 ocp_tpu_count = 9;
 // The last triggered count: soft_ocp_cpu1.
 optional int32 soft_ocp_cpu1_count = 10;
 // The last triggered count: soft_ocp_cpu2.
 optional int32 soft_ocp_cpu2_count = 11;
 // The last triggered count: soft_ocp_gpu.
 optional int32 soft_ocp_gpu_count = 12;
 // The last triggered count: soft_ocp_tpu.
 optional int32 soft_ocp_tpu_count = 13;
 // The last triggered capacity: batoilo.
 optional int32 batoilo_cap = 14;
 // The last triggered capacity: vdroop1.
 optional int32 vdroop1_cap = 15;
 // The last triggered capacity: vdroop2.
 optional int32 vdroop2_cap = 16;
 // The last triggered capacity: smpl_warn.
 optional int32 smpl_warn_cap = 17;
 // The last triggered capacity: ocp_cpu1.
 optional int32 ocp_cpu1_cap = 18;
 // The last triggered capacity: ocp_cpu2.
 optional int32 ocp_cpu2_cap = 19;
 // The last triggered capacity: ocp_gpu.
 optional int32 ocp_gpu_cap = 20;
 // The last triggered capacity: ocp_tpu.
 optional int32 ocp_tpu_cap = 21;
 // The last triggered capacity: soft_ocp_cpu1.
 optional int32 soft_ocp_cpu1_cap = 22;
 // The last triggered capacity: soft_ocp_cpu2.
 optional int32 soft_ocp_cpu2_cap = 23;
 // The last triggered capacity: soft_ocp_gpu.
 optional int32 soft_ocp_gpu_cap = 24;
 // The last triggered capacity: soft_ocp_tpu.
 optional int32 soft_ocp_tpu_cap = 25;
}

/**
 * Log how many segments have been reclaimed in a specific GC mode.
 */
message F2fsGcSegmentInfo {
    optional string reverse_domain_name = 1;
    /* Reclaimed segments in GC normal mode */
    optional int32 reclaimed_segments_normal = 2;
    /* Reclaimed segments in GC urgent high mode */
    optional int32 reclaimed_segments_urgent_high = 3;
    /* Reclaimed segments in GC urgent low mode */
    optional int32 reclaimed_segments_urgent_low = 4;
}

/**
 * Logs an event indicating that a nanoapp loading has failed at the HAL.
 */
message ChreHalNanoappLoadFailed {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  enum Type {
    TYPE_UNKNOWN = 0;
    // Corresponds to preloaded nanoapps on the device.
    TYPE_PRELOADED = 1;
    // Dynamic loading of a nanoapp (e.g. code download).
    TYPE_DYNAMIC = 2;
  }

  enum Reason {
    REASON_UNKNOWN = 0;
    // A generic error code that does not match any of the others.
    REASON_ERROR_GENERIC = 1;
    // Failure at the connection between HAL<->CHRE.
    REASON_CONNECTION_ERROR = 2;
    // System ran out of memory.
    REASON_OOM = 3;
    // Nanoapp did not have the right signing for loading.
    REASON_SIGNATURE_MISMATCH = 4;
  }

  // The 64-bit unique nanoapp identifier of the nanoapp that failed.
  optional int64 nanoapp_id = 2;

  // The type of the load event.
  optional Type type = 3;

  // The reason for the failure.
  optional Reason reason = 4;
}

/**
 * An enum describing a module within CHRE.
 */
enum ChreModuleType {
  CHRE_MODULE_TYPE_UNKNOWN = 0;
  CHRE_MODULE_TYPE_CHRE = 1; // Core CHRE framework
  CHRE_MODULE_TYPE_PAL = 2; // PAL module (could be CHPP)
  CHRE_MODULE_TYPE_NANOAPP = 3;
}

/**
 * An enum describing the CHRE PAL type.
 */
enum ChrePalType {
  CHRE_PAL_TYPE_UNKNOWN = 0;
  CHRE_PAL_TYPE_SENSOR = 1;
  CHRE_PAL_TYPE_WIFI = 2;
  CHRE_PAL_TYPE_GNSS = 3;
  CHRE_PAL_TYPE_WWAN = 4;
  CHRE_PAL_TYPE_AUDIO = 5;
  CHRE_PAL_TYPE_BLE = 6;
}

/**
 * Logs an event indicating that a CHRE PAL open has failed.
 */
message ChrePalOpenFailed {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  enum Type {
    TYPE_UNKNOWN = 0;
    // Initial open when CHRE starts.
    INITIAL_OPEN = 1;
    // Any form of "reopen" event internally in the PAL.
    REOPEN = 2;
  }

  // The PAL this failure event is for.
  optional ChrePalType pal = 2;

  // The type of failure observed.
  optional Type type = 3;
}

/**
 * The type of CHRE API request.
 */
enum ChreApiType {
  CHRE_API_TYPE_UNKNOWN = 0;
  CHRE_API_TYPE_WIFI_SCAN_MONITOR = 1;
  CHRE_API_TYPE_WIFI_ACTIVE_SCAN = 2;
  CHRE_API_TYPE_WIFI_RTT_RANGING = 3;
}

/**
 * The type of CHRE API error.
 */
enum ChreError {
  CHRE_ERROR_UNKNOWN = 0;

  // No error occurred.
  CHRE_ERROR_NONE = 1;

  // An unspecified failure occurred.
  CHRE_ERROR = 2;

  // One or more supplied arguments are invalid.
  CHRE_ERROR_INVALID_ARGUMENT = 3;

  // Unable to satisfy request because the system is busy.
  CHRE_ERROR_BUSY = 4;

  // Unable to allocate memory.
  CHRE_ERROR_NO_MEMORY = 5;

  // The requested feature is not supported.
  CHRE_ERROR_NOT_SUPPORTED = 6;

  // A timeout occurred while processing the request.
  CHRE_ERROR_TIMEOUT = 7;

  // The relevant capability is disabled, for example due to a user
  // configuration that takes precedence over this request.
  CHRE_ERROR_FUNCTION_DISABLED = 8;
}

/**
 * Distribution of CHRE API error codes.
 */
message ChreApiErrorCodeDistributionTaken {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  // The chreGetTime() value when this snapshot was taken, in milliseconds.
  optional int32 snapshot_chre_get_time_ms = 2;

  // The CHRE API type.
  optional ChreApiType api_type = 3;

  // Corresponds to the CHRE error code that occurred, as defined in the
  // "enum chreError" field in chre_api/chre/common.h.
  optional ChreError error_code = 4;
  optional int32 num_errors = 5;
}

/**
 * Snapshot of the dynamic memory allocated in CHRE.
 */
message ChreDynamicMemorySnapshotReported {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  // The chreGetTime() value when this snapshot was taken, in milliseconds.
  optional int32 snapshot_chre_get_time_ms = 2;

  // The type of the module.
  optional ChreModuleType module_type = 3;

  // The unique 64-bit ID for a nanoapp, only used if the module_type is NANOAPP.
  // If module_type is PAL, then it represents the ChrePalType enum. If the module_type
  // is CHRE, then a zero value should be used.
  optional int64 pal_type_or_nanoapp_id = 4;

  // The max allocation amount of this module in bytes.
  optional int32 max_allocation_bytes = 5;

  // The current allocation amount of this module in bytes.
  optional int32 current_allocation_bytes = 6;
}

/**
 * Snapshot of the event queue stats in CHRE.
 */
message ChreEventQueueSnapshotReported {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  // The chreGetTime() value when this snapshot was taken, in milliseconds.
  optional int32 snapshot_chre_get_time_ms = 2;

  // The maximum size the event queue got to (i.e. num pending events).
  optional int32 max_event_queue_size = 3;

  // The average size the event queue got to (i.e. num pending events).
  optional int32 mean_event_queue_size = 4;

  // The number of events that were dropped due to capacity limits.
  optional int32 num_dropped_events = 5;

  // The maximum amount of time it took for an event, from when it was received,
  // to when it was delivered to all interested modules. This value represents
  // the total delay within the CHRE subsystem.
  optional int64 max_queue_delay_us = 6;

  // The mean value of the delay in microseconds.
  optional int64 mean_queue_delay_us = 7;
}

/**
 * Indicates that a nanoapp has woken up the AP.
 */
message ChreApWakeUpOccurred {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  // The 64-bit unique nanoapp identifier that describes the entity that has caused an AP wake-up
  // from CHRE. Whenever this event occurs, this means that the nanoapp sent a message to
  // the AP causing a transition between suspend/wake-up.
  optional int64 nanoapp_id = 2;
}

/**
 * Snapshot of the current battery health of the device.
 */
message BatteryHealthStatus {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  // The algorithm that computes how the health status and health indexes are calculated.
  optional int32 health_algorithm = 2;

  enum HealthStatus {
    UNKNOWN = 0; // The health status is unknown due to a SW limitation or issue
    NOMINAL = 1; // The battery is operating as expected
    MARGINAL = 2; // The battery may need replacement soon
    NEEDS_REPLACEMENT = 3; // The battery needs replacement
    FAILED = 4; // The battery has failed and no longer operates as expected
  }

  // HealthStatus calculated using health_index, health_perf_index.
  optional HealthStatus health_status = 3;

  // A percentage measure of the health of the battery with 100% being perfectly healthy.
  optional int32 health_index = 4;

  // A percentage measure of the battery capacity of the device, affected by cycle life degradation.
  optional int32 health_capacity_index = 5;

  // A percentage measure of the max performance of the device, affected by impedance growth with 100% being perfectly healthy.
  optional int32 health_impedance_index = 6;

  // An index that expresses the likelihood of swelling given the SOC residency stats.
  optional int32 swelling_cumulative = 7;

  // The battery capacity used to determine the health index. This is the reference value from b/223759710.
  optional int32 health_full_capacity = 8;

  // This is the Rslow (resistance) value used (in part) to determine the Perf Index. The activation impedance (b/223545817) can be calculated from it using the perf index.
  optional int32 current_impedance = 9;

  // The (hours) value of TimeH (0xb3), a register value, multiplied by 3.2 hours.
  optional int32 battery_age = 10;

  // The cycle count at the time of the log event.
  optional int32 cycle_count = 11;
}

/**
 * Log battery SOC/temperature usage data.
 *
 * Each data represents cumulative time of the battery
 * spent over a specific SOC and over a specific temperature
 * while charging and while discharging in seconds.
 *
 * Logged from:
 * /sys/class/power_supply/battery/swelling_data, via Vendor.
 */
message BatteryHealthUsage {
  // Vendor reverse domain name (expecting "com.google.pixel").
  optional string reverse_domain_name = 1;

  // The temperature limit (deg C) used to accumulate the time above this value.
  optional int32 temperature_limit_deci_c = 2;

  // The SOC limit (%) used to accumulate the time above this value.
  optional int32 soc_limit = 3;

  // Time (s) accumulated only during charge at the given thresholds.
  optional int32 charge_time_secs = 4;

  // Time (s) accumulated only during discharge at the given thresholds.
  optional int32 discharge_time_secs = 5;
}
