WifiUsability proto for ML

Bug: 113262380
Test: compile, unit tests

Change-Id: I60d29116fa2ee3d5781ef49e30b462b7a26d90bc
diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto
index 11963d2..1fda074 100644
--- a/proto/src/wifi.proto
+++ b/proto/src/wifi.proto
@@ -482,6 +482,9 @@
 
   // Total wifi link layer usage data over the logging duration in ms.
   optional WifiLinkLayerUsageStats wifi_link_layer_usage_stats = 125;
+
+  // Multiple lists of timestamped link layer stats with labels to represent whether wifi is usable
+  repeated WifiUsabilityStats wifi_usability_stats_list = 126;
 }
 
 // Information that gets logged for every WiFi connection.
@@ -1690,4 +1693,74 @@
   // Total time the wifi radio spent doing hotspot 2.0 scans and GAS exchange
   // in ms over the logging duration.
   optional int64 radio_hs20_scan_time_ms = 10;
+}
+
+message WifiUsabilityStatsEntry {
+  // Absolute milliseconds from device boot when these stats were sampled
+  optional int64 time_stamp_ms = 1;
+
+  // The RSSI at the sample time
+  optional int32 rssi = 2;
+
+  // Link speed at the sample time in Mbps
+  optional int32 link_speed_mbps = 3;
+
+  // The total number of tx success counted from the last radio chip reset
+  optional int64 total_tx_success = 4;
+
+  // The total number of MPDU data packet retries counted from the last radio chip reset
+  optional int64 total_tx_retries = 5;
+
+  // The total number of tx bad counted from the last radio chip reset
+  optional int64 total_tx_bad = 6;
+
+  // The total number of rx success counted from the last radio chip reset
+  optional int64 total_rx_success = 7;
+
+  // The total time the wifi radio is on in ms counted from the last radio chip reset
+  optional int64 total_radio_on_time_ms = 8;
+
+  // The total time the wifi radio is doing tx in ms counted from the last radio chip reset
+  optional int64 total_radio_tx_time_ms = 9;
+
+  // The total time the wifi radio is doing rx in ms counted from the last radio chip reset
+  optional int64 total_radio_rx_time_ms = 10;
+
+  // The total time spent on all types of scans in ms counted from the last radio chip reset
+  optional int64 total_scan_time_ms = 11;
+
+  // The total time spent on nan scans in ms counted from the last radio chip reset
+  optional int64 total_nan_scan_time_ms = 12;
+
+  // The total time spent on background scans in ms counted from the last radio chip reset
+  optional int64 total_background_scan_time_ms = 13;
+
+  // The total time spent on roam scans in ms counted from the last radio chip reset
+  optional int64 total_roam_scan_time_ms = 14;
+
+  // The total time spent on pno scans in ms counted from the last radio chip reset
+  optional int64 total_pno_scan_time_ms = 15;
+
+  // The total time spent on hotspot2.0 scans and GAS exchange in ms counted from the last radio
+  // chip reset
+  optional int64 total_hotspot_2_scan_time_ms = 16;
+}
+
+message WifiUsabilityStats {
+  enum Label {
+    // Default label
+    LABEL_UNKNOWN = 0;
+
+    // Wifi is usable
+    LABEL_GOOD = 1;
+
+    // Wifi is unusable
+    LABEL_BAD = 2;
+  }
+
+  // The current wifi usability state
+  optional Label label = 1;
+
+  // The list of timestamped wifi usability stats
+  repeated WifiUsabilityStatsEntry stats = 2;
 }
\ No newline at end of file