Car: remove use of -static hidl java am: be4780ccce am: 8b9969b76e am: 79295cd9a2 am: 8d62530216
am: e32312ab6f

Change-Id: I04b091c309ac3264f7ffb145a35c40bdd272960c
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 4bf7e9a..d828faa 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -54,6 +54,9 @@
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android.car7_intermediates/)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android.car_intermediates/)
 
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android.car_intermediates/src/android/car/hardware/ICarDiagnostic*.java)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android.car7_intermediates/src/android/car/hardware/ICarDiagnostic*.java)
+
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
diff --git a/car-lib/Android.mk b/car-lib/Android.mk
index a07e940..53be4a7 100644
--- a/car-lib/Android.mk
+++ b/car-lib/Android.mk
@@ -37,6 +37,7 @@
 car_lib_sources += $(call all-java-files-under, src_feature_current)
 endif
 car_lib_sources += $(call all-Iaidl-files-under, src)
+LOCAL_AIDL_INCLUDES += system/bt/binder
 
 LOCAL_SRC_FILES := $(car_lib_sources)
 
@@ -65,6 +66,7 @@
 LOCAL_MODULE := android.car7
 LOCAL_SRC_FILES := $(car_lib_sources)
 LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+LOCAL_AIDL_INCLUDES += system/bt/binder
 
 ifeq ($(EMMA_INSTRUMENT_FRAMEWORK),true)
 LOCAL_EMMA_INSTRUMENT := true
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index fe2794b..65a1ec1 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -353,14 +353,14 @@
 
 }
 
-package android.car.hardware {
+package android.car.diagnostic {
 
   public class CarDiagnosticEvent implements android.os.Parcelable {
     ctor public CarDiagnosticEvent(android.os.Parcel);
     method public int describeContents();
     method public java.lang.Integer getFuelSystemStatus();
     method public java.lang.Integer getFuelType();
-    method public android.car.hardware.CarDiagnosticEvent.CommonIgnitionMonitors getIgnitionMonitors();
+    method public android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors getIgnitionMonitors();
     method public java.lang.Integer getSecondaryAirStatus();
     method public float getSystemFloatSensor(int, float);
     method public java.lang.Float getSystemFloatSensor(int);
@@ -374,37 +374,37 @@
     method public boolean isLiveFrame();
     method public void writeToJson(android.util.JsonWriter) throws java.io.IOException;
     method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.car.hardware.CarDiagnosticEvent> CREATOR;
+    field public static final android.os.Parcelable.Creator<android.car.diagnostic.CarDiagnosticEvent> CREATOR;
     field public final java.lang.String dtc;
     field public final int frameType;
     field public final long timestamp;
   }
 
   public static class CarDiagnosticEvent.Builder {
-    method public android.car.hardware.CarDiagnosticEvent.Builder atTimestamp(long);
-    method public android.car.hardware.CarDiagnosticEvent build();
-    method public static android.car.hardware.CarDiagnosticEvent.Builder newFreezeFrameBuilder();
-    method public static android.car.hardware.CarDiagnosticEvent.Builder newLiveFrameBuilder();
-    method public android.car.hardware.CarDiagnosticEvent.Builder withDtc(java.lang.String);
-    method public android.car.hardware.CarDiagnosticEvent.Builder withFloatValue(int, float);
-    method public android.car.hardware.CarDiagnosticEvent.Builder withIntValue(int, int);
+    method public android.car.diagnostic.CarDiagnosticEvent.Builder atTimestamp(long);
+    method public android.car.diagnostic.CarDiagnosticEvent build();
+    method public static android.car.diagnostic.CarDiagnosticEvent.Builder newFreezeFrameBuilder();
+    method public static android.car.diagnostic.CarDiagnosticEvent.Builder newLiveFrameBuilder();
+    method public android.car.diagnostic.CarDiagnosticEvent.Builder withDtc(java.lang.String);
+    method public android.car.diagnostic.CarDiagnosticEvent.Builder withFloatValue(int, float);
+    method public android.car.diagnostic.CarDiagnosticEvent.Builder withIntValue(int, int);
   }
 
   public static class CarDiagnosticEvent.CommonIgnitionMonitors {
-    method public android.car.hardware.CarDiagnosticEvent.CompressionIgnitionMonitors asCompressionIgnitionMonitors();
-    method public android.car.hardware.CarDiagnosticEvent.SparkIgnitionMonitors asSparkIgnitionMonitors();
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor components;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor fuelSystem;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor misfire;
+    method public android.car.diagnostic.CarDiagnosticEvent.CompressionIgnitionMonitors asCompressionIgnitionMonitors();
+    method public android.car.diagnostic.CarDiagnosticEvent.SparkIgnitionMonitors asSparkIgnitionMonitors();
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor components;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor fuelSystem;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor misfire;
   }
 
-  public static final class CarDiagnosticEvent.CompressionIgnitionMonitors extends android.car.hardware.CarDiagnosticEvent.CommonIgnitionMonitors {
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor EGROrVVT;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor NMHCCatalyst;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor NOxSCR;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor PMFilter;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor boostPressure;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor exhaustGasSensor;
+  public static final class CarDiagnosticEvent.CompressionIgnitionMonitors extends android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors {
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor EGROrVVT;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor NMHCCatalyst;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor NOxSCR;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor PMFilter;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor boostPressure;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor exhaustGasSensor;
   }
 
   public static final class CarDiagnosticEvent.FuelSystemStatus {
@@ -463,29 +463,29 @@
   public static abstract class CarDiagnosticEvent.SecondaryAirStatus.Status implements java.lang.annotation.Annotation {
   }
 
-  public static final class CarDiagnosticEvent.SparkIgnitionMonitors extends android.car.hardware.CarDiagnosticEvent.CommonIgnitionMonitors {
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor ACRefrigerant;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor EGR;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor catalyst;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor evaporativeSystem;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor heatedCatalyst;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor oxygenSensor;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor oxygenSensorHeater;
-    field public final android.car.hardware.CarDiagnosticEvent.IgnitionMonitor secondaryAirSystem;
+  public static final class CarDiagnosticEvent.SparkIgnitionMonitors extends android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors {
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor ACRefrigerant;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor EGR;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor catalyst;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor evaporativeSystem;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor heatedCatalyst;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor oxygenSensor;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor oxygenSensorHeater;
+    field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor secondaryAirSystem;
   }
 
   public final class CarDiagnosticManager {
     method public boolean clearFreezeFrames(long...) throws android.car.CarNotConnectedException;
-    method public android.car.hardware.CarDiagnosticEvent getFreezeFrame(long) throws android.car.CarNotConnectedException;
+    method public android.car.diagnostic.CarDiagnosticEvent getFreezeFrame(long) throws android.car.CarNotConnectedException;
     method public long[] getFreezeFrameTimestamps() throws android.car.CarNotConnectedException;
-    method public android.car.hardware.CarDiagnosticEvent getLatestLiveFrame() throws android.car.CarNotConnectedException;
+    method public android.car.diagnostic.CarDiagnosticEvent getLatestLiveFrame() throws android.car.CarNotConnectedException;
     method public boolean isClearFreezeFramesSupported() throws android.car.CarNotConnectedException;
     method public boolean isFreezeFrameNotificationSupported() throws android.car.CarNotConnectedException;
     method public boolean isGetFreezeFrameSupported() throws android.car.CarNotConnectedException;
     method public boolean isLiveFrameSupported() throws android.car.CarNotConnectedException;
     method public void onCarDisconnected();
-    method public boolean registerListener(android.car.hardware.CarDiagnosticManager.OnDiagnosticEventListener, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
-    method public void unregisterListener(android.car.hardware.CarDiagnosticManager.OnDiagnosticEventListener);
+    method public boolean registerListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method public void unregisterListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener);
     field public static final int FRAME_TYPE_FREEZE = 1; // 0x1
     field public static final int FRAME_TYPE_LIVE = 0; // 0x0
   }
@@ -494,9 +494,126 @@
   }
 
   public static abstract interface CarDiagnosticManager.OnDiagnosticEventListener {
-    method public abstract void onDiagnosticEvent(android.car.hardware.CarDiagnosticEvent);
+    method public abstract void onDiagnosticEvent(android.car.diagnostic.CarDiagnosticEvent);
   }
 
+  public final class FloatSensorIndex {
+    field public static final int ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 58; // 0x3a
+    field public static final int ABSOLUTE_LOAD_VALUE = 48; // 0x30
+    field public static final int ABSOLUTE_THROTTLE_POSITION_B = 51; // 0x33
+    field public static final int ABSOLUTE_THROTTLE_POSITION_C = 52; // 0x34
+    field public static final int ACCELERATOR_PEDAL_POSITION_D = 53; // 0x35
+    field public static final int ACCELERATOR_PEDAL_POSITION_E = 54; // 0x36
+    field public static final int ACCELERATOR_PEDAL_POSITION_F = 55; // 0x37
+    field public static final int CALCULATED_ENGINE_LOAD = 0; // 0x0
+    field public static final int CATALYST_TEMPERATURE_BANK1_SENSOR1 = 44; // 0x2c
+    field public static final int CATALYST_TEMPERATURE_BANK1_SENSOR2 = 46; // 0x2e
+    field public static final int CATALYST_TEMPERATURE_BANK2_SENSOR1 = 45; // 0x2d
+    field public static final int CATALYST_TEMPERATURE_BANK2_SENSOR2 = 47; // 0x2f
+    field public static final int COMMANDED_EVAPORATIVE_PURGE = 41; // 0x29
+    field public static final int COMMANDED_EXHAUST_GAS_RECIRCULATION = 39; // 0x27
+    field public static final int COMMANDED_THROTTLE_ACTUATOR = 56; // 0x38
+    field public static final int ENGINE_COOLANT_TEMPERATURE = 1; // 0x1
+    field public static final int ENGINE_FUEL_RATE = 70; // 0x46
+    field public static final int ENGINE_RPM = 8; // 0x8
+    field public static final int ETHANOL_FUEL_PERCENTAGE = 57; // 0x39
+    field public static final int EVAPORATION_SYSTEM_VAPOR_PRESSURE = 43; // 0x2b
+    field public static final int EXHAUST_GAS_RECIRCULATION_ERROR = 40; // 0x28
+    field public static final int FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO = 49; // 0x31
+    field public static final int FUEL_INJECTION_TIMING = 69; // 0x45
+    field public static final int FUEL_PRESSURE = 6; // 0x6
+    field public static final int FUEL_RAIL_GAUGE_PRESSURE = 38; // 0x26
+    field public static final int FUEL_RAIL_PRESSURE = 37; // 0x25
+    field public static final int FUEL_TANK_LEVEL_INPUT = 42; // 0x2a
+    field public static final int HYBRID_BATTERY_PACK_REMAINING_LIFE = 68; // 0x44
+    field public static final int INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 7; // 0x7
+    field public static final int LAST_SYSTEM = 70; // 0x46
+    field public static final int LONG_TERM_FUEL_TRIM_BANK1 = 3; // 0x3
+    field public static final int LONG_TERM_FUEL_TRIM_BANK2 = 5; // 0x5
+    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 63; // 0x3f
+    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 64; // 0x40
+    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 65; // 0x41
+    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 66; // 0x42
+    field public static final int MAF_AIR_FLOW_RATE = 11; // 0xb
+    field public static final int OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO = 15; // 0xf
+    field public static final int OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM = 14; // 0xe
+    field public static final int OXYGEN_SENSOR1_VOLTAGE = 13; // 0xd
+    field public static final int OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO = 18; // 0x12
+    field public static final int OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM = 17; // 0x11
+    field public static final int OXYGEN_SENSOR2_VOLTAGE = 16; // 0x10
+    field public static final int OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO = 21; // 0x15
+    field public static final int OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM = 20; // 0x14
+    field public static final int OXYGEN_SENSOR3_VOLTAGE = 19; // 0x13
+    field public static final int OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO = 24; // 0x18
+    field public static final int OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM = 23; // 0x17
+    field public static final int OXYGEN_SENSOR4_VOLTAGE = 22; // 0x16
+    field public static final int OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO = 27; // 0x1b
+    field public static final int OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM = 26; // 0x1a
+    field public static final int OXYGEN_SENSOR5_VOLTAGE = 25; // 0x19
+    field public static final int OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO = 30; // 0x1e
+    field public static final int OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM = 29; // 0x1d
+    field public static final int OXYGEN_SENSOR6_VOLTAGE = 28; // 0x1c
+    field public static final int OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO = 33; // 0x21
+    field public static final int OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM = 32; // 0x20
+    field public static final int OXYGEN_SENSOR7_VOLTAGE = 31; // 0x1f
+    field public static final int OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO = 36; // 0x24
+    field public static final int OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM = 35; // 0x23
+    field public static final int OXYGEN_SENSOR8_VOLTAGE = 34; // 0x22
+    field public static final int RELATIVE_ACCELERATOR_PEDAL_POSITION = 67; // 0x43
+    field public static final int RELATIVE_THROTTLE_POSITION = 50; // 0x32
+    field public static final int SHORT_TERM_FUEL_TRIM_BANK1 = 2; // 0x2
+    field public static final int SHORT_TERM_FUEL_TRIM_BANK2 = 4; // 0x4
+    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 59; // 0x3b
+    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 60; // 0x3c
+    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 61; // 0x3d
+    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 62; // 0x3e
+    field public static final int THROTTLE_POSITION = 12; // 0xc
+    field public static final int TIMING_ADVANCE = 10; // 0xa
+    field public static final int VEHICLE_SPEED = 9; // 0x9
+    field public static final int VENDOR_START = 71; // 0x47
+  }
+
+  public final class IntegerSensorIndex {
+    field public static final int ABSOLUTE_BAROMETRIC_PRESSURE = 11; // 0xb
+    field public static final int AMBIENT_AIR_TEMPERATURE = 13; // 0xd
+    field public static final int COMMANDED_SECONDARY_AIR_STATUS = 5; // 0x5
+    field public static final int CONTROL_MODULE_VOLTAGE = 12; // 0xc
+    field public static final int DISTANCE_TRAVELED_SINCE_CODES_CLEARED = 10; // 0xa
+    field public static final int DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON = 8; // 0x8
+    field public static final int DRIVER_DEMAND_PERCENT_TORQUE = 24; // 0x18
+    field public static final int ENGINE_ACTUAL_PERCENT_TORQUE = 25; // 0x19
+    field public static final int ENGINE_OIL_TEMPERATURE = 23; // 0x17
+    field public static final int ENGINE_PERCENT_TORQUE_DATA_IDLE = 27; // 0x1b
+    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT1 = 28; // 0x1c
+    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT2 = 29; // 0x1d
+    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT3 = 30; // 0x1e
+    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT4 = 31; // 0x1f
+    field public static final int ENGINE_REFERENCE_PERCENT_TORQUE = 26; // 0x1a
+    field public static final int FUEL_RAIL_ABSOLUTE_PRESSURE = 22; // 0x16
+    field public static final int FUEL_SYSTEM_STATUS = 0; // 0x0
+    field public static final int FUEL_TYPE = 21; // 0x15
+    field public static final int IGNITION_MONITORS_SUPPORTED = 2; // 0x2
+    field public static final int IGNITION_SPECIFIC_MONITORS = 3; // 0x3
+    field public static final int INTAKE_AIR_TEMPERATURE = 4; // 0x4
+    field public static final int LAST_SYSTEM = 31; // 0x1f
+    field public static final int MALFUNCTION_INDICATOR_LIGHT_ON = 1; // 0x1
+    field public static final int MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR = 20; // 0x14
+    field public static final int MAX_FUEL_AIR_EQUIVALENCE_RATIO = 16; // 0x10
+    field public static final int MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 19; // 0x13
+    field public static final int MAX_OXYGEN_SENSOR_CURRENT = 18; // 0x12
+    field public static final int MAX_OXYGEN_SENSOR_VOLTAGE = 17; // 0x11
+    field public static final int NUM_OXYGEN_SENSORS_PRESENT = 6; // 0x6
+    field public static final int RUNTIME_SINCE_ENGINE_START = 7; // 0x7
+    field public static final int TIME_SINCE_TROUBLE_CODES_CLEARED = 15; // 0xf
+    field public static final int TIME_WITH_MALFUNCTION_LIGHT_ON = 14; // 0xe
+    field public static final int VENDOR_START = 32; // 0x20
+    field public static final int WARMUPS_SINCE_CODES_CLEARED = 9; // 0x9
+  }
+
+}
+
+package android.car.hardware {
+
   public class CarPropertyConfig<T> implements android.os.Parcelable {
     method public int describeContents();
     method public int getAreaCount();
@@ -645,119 +762,6 @@
     method public abstract void onErrorEvent(int, int);
   }
 
-  public final class FloatSensorIndex {
-    field public static final int ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 58; // 0x3a
-    field public static final int ABSOLUTE_LOAD_VALUE = 48; // 0x30
-    field public static final int ABSOLUTE_THROTTLE_POSITION_B = 51; // 0x33
-    field public static final int ABSOLUTE_THROTTLE_POSITION_C = 52; // 0x34
-    field public static final int ACCELERATOR_PEDAL_POSITION_D = 53; // 0x35
-    field public static final int ACCELERATOR_PEDAL_POSITION_E = 54; // 0x36
-    field public static final int ACCELERATOR_PEDAL_POSITION_F = 55; // 0x37
-    field public static final int CALCULATED_ENGINE_LOAD = 0; // 0x0
-    field public static final int CATALYST_TEMPERATURE_BANK1_SENSOR1 = 44; // 0x2c
-    field public static final int CATALYST_TEMPERATURE_BANK1_SENSOR2 = 46; // 0x2e
-    field public static final int CATALYST_TEMPERATURE_BANK2_SENSOR1 = 45; // 0x2d
-    field public static final int CATALYST_TEMPERATURE_BANK2_SENSOR2 = 47; // 0x2f
-    field public static final int COMMANDED_EVAPORATIVE_PURGE = 41; // 0x29
-    field public static final int COMMANDED_EXHAUST_GAS_RECIRCULATION = 39; // 0x27
-    field public static final int COMMANDED_THROTTLE_ACTUATOR = 56; // 0x38
-    field public static final int ENGINE_COOLANT_TEMPERATURE = 1; // 0x1
-    field public static final int ENGINE_FUEL_RATE = 70; // 0x46
-    field public static final int ENGINE_RPM = 8; // 0x8
-    field public static final int ETHANOL_FUEL_PERCENTAGE = 57; // 0x39
-    field public static final int EVAPORATION_SYSTEM_VAPOR_PRESSURE = 43; // 0x2b
-    field public static final int EXHAUST_GAS_RECIRCULATION_ERROR = 40; // 0x28
-    field public static final int FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO = 49; // 0x31
-    field public static final int FUEL_INJECTION_TIMING = 69; // 0x45
-    field public static final int FUEL_PRESSURE = 6; // 0x6
-    field public static final int FUEL_RAIL_GAUGE_PRESSURE = 38; // 0x26
-    field public static final int FUEL_RAIL_PRESSURE = 37; // 0x25
-    field public static final int FUEL_TANK_LEVEL_INPUT = 42; // 0x2a
-    field public static final int HYBRID_BATTERY_PACK_REMAINING_LIFE = 68; // 0x44
-    field public static final int INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 7; // 0x7
-    field public static final int LAST_SYSTEM = 70; // 0x46
-    field public static final int LONG_TERM_FUEL_TRIM_BANK1 = 3; // 0x3
-    field public static final int LONG_TERM_FUEL_TRIM_BANK2 = 5; // 0x5
-    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 63; // 0x3f
-    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 64; // 0x40
-    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 65; // 0x41
-    field public static final int LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 66; // 0x42
-    field public static final int MAF_AIR_FLOW_RATE = 11; // 0xb
-    field public static final int OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO = 15; // 0xf
-    field public static final int OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM = 14; // 0xe
-    field public static final int OXYGEN_SENSOR1_VOLTAGE = 13; // 0xd
-    field public static final int OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO = 18; // 0x12
-    field public static final int OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM = 17; // 0x11
-    field public static final int OXYGEN_SENSOR2_VOLTAGE = 16; // 0x10
-    field public static final int OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO = 21; // 0x15
-    field public static final int OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM = 20; // 0x14
-    field public static final int OXYGEN_SENSOR3_VOLTAGE = 19; // 0x13
-    field public static final int OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO = 24; // 0x18
-    field public static final int OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM = 23; // 0x17
-    field public static final int OXYGEN_SENSOR4_VOLTAGE = 22; // 0x16
-    field public static final int OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO = 27; // 0x1b
-    field public static final int OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM = 26; // 0x1a
-    field public static final int OXYGEN_SENSOR5_VOLTAGE = 25; // 0x19
-    field public static final int OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO = 30; // 0x1e
-    field public static final int OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM = 29; // 0x1d
-    field public static final int OXYGEN_SENSOR6_VOLTAGE = 28; // 0x1c
-    field public static final int OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO = 33; // 0x21
-    field public static final int OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM = 32; // 0x20
-    field public static final int OXYGEN_SENSOR7_VOLTAGE = 31; // 0x1f
-    field public static final int OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO = 36; // 0x24
-    field public static final int OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM = 35; // 0x23
-    field public static final int OXYGEN_SENSOR8_VOLTAGE = 34; // 0x22
-    field public static final int RELATIVE_ACCELERATOR_PEDAL_POSITION = 67; // 0x43
-    field public static final int RELATIVE_THROTTLE_POSITION = 50; // 0x32
-    field public static final int SHORT_TERM_FUEL_TRIM_BANK1 = 2; // 0x2
-    field public static final int SHORT_TERM_FUEL_TRIM_BANK2 = 4; // 0x4
-    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 59; // 0x3b
-    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 60; // 0x3c
-    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 61; // 0x3d
-    field public static final int SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 62; // 0x3e
-    field public static final int THROTTLE_POSITION = 12; // 0xc
-    field public static final int TIMING_ADVANCE = 10; // 0xa
-    field public static final int VEHICLE_SPEED = 9; // 0x9
-    field public static final int VENDOR_START = 71; // 0x47
-  }
-
-  public final class IntegerSensorIndex {
-    field public static final int ABSOLUTE_BAROMETRIC_PRESSURE = 11; // 0xb
-    field public static final int AMBIENT_AIR_TEMPERATURE = 13; // 0xd
-    field public static final int COMMANDED_SECONDARY_AIR_STATUS = 5; // 0x5
-    field public static final int CONTROL_MODULE_VOLTAGE = 12; // 0xc
-    field public static final int DISTANCE_TRAVELED_SINCE_CODES_CLEARED = 10; // 0xa
-    field public static final int DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON = 8; // 0x8
-    field public static final int DRIVER_DEMAND_PERCENT_TORQUE = 24; // 0x18
-    field public static final int ENGINE_ACTUAL_PERCENT_TORQUE = 25; // 0x19
-    field public static final int ENGINE_OIL_TEMPERATURE = 23; // 0x17
-    field public static final int ENGINE_PERCENT_TORQUE_DATA_IDLE = 27; // 0x1b
-    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT1 = 28; // 0x1c
-    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT2 = 29; // 0x1d
-    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT3 = 30; // 0x1e
-    field public static final int ENGINE_PERCENT_TORQUE_DATA_POINT4 = 31; // 0x1f
-    field public static final int ENGINE_REFERENCE_PERCENT_TORQUE = 26; // 0x1a
-    field public static final int FUEL_RAIL_ABSOLUTE_PRESSURE = 22; // 0x16
-    field public static final int FUEL_SYSTEM_STATUS = 0; // 0x0
-    field public static final int FUEL_TYPE = 21; // 0x15
-    field public static final int IGNITION_MONITORS_SUPPORTED = 2; // 0x2
-    field public static final int IGNITION_SPECIFIC_MONITORS = 3; // 0x3
-    field public static final int INTAKE_AIR_TEMPERATURE = 4; // 0x4
-    field public static final int LAST_SYSTEM = 31; // 0x1f
-    field public static final int MALFUNCTION_INDICATOR_LIGHT_ON = 1; // 0x1
-    field public static final int MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR = 20; // 0x14
-    field public static final int MAX_FUEL_AIR_EQUIVALENCE_RATIO = 16; // 0x10
-    field public static final int MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 19; // 0x13
-    field public static final int MAX_OXYGEN_SENSOR_CURRENT = 18; // 0x12
-    field public static final int MAX_OXYGEN_SENSOR_VOLTAGE = 17; // 0x11
-    field public static final int NUM_OXYGEN_SENSORS_PRESENT = 6; // 0x6
-    field public static final int RUNTIME_SINCE_ENGINE_START = 7; // 0x7
-    field public static final int TIME_SINCE_TROUBLE_CODES_CLEARED = 15; // 0xf
-    field public static final int TIME_WITH_MALFUNCTION_LIGHT_ON = 14; // 0xe
-    field public static final int VENDOR_START = 32; // 0x20
-    field public static final int WARMUPS_SINCE_CODES_CLEARED = 9; // 0x9
-  }
-
 }
 
 package android.car.hardware.cabin {
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index 706f7aa..10d5d03 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -22,7 +22,7 @@
 import android.car.annotation.FutureFeature;
 import android.car.cluster.CarInstrumentClusterManager;
 import android.car.content.pm.CarPackageManager;
-import android.car.hardware.CarDiagnosticManager;
+import android.car.diagnostic.CarDiagnosticManager;
 import android.car.hardware.CarSensorManager;
 import android.car.hardware.CarVendorExtensionManager;
 import android.car.hardware.cabin.CarCabinManager;
diff --git a/car-lib/src/android/car/hardware/CarDiagnosticEvent.aidl b/car-lib/src/android/car/diagnostic/CarDiagnosticEvent.aidl
similarity index 95%
rename from car-lib/src/android/car/hardware/CarDiagnosticEvent.aidl
rename to car-lib/src/android/car/diagnostic/CarDiagnosticEvent.aidl
index 73b184e..cd9b9a7 100644
--- a/car-lib/src/android/car/hardware/CarDiagnosticEvent.aidl
+++ b/car-lib/src/android/car/diagnostic/CarDiagnosticEvent.aidl
@@ -14,6 +14,6 @@
  * limitations under the License.
  */
 
-package android.car.hardware;
+package android.car.diagnostic;
 
 parcelable CarDiagnosticEvent;
diff --git a/car-lib/src/android/car/hardware/CarDiagnosticEvent.java b/car-lib/src/android/car/diagnostic/CarDiagnosticEvent.java
similarity index 86%
rename from car-lib/src/android/car/hardware/CarDiagnosticEvent.java
rename to car-lib/src/android/car/diagnostic/CarDiagnosticEvent.java
index a065b3b..e8ec2b5 100644
--- a/car-lib/src/android/car/hardware/CarDiagnosticEvent.java
+++ b/car-lib/src/android/car/diagnostic/CarDiagnosticEvent.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.car.hardware;
+package android.car.diagnostic;
 
 import android.annotation.IntDef;
 import android.annotation.Nullable;
@@ -253,13 +253,13 @@
         SparseArray<Float> newFloatValues = floatValues.clone();
         for (int i = 0; i < intValues.size(); ++i) {
             int key = intValues.keyAt(i);
-            if (key >= IntegerSensorIndex.LAST_SYSTEM) {
+            if (key >= android.car.diagnostic.IntegerSensorIndex.LAST_SYSTEM) {
                 newIntValues.delete(key);
             }
         }
         for (int i = 0; i < floatValues.size(); ++i) {
             int key = floatValues.keyAt(i);
-            if (key >= FloatSensorIndex.LAST_SYSTEM) {
+            if (key >= android.car.diagnostic.FloatSensorIndex.LAST_SYSTEM) {
                 newFloatValues.delete(key);
             }
         }
@@ -398,7 +398,7 @@
      * Returns defaultValue otherwise.
      */
     public int getSystemIntegerSensor(
-            @IntegerSensorIndex.SensorIndex int sensor, int defaultValue) {
+            @android.car.diagnostic.IntegerSensorIndex.SensorIndex int sensor, int defaultValue) {
         return intValues.get(sensor, defaultValue);
     }
 
@@ -407,7 +407,7 @@
      * Returns defaultValue otherwise.
      */
     public float getSystemFloatSensor(
-            @FloatSensorIndex.SensorIndex int sensor, float defaultValue) {
+            @android.car.diagnostic.FloatSensorIndex.SensorIndex int sensor, float defaultValue) {
         return floatValues.get(sensor, defaultValue);
     }
 
@@ -432,7 +432,7 @@
      * Returns null otherwise.
      */
     public @Nullable Integer getSystemIntegerSensor(
-            @IntegerSensorIndex.SensorIndex int sensor) {
+            @android.car.diagnostic.IntegerSensorIndex.SensorIndex int sensor) {
         int index = intValues.indexOfKey(sensor);
         if (index < 0) return null;
         return intValues.valueAt(index);
@@ -443,7 +443,7 @@
      * Returns null otherwise.
      */
     public @Nullable Float getSystemFloatSensor(
-            @FloatSensorIndex.SensorIndex int sensor) {
+            @android.car.diagnostic.FloatSensorIndex.SensorIndex int sensor) {
         int index = floatValues.indexOfKey(sensor);
         if (index < 0) return null;
         return floatValues.valueAt(index);
@@ -471,7 +471,7 @@
 
     /**
      * Represents possible states of the fuel system; see {@link
-     * IntegerSensorIndex#FUEL_SYSTEM_STATUS}
+     * android.car.diagnostic.IntegerSensorIndex#FUEL_SYSTEM_STATUS}
      */
     public static final class FuelSystemStatus {
         private FuelSystemStatus() {}
@@ -496,7 +496,7 @@
 
     /**
      * Represents possible states of the secondary air system; see {@link
-     * IntegerSensorIndex#COMMANDED_SECONDARY_AIR_STATUS}
+     * android.car.diagnostic.IntegerSensorIndex#COMMANDED_SECONDARY_AIR_STATUS}
      */
     public static final class SecondaryAirStatus {
         private SecondaryAirStatus() {}
@@ -519,7 +519,7 @@
 
     /**
      * Represents possible types of fuel; see {@link
-     * IntegerSensorIndex#FUEL_TYPE}
+     * android.car.diagnostic.IntegerSensorIndex#FUEL_TYPE}
      */
     public static final class FuelType {
         private FuelType() {}
@@ -581,13 +581,7 @@
     }
 
     /**
-<<<<<<< HEAD
      * Represents the state of an ignition monitor on a vehicle.
-=======
-     * Represents possible states of the ignition monitors on the vehicle; see {@link
-     * IntegerSensorIndex#IGNITION_MONITORS_SUPPORTED} see {@link
-     * IntegerSensorIndex#IGNITION_SPECIFIC_MONITORS}
->>>>>>> 49cfe37f... Remove the CarDiagnosticSensorIndices class as it merely acted as a hollow namespace
      */
     public static final class IgnitionMonitor {
         public final boolean available;
@@ -625,14 +619,20 @@
         public final IgnitionMonitor fuelSystem;
         public final IgnitionMonitor misfire;
 
-        static final int COMPONENTS_AVAILABLE = 0x1 << 0;
-        static final int COMPONENTS_INCOMPLETE = 0x1 << 1;
+        /** @hide */
+        public static final int COMPONENTS_AVAILABLE = 0x1 << 0;
+        /** @hide */
+        public static final int COMPONENTS_INCOMPLETE = 0x1 << 1;
 
-        static final int FUEL_SYSTEM_AVAILABLE = 0x1 << 2;
-        static final int FUEL_SYSTEM_INCOMPLETE = 0x1 << 3;
+        /** @hide */
+        public static final int FUEL_SYSTEM_AVAILABLE = 0x1 << 2;
+        /** @hide */
+        public static final int FUEL_SYSTEM_INCOMPLETE = 0x1 << 3;
 
-        static final int MISFIRE_AVAILABLE = 0x1 << 4;
-        static final int MISFIRE_INCOMPLETE = 0x1 << 5;
+        /** @hide */
+        public static final int MISFIRE_AVAILABLE = 0x1 << 4;
+        /** @hide */
+        public static final int MISFIRE_INCOMPLETE = 0x1 << 5;
 
         static final IgnitionMonitor.Decoder COMPONENTS_DECODER =
                 new IgnitionMonitor.Decoder(COMPONENTS_AVAILABLE, COMPONENTS_INCOMPLETE);
@@ -684,29 +684,45 @@
         public final IgnitionMonitor heatedCatalyst;
         public final IgnitionMonitor catalyst;
 
-        static final int EGR_AVAILABLE = 0x1 << 6;
-        static final int EGR_INCOMPLETE = 0x1 << 7;
+        /** @hide */
+        public static final int EGR_AVAILABLE = 0x1 << 6;
+        /** @hide */
+        public static final int EGR_INCOMPLETE = 0x1 << 7;
 
-        static final int OXYGEN_SENSOR_HEATER_AVAILABLE = 0x1 << 8;
-        static final int OXYGEN_SENSOR_HEATER_INCOMPLETE = 0x1 << 9;
+        /** @hide */
+        public static final int OXYGEN_SENSOR_HEATER_AVAILABLE = 0x1 << 8;
+        /** @hide */
+        public static final int OXYGEN_SENSOR_HEATER_INCOMPLETE = 0x1 << 9;
 
-        static final int OXYGEN_SENSOR_AVAILABLE = 0x1 << 10;
-        static final int OXYGEN_SENSOR_INCOMPLETE = 0x1 << 11;
+        /** @hide */
+        public static final int OXYGEN_SENSOR_AVAILABLE = 0x1 << 10;
+        /** @hide */
+        public static final int OXYGEN_SENSOR_INCOMPLETE = 0x1 << 11;
 
-        static final int AC_REFRIGERANT_AVAILABLE = 0x1 << 12;
-        static final int AC_REFRIGERANT_INCOMPLETE = 0x1 << 13;
+        /** @hide */
+        public static final int AC_REFRIGERANT_AVAILABLE = 0x1 << 12;
+        /** @hide */
+        public static final int AC_REFRIGERANT_INCOMPLETE = 0x1 << 13;
 
-        static final int SECONDARY_AIR_SYSTEM_AVAILABLE = 0x1 << 14;
-        static final int SECONDARY_AIR_SYSTEM_INCOMPLETE = 0x1 << 15;
+        /** @hide */
+        public static final int SECONDARY_AIR_SYSTEM_AVAILABLE = 0x1 << 14;
+        /** @hide */
+        public static final int SECONDARY_AIR_SYSTEM_INCOMPLETE = 0x1 << 15;
 
-        static final int EVAPORATIVE_SYSTEM_AVAILABLE = 0x1 << 16;
-        static final int EVAPORATIVE_SYSTEM_INCOMPLETE = 0x1 << 17;
+        /** @hide */
+        public static final int EVAPORATIVE_SYSTEM_AVAILABLE = 0x1 << 16;
+        /** @hide */
+        public static final int EVAPORATIVE_SYSTEM_INCOMPLETE = 0x1 << 17;
 
-        static final int HEATED_CATALYST_AVAILABLE = 0x1 << 18;
-        static final int HEATED_CATALYST_INCOMPLETE = 0x1 << 19;
+        /** @hide */
+        public static final int HEATED_CATALYST_AVAILABLE = 0x1 << 18;
+        /** @hide */
+        public static final int HEATED_CATALYST_INCOMPLETE = 0x1 << 19;
 
-        static final int CATALYST_AVAILABLE = 0x1 << 20;
-        static final int CATALYST_INCOMPLETE = 0x1 << 21;
+        /** @hide */
+        public static final int CATALYST_AVAILABLE = 0x1 << 20;
+        /** @hide */
+        public static final int CATALYST_INCOMPLETE = 0x1 << 21;
 
         static final IgnitionMonitor.Decoder EGR_DECODER =
                 new IgnitionMonitor.Decoder(EGR_AVAILABLE, EGR_INCOMPLETE);
@@ -761,23 +777,35 @@
         public final IgnitionMonitor NOxSCR;
         public final IgnitionMonitor NMHCCatalyst;
 
-        static final int EGR_OR_VVT_AVAILABLE = 0x1 << 6;
-        static final int EGR_OR_VVT_INCOMPLETE = 0x1 << 7;
+        /** @hide */
+        public static final int EGR_OR_VVT_AVAILABLE = 0x1 << 6;
+        /** @hide */
+        public static final int EGR_OR_VVT_INCOMPLETE = 0x1 << 7;
 
-        static final int PM_FILTER_AVAILABLE = 0x1 << 8;
-        static final int PM_FILTER_INCOMPLETE = 0x1 << 9;
+        /** @hide */
+        public static final int PM_FILTER_AVAILABLE = 0x1 << 8;
+        /** @hide */
+        public static final int PM_FILTER_INCOMPLETE = 0x1 << 9;
 
-        static final int EXHAUST_GAS_SENSOR_AVAILABLE = 0x1 << 10;
-        static final int EXHAUST_GAS_SENSOR_INCOMPLETE = 0x1 << 11;
+        /** @hide */
+        public static final int EXHAUST_GAS_SENSOR_AVAILABLE = 0x1 << 10;
+        /** @hide */
+        public static final int EXHAUST_GAS_SENSOR_INCOMPLETE = 0x1 << 11;
 
-        static final int BOOST_PRESSURE_AVAILABLE = 0x1 << 12;
-        static final int BOOST_PRESSURE_INCOMPLETE = 0x1 << 13;
+        /** @hide */
+        public static final int BOOST_PRESSURE_AVAILABLE = 0x1 << 12;
+        /** @hide */
+        public static final int BOOST_PRESSURE_INCOMPLETE = 0x1 << 13;
 
-        static final int NOx_SCR_AVAILABLE = 0x1 << 14;
-        static final int NOx_SCR_INCOMPLETE = 0x1 << 15;
+        /** @hide */
+        public static final int NOx_SCR_AVAILABLE = 0x1 << 14;
+        /** @hide */
+        public static final int NOx_SCR_INCOMPLETE = 0x1 << 15;
 
-        static final int NMHC_CATALYST_AVAILABLE = 0x1 << 16;
-        static final int NMHC_CATALYST_INCOMPLETE = 0x1 << 17;
+        /** @hide */
+        public static final int NMHC_CATALYST_AVAILABLE = 0x1 << 16;
+        /** @hide */
+        public static final int NMHC_CATALYST_INCOMPLETE = 0x1 << 17;
 
         static final IgnitionMonitor.Decoder EGR_OR_VVT_DECODER =
                 new IgnitionMonitor.Decoder(EGR_OR_VVT_AVAILABLE, EGR_OR_VVT_INCOMPLETE);
@@ -815,7 +843,7 @@
      * Returns null otherwise.
      */
     public @Nullable @FuelSystemStatus.Status Integer getFuelSystemStatus() {
-        return getSystemIntegerSensor(IntegerSensorIndex.FUEL_SYSTEM_STATUS);
+        return getSystemIntegerSensor(android.car.diagnostic.IntegerSensorIndex.FUEL_SYSTEM_STATUS);
     }
 
     /**
@@ -823,7 +851,7 @@
      * Returns null otherwise.
      */
     public @Nullable @SecondaryAirStatus.Status Integer getSecondaryAirStatus() {
-        return getSystemIntegerSensor(IntegerSensorIndex.COMMANDED_SECONDARY_AIR_STATUS);
+        return getSystemIntegerSensor(android.car.diagnostic.IntegerSensorIndex.COMMANDED_SECONDARY_AIR_STATUS);
     }
 
     /**
@@ -832,9 +860,9 @@
      */
     public @Nullable CommonIgnitionMonitors getIgnitionMonitors() {
         Integer ignitionMonitorsType =
-                getSystemIntegerSensor(IntegerSensorIndex.IGNITION_MONITORS_SUPPORTED);
+                getSystemIntegerSensor(android.car.diagnostic.IntegerSensorIndex.IGNITION_MONITORS_SUPPORTED);
         Integer ignitionMonitorsBitmask =
-                getSystemIntegerSensor(IntegerSensorIndex.IGNITION_SPECIFIC_MONITORS);
+                getSystemIntegerSensor(android.car.diagnostic.IntegerSensorIndex.IGNITION_SPECIFIC_MONITORS);
         if (null == ignitionMonitorsType) return null;
         if (null == ignitionMonitorsBitmask) return null;
         switch (ignitionMonitorsType) {
@@ -852,6 +880,6 @@
      * Returns null otherwise.
      */
     public @Nullable @FuelType.Type Integer getFuelType() {
-        return getSystemIntegerSensor(IntegerSensorIndex.FUEL_TYPE);
+        return getSystemIntegerSensor(android.car.diagnostic.IntegerSensorIndex.FUEL_TYPE);
     }
 }
diff --git a/car-lib/src/android/car/hardware/CarDiagnosticManager.java b/car-lib/src/android/car/diagnostic/CarDiagnosticManager.java
similarity index 97%
rename from car-lib/src/android/car/hardware/CarDiagnosticManager.java
rename to car-lib/src/android/car/diagnostic/CarDiagnosticManager.java
index 8949a7b..84cdd3e 100644
--- a/car-lib/src/android/car/hardware/CarDiagnosticManager.java
+++ b/car-lib/src/android/car/diagnostic/CarDiagnosticManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.car.hardware;
+package android.car.diagnostic;
 
 import android.annotation.IntDef;
 import android.annotation.Nullable;
@@ -24,6 +24,7 @@
 import android.car.CarLibLog;
 import android.car.CarManagerBase;
 import android.car.CarNotConnectedException;
+import android.car.diagnostic.ICarDiagnosticEventListener.Stub;
 import android.content.Context;
 import android.os.Handler;
 import android.os.IBinder;
@@ -221,7 +222,8 @@
      *         null if no live frame has been recorded by the vehicle.
      * @throws CarNotConnectedException
      */
-    public @Nullable CarDiagnosticEvent getLatestLiveFrame() throws CarNotConnectedException {
+    public @Nullable
+    CarDiagnosticEvent getLatestLiveFrame() throws CarNotConnectedException {
         try {
             return mService.getLatestLiveFrame();
         } catch (IllegalStateException e) {
@@ -263,7 +265,8 @@
      * even if it was initially obtained via a call to getFreezeFrameTimestamps().
      * @throws CarNotConnectedException
      */
-    public @Nullable CarDiagnosticEvent getFreezeFrame(long timestamp)
+    public @Nullable
+    CarDiagnosticEvent getFreezeFrame(long timestamp)
         throws CarNotConnectedException {
         try {
             return mService.getFreezeFrame(timestamp);
@@ -363,7 +366,7 @@
     }
 
     private static class CarDiagnosticEventListenerToService
-            extends ICarDiagnosticEventListener.Stub {
+            extends Stub {
         private final WeakReference<CarDiagnosticManager> mManager;
 
         public CarDiagnosticEventListenerToService(CarDiagnosticManager manager) {
diff --git a/car-lib/src/android/car/hardware/FloatSensorIndex.java b/car-lib/src/android/car/diagnostic/FloatSensorIndex.java
similarity index 99%
rename from car-lib/src/android/car/hardware/FloatSensorIndex.java
rename to car-lib/src/android/car/diagnostic/FloatSensorIndex.java
index 18d54d7..6ec7e8c 100644
--- a/car-lib/src/android/car/hardware/FloatSensorIndex.java
+++ b/car-lib/src/android/car/diagnostic/FloatSensorIndex.java
@@ -14,7 +14,7 @@
  * limitations under the License.
 */
 
-package android.car.hardware;
+package android.car.diagnostic;
 
 import android.annotation.IntDef;
 import android.annotation.SystemApi;
diff --git a/car-lib/src/android/car/hardware/ICarDiagnostic.aidl b/car-lib/src/android/car/diagnostic/ICarDiagnostic.aidl
similarity index 93%
rename from car-lib/src/android/car/hardware/ICarDiagnostic.aidl
rename to car-lib/src/android/car/diagnostic/ICarDiagnostic.aidl
index ccddab3..3d1808f 100644
--- a/car-lib/src/android/car/hardware/ICarDiagnostic.aidl
+++ b/car-lib/src/android/car/diagnostic/ICarDiagnostic.aidl
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package android.car.hardware;
+package android.car.diagnostic;
 
-import android.car.hardware.CarDiagnosticEvent;
-import android.car.hardware.ICarDiagnosticEventListener;
+import android.car.diagnostic.CarDiagnosticEvent;
+import android.car.diagnostic.ICarDiagnosticEventListener;
 
 /** @hide */
 interface ICarDiagnostic {
diff --git a/car-lib/src/android/car/hardware/ICarDiagnosticEventListener.aidl b/car-lib/src/android/car/diagnostic/ICarDiagnosticEventListener.aidl
similarity index 89%
rename from car-lib/src/android/car/hardware/ICarDiagnosticEventListener.aidl
rename to car-lib/src/android/car/diagnostic/ICarDiagnosticEventListener.aidl
index 3c9a189..89070aa 100644
--- a/car-lib/src/android/car/hardware/ICarDiagnosticEventListener.aidl
+++ b/car-lib/src/android/car/diagnostic/ICarDiagnosticEventListener.aidl
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package android.car.hardware;
+package android.car.diagnostic;
 
-import android.car.hardware.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticEvent;
 
 /**
  * @hide
diff --git a/car-lib/src/android/car/hardware/IntegerSensorIndex.java b/car-lib/src/android/car/diagnostic/IntegerSensorIndex.java
similarity index 99%
rename from car-lib/src/android/car/hardware/IntegerSensorIndex.java
rename to car-lib/src/android/car/diagnostic/IntegerSensorIndex.java
index 70ed849..15291f7 100644
--- a/car-lib/src/android/car/hardware/IntegerSensorIndex.java
+++ b/car-lib/src/android/car/diagnostic/IntegerSensorIndex.java
@@ -14,7 +14,7 @@
  * limitations under the License.
 */
 
-package android.car.hardware;
+package android.car.diagnostic;
 
 import android.annotation.IntDef;
 import android.annotation.SystemApi;
diff --git a/service/Android.mk b/service/Android.mk
index 0192823..9bd5e12 100644
--- a/service/Android.mk
+++ b/service/Android.mk
@@ -38,6 +38,7 @@
 
 LOCAL_JAVA_LIBRARIES += android.car
 LOCAL_STATIC_JAVA_LIBRARIES += \
+        android.hidl.base-V1.0-java \
         android.hardware.automotive.vehicle-V2.0-java \
         android.hardware.automotive.vehicle-V2.1-java \
         vehicle-hal-support-lib \
@@ -57,6 +58,7 @@
 
 LOCAL_JAVA_LIBRARIES += android.car
 LOCAL_STATIC_JAVA_LIBRARIES += \
+        android.hidl.base-V1.0-java \
         android.hardware.automotive.vehicle-V2.0-java \
         android.hardware.automotive.vehicle-V2.1-java \
         vehicle-hal-support-lib \
diff --git a/service/src/com/android/car/CarDiagnosticService.java b/service/src/com/android/car/CarDiagnosticService.java
index a4afc35..809439c 100644
--- a/service/src/com/android/car/CarDiagnosticService.java
+++ b/service/src/com/android/car/CarDiagnosticService.java
@@ -19,11 +19,10 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.car.Car;
-import android.car.annotation.FutureFeature;
-import android.car.hardware.CarDiagnosticEvent;
-import android.car.hardware.CarDiagnosticManager;
-import android.car.hardware.ICarDiagnostic;
-import android.car.hardware.ICarDiagnosticEventListener;
+import android.car.diagnostic.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticManager;
+import android.car.diagnostic.ICarDiagnostic;
+import android.car.diagnostic.ICarDiagnosticEventListener;
 import android.content.Context;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -35,7 +34,6 @@
 import com.android.car.hal.DiagnosticHalService;
 import com.android.internal.annotations.GuardedBy;
 import java.io.PrintWriter;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.ConcurrentModificationException;
 import java.util.HashMap;
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index f58302d..c412b97 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -27,7 +27,10 @@
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.Process;
+import android.os.Trace;
+import android.util.BootTimingsTraceLog;
 import android.util.Log;
+import android.util.Slog;
 import com.android.car.cluster.InstrumentClusterService;
 import com.android.car.hal.VehicleHal;
 import com.android.car.internal.FeatureConfiguration;
@@ -76,6 +79,11 @@
 
     private final CarServiceBase[] mAllServices;
 
+    private static final String TAG = "ICarImpl";
+    private static final String VHAL_TIMING_TAG = "VehicleHalTiming";
+    private static final BootTimingsTraceLog mBootTiming = new BootTimingsTraceLog(VHAL_TIMING_TAG,
+        Trace.TRACE_TAG_HAL);
+
     /** Test only service. Populate it only when necessary. */
     @GuardedBy("this")
     private CarTestService mCarTestService;
@@ -150,10 +158,14 @@
     }
 
     public void init() {
+        traceBegin("VehicleHal.init");
         mHal.init();
+        traceEnd();
+        traceBegin("CarService.initAllServices");
         for (CarServiceBase service : mAllServices) {
             service.init();
         }
+        traceEnd();
     }
 
     public void release() {
@@ -342,6 +354,15 @@
         new CarShellCommand().exec(args, writer);
     }
 
+    private static void traceBegin(String name) {
+        Slog.i(TAG, name);
+        mBootTiming.traceBegin(name);
+    }
+
+    private static void traceEnd() {
+        mBootTiming.traceEnd();
+    }
+
     private class CarShellCommand {
         private static final String COMMAND_HELP = "-h";
         private static final String COMMAND_DAY_NIGHT_MODE = "day-night-mode";
diff --git a/service/src/com/android/car/hal/DiagnosticHalService.java b/service/src/com/android/car/hal/DiagnosticHalService.java
index 36cebf1..9096135 100644
--- a/service/src/com/android/car/hal/DiagnosticHalService.java
+++ b/service/src/com/android/car/hal/DiagnosticHalService.java
@@ -17,9 +17,8 @@
 package com.android.car.hal;
 
 import android.annotation.Nullable;
-import android.car.annotation.FutureFeature;
-import android.car.hardware.CarDiagnosticEvent;
-import android.car.hardware.CarDiagnosticManager;
+import android.car.diagnostic.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticManager;
 import android.car.hardware.CarSensorManager;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropConfig;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
@@ -33,10 +32,7 @@
 import com.android.car.CarServiceUtils;
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.BitSet;
-import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArraySet;
diff --git a/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticJsonConverter.java b/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticJsonConverter.java
index 0d630cd..85d4fc8 100644
--- a/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticJsonConverter.java
+++ b/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticJsonConverter.java
@@ -15,7 +15,7 @@
  */
 package com.google.android.car.diagnosticverifier;
 
-import android.car.hardware.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticEvent;
 import android.util.JsonReader;
 
 import com.android.car.vehiclehal.DiagnosticJson;
diff --git a/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticVerifier.java b/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticVerifier.java
index 8f547b1..1b6e447 100644
--- a/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticVerifier.java
+++ b/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/DiagnosticVerifier.java
@@ -15,7 +15,7 @@
  */
 package com.google.android.car.diagnosticverifier;
 
-import android.car.hardware.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticEvent;
 import android.util.JsonWriter;
 import android.util.Log;
 
diff --git a/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/MainActivity.java b/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/MainActivity.java
index 2916e23..75db2ed 100644
--- a/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/MainActivity.java
+++ b/tests/CarDiagnosticVerifier/src/com/google/android/car/diagnosticverifier/MainActivity.java
@@ -18,8 +18,8 @@
 import android.app.Activity;
 import android.car.Car;
 import android.car.CarNotConnectedException;
-import android.car.hardware.CarDiagnosticEvent;
-import android.car.hardware.CarDiagnosticManager;
+import android.car.diagnostic.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticManager;
 import android.car.hardware.CarSensorManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
diff --git a/tests/EmbeddedKitchenSinkApp/Android.mk b/tests/EmbeddedKitchenSinkApp/Android.mk
index c8ece9f..37c79f7 100644
--- a/tests/EmbeddedKitchenSinkApp/Android.mk
+++ b/tests/EmbeddedKitchenSinkApp/Android.mk
@@ -40,6 +40,7 @@
 LOCAL_DEX_PREOPT := false
 
 LOCAL_STATIC_JAVA_LIBRARIES += \
+        android.hidl.base-V1.0-java \
         android.hardware.automotive.vehicle-V2.0-java \
         vehicle-hal-support-lib \
         car-service-lib-for-test \
diff --git a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
index 2f72798..2a96898 100644
--- a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
+++ b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
@@ -102,13 +102,5 @@
                 <category android:name="android.car.cluster.NAVIGATION"/>
             </intent-filter>
         </activity>
-
-        <receiver android:name=".bluetooth.MapReceiver"
-            android:permission="android.permission.READ_SMS">
-            <intent-filter>
-                <action android:name="android.bluetooth.mapmce.profile.action.MESSAGE_RECEIVED"/>
-                <action android:name="android.provider.action.VOICE_SEND_MESSAGE_TO_CONTACTS"/>
-            </intent-filter>
-        </receiver>
     </application>
 </manifest>
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/bluetooth/MapReceiver.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/bluetooth/MapReceiver.java
deleted file mode 100644
index e0d1ca0..0000000
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/bluetooth/MapReceiver.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-package com.google.android.car.kitchensink.bluetooth;
-
-import android.bluetooth.BluetoothMapClient;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-import android.widget.Toast;
-
-public class MapReceiver extends BroadcastReceiver {
-    private static final String TAG = "CAR.BLUETOOTH.KS";
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        Log.d(TAG, "MAP onReceive");
-        String action = intent.getAction();
-        if (action.equals(BluetoothMapClient.ACTION_MESSAGE_RECEIVED)) {
-            Toast.makeText(context, intent.getStringExtra(android.content.Intent.EXTRA_TEXT),
-                    Toast.LENGTH_LONG).show();
-        }
-    }
-}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java
index 71deee8..b024bfd 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java
@@ -18,12 +18,11 @@
 
 import android.annotation.Nullable;
 import android.car.Car;
-import android.car.hardware.CarDiagnosticEvent;
-import android.car.hardware.CarDiagnosticManager;
-import android.car.hardware.CarDiagnosticManager.OnDiagnosticEventListener;
+import android.car.diagnostic.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticManager;
+import android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener;
 import android.graphics.Color;
 import android.os.Bundle;
-import android.os.Handler;
 import android.support.car.hardware.CarSensorManager;
 import android.support.v4.app.Fragment;
 import android.util.Log;
diff --git a/tests/android_car_api_test/Android.mk b/tests/android_car_api_test/Android.mk
index 0e47bb6..58a1288 100644
--- a/tests/android_car_api_test/Android.mk
+++ b/tests/android_car_api_test/Android.mk
@@ -35,6 +35,7 @@
 LOCAL_STATIC_JAVA_LIBRARIES := junit legacy-android-test
 LOCAL_STATIC_JAVA_LIBRARIES += \
         android-support-test \
+        android.hidl.base-V1.0-java \
         android.hardware.automotive.vehicle-V2.0-java \
 
 LOCAL_JAVA_LIBRARIES := android.car android.test.runner
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarDiagnosticManagerTest.java b/tests/android_car_api_test/src/android/car/apitest/CarDiagnosticManagerTest.java
index 21fb5e0..8783341 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarDiagnosticManagerTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarDiagnosticManagerTest.java
@@ -17,8 +17,8 @@
 package android.car.apitest;
 
 import android.car.Car;
-import android.car.hardware.CarDiagnosticEvent;
-import android.car.hardware.CarDiagnosticManager;
+import android.car.diagnostic.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticManager;
 import android.content.ComponentName;
 import android.content.ServiceConnection;
 import android.os.IBinder;
diff --git a/tests/carservice_test/Android.mk b/tests/carservice_test/Android.mk
index 105a73a..6c380c2 100644
--- a/tests/carservice_test/Android.mk
+++ b/tests/carservice_test/Android.mk
@@ -40,7 +40,8 @@
 LOCAL_STATIC_JAVA_LIBRARIES += car-service-lib-for-test \
                                vehicle-hal-support-lib \
                                car-systemtest \
-                               android-support-test
+                               android-support-test \
+                               android.hardware.automotive.vehicle-V2.1-java-static
 
 LOCAL_JAVA_LIBRARIES := android.car android.test.runner
 
diff --git a/tests/carservice_test/src/com/android/car/test/CarDiagnosticConstantsTest.java b/tests/carservice_test/src/com/android/car/test/CarDiagnosticConstantsTest.java
new file mode 100644
index 0000000..cd6b984
--- /dev/null
+++ b/tests/carservice_test/src/com/android/car/test/CarDiagnosticConstantsTest.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+package com.android.car.test;
+
+import android.test.suitebuilder.annotation.MediumTest;
+import android.util.Log;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+/**
+ * Validates that diagnostic constants in CarService and Vehicle HAL have the same value
+ * This is an important assumption to validate because we do not perform any mapping between
+ * the two layers, instead relying on the constants on both sides having identical values.
+ */
+@MediumTest
+public class CarDiagnosticConstantsTest extends TestCase {
+    static final String TAG = CarDiagnosticConstantsTest.class.getSimpleName();
+
+    static class MismatchException extends Exception {
+        private static String dumpClass(Class<?> clazz) {
+            StringBuilder builder = new StringBuilder(clazz.getName() + "{\n");
+            Arrays.stream(clazz.getFields()).forEach((Field field) -> {
+                builder.append('\t').append(field.toString()).append('\n');
+            });
+            return builder.append('}').toString();
+        }
+
+        private static void logClasses(Class<?> clazz1, Class<?> clazz2) {
+            Log.d(TAG, "MismatchException. class1: " + dumpClass(clazz1));
+            Log.d(TAG, "MismatchException. class2: " + dumpClass(clazz2));
+        }
+
+        MismatchException(String message) {
+            super(message);
+        }
+
+        static MismatchException fieldValueMismatch(Class<?> clazz1, Class<?> clazz2, String name,
+                int value1, int value2) {
+            logClasses(clazz1, clazz2);
+            return new MismatchException("In comparison of " + clazz1 + " and " + clazz2 +
+                " field " + name  + " had different values " + value1 + " vs. " + value2);
+        }
+
+        static MismatchException fieldsOnlyInClass1(Class<?> clazz1, Class<?> clazz2,
+                Map<String, Integer> fields) {
+            logClasses(clazz1, clazz2);
+            return new MismatchException("In comparison of " + clazz1 + " and " + clazz2 +
+                " some fields were only found in the first class:\n" +
+                fields.keySet().stream().reduce("",
+                    (String s, String t) -> s + "\n" + t));
+        }
+
+        static MismatchException fieldOnlyInClass2(Class<?> clazz1, Class<?> clazz2, String field) {
+            logClasses(clazz1, clazz2);
+            return new MismatchException("In comparison of " + clazz1 + " and " + clazz2 +
+                " field " + field + " was not found in both classes");
+        }
+    }
+
+    static boolean isPublicStaticFinalInt(Field field) {
+        final int modifiers = field.getModifiers();
+        final boolean isPublic = (modifiers & Modifier.PUBLIC) == Modifier.PUBLIC;
+        final boolean isStatic = (modifiers & Modifier.STATIC) == Modifier.STATIC;
+        final boolean isFinal = (modifiers & Modifier.FINAL) == Modifier.FINAL;
+        if (isPublic && isStatic && isFinal) {
+            return field.getType() == int.class;
+        }
+        return false;
+    }
+
+    static void validateMatch(Class<?> clazz1, Class<?> clazz2) throws Exception {
+        Map<String, Integer> fields = new HashMap<>();
+
+        // add all the fields in the first class to a map
+        Arrays.stream(clazz1.getFields()).filter(
+            CarDiagnosticConstantsTest::isPublicStaticFinalInt).forEach( (Field field) -> {
+                final String name = field.getName();
+                try {
+                    fields.put(name, field.getInt(null));
+                } catch (IllegalAccessException e) {
+                    // this will practically never happen because we checked that it is a
+                    // public static final field before reading from it
+                    Log.wtf(TAG, String.format("attempt to access field %s threw exception",
+                        field.toString()), e);
+                }
+            });
+
+        // check for all fields in the second class, and remove matches from the map
+        for (Field field2 : clazz2.getFields()) {
+            if (isPublicStaticFinalInt(field2)) {
+                final String name = field2.getName();
+                if (fields.containsKey(name)) {
+                    try {
+                        final int value2 = field2.getInt(null);
+                        final int value1 = fields.getOrDefault(name, value2+1);
+                        if (value2 != value1) {
+                            throw MismatchException.fieldValueMismatch(clazz1, clazz2,
+                                field2.getName(), value1, value2);
+                        }
+                        fields.remove(name);
+                    } catch (IllegalAccessException e) {
+                        // this will practically never happen because we checked that it is a
+                        // public static final field before reading from it
+                        Log.wtf(TAG, String.format("attempt to access field %s threw exception",
+                            field2.toString()), e);
+                        throw e;
+                    }
+                } else {
+                    throw MismatchException.fieldOnlyInClass2(clazz1, clazz2, name);
+                }
+            }
+        }
+
+        // if anything is left, we didn't find some fields in the second class
+        if (!fields.isEmpty()) {
+            throw MismatchException.fieldsOnlyInClass1(clazz1, clazz2, fields);
+        }
+    }
+
+    public void testFuelSystemStatus() throws Exception {
+        validateMatch(android.hardware.automotive.vehicle.V2_1.Obd2FuelSystemStatus.class,
+            android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.class);
+    }
+
+    public void testFuelType() throws Exception {
+        validateMatch(android.hardware.automotive.vehicle.V2_1.Obd2FuelType.class,
+            android.car.diagnostic.CarDiagnosticEvent.FuelType.class);
+    }
+
+    public void testSecondaryAirStatus() throws Exception {
+        validateMatch(android.hardware.automotive.vehicle.V2_1.Obd2SecondaryAirStatus.class,
+            android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.class);
+    }
+
+    public void testIgnitionMonitors() throws Exception {
+        validateMatch(android.hardware.automotive.vehicle.V2_1.Obd2CommonIgnitionMonitors.class,
+            android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors.class);
+
+        validateMatch(android.hardware.automotive.vehicle.V2_1.Obd2CompressionIgnitionMonitors.class,
+            android.car.diagnostic.CarDiagnosticEvent.CompressionIgnitionMonitors.class);
+
+        validateMatch(android.hardware.automotive.vehicle.V2_1.Obd2SparkIgnitionMonitors.class,
+            android.car.diagnostic.CarDiagnosticEvent.SparkIgnitionMonitors.class);
+    }
+}
diff --git a/tests/carservice_test/src/com/android/car/test/CarDiagnosticManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarDiagnosticManagerTest.java
index dfdc9df..7f18204 100644
--- a/tests/carservice_test/src/com/android/car/test/CarDiagnosticManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarDiagnosticManagerTest.java
@@ -19,16 +19,16 @@
 import static java.lang.Integer.toHexString;
 
 import android.car.Car;
-import android.car.hardware.CarDiagnosticEvent;
-import android.car.hardware.CarDiagnosticEvent.FuelSystemStatus;
-import android.car.hardware.CarDiagnosticEvent.FuelType;
-import android.car.hardware.CarDiagnosticEvent.CommonIgnitionMonitors;
-import android.car.hardware.CarDiagnosticEvent.CompressionIgnitionMonitors;
-import android.car.hardware.CarDiagnosticEvent.SparkIgnitionMonitors;
-import android.car.hardware.CarDiagnosticEvent.SecondaryAirStatus;
-import android.car.hardware.CarDiagnosticManager;
-import android.car.hardware.FloatSensorIndex;
-import android.car.hardware.IntegerSensorIndex;
+import android.car.diagnostic.CarDiagnosticEvent;
+import android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus;
+import android.car.diagnostic.CarDiagnosticEvent.FuelType;
+import android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors;
+import android.car.diagnostic.CarDiagnosticEvent.CompressionIgnitionMonitors;
+import android.car.diagnostic.CarDiagnosticEvent.SparkIgnitionMonitors;
+import android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus;
+import android.car.diagnostic.CarDiagnosticManager;
+import android.car.diagnostic.FloatSensorIndex;
+import android.car.diagnostic.IntegerSensorIndex;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
 import android.hardware.automotive.vehicle.V2_1.VehicleProperty;
 import android.os.SystemClock;
@@ -36,7 +36,6 @@
 import android.util.JsonReader;
 import android.util.JsonWriter;
 import android.util.Log;
-import com.android.car.internal.FeatureConfiguration;
 import com.android.car.vehiclehal.DiagnosticEventBuilder;
 import com.android.car.vehiclehal.DiagnosticJson;
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
diff --git a/tests/vehiclehal_test/Android.mk b/tests/vehiclehal_test/Android.mk
index 2c85c65..a22ee1b 100644
--- a/tests/vehiclehal_test/Android.mk
+++ b/tests/vehiclehal_test/Android.mk
@@ -33,6 +33,7 @@
 
 LOCAL_STATIC_JAVA_LIBRARIES += vehicle-hal-support-lib \
                                android-support-test \
+                               android.hidl.base-V1.0-java \
                                android.hardware.automotive.vehicle-V2.0-java \
                                android.hardware.automotive.vehicle-V2.1-java
 
diff --git a/tools/bootanalyze/bootanalyze.py b/tools/bootanalyze/bootanalyze.py
index 480c9d4..b878358 100755
--- a/tools/bootanalyze/bootanalyze.py
+++ b/tools/bootanalyze/bootanalyze.py
@@ -30,6 +30,7 @@
 import subprocess
 import sys
 import time
+import threading
 import yaml
 
 from datetime import datetime, date
@@ -92,10 +93,12 @@
   if args.iterate > 1 and args.bootchart:
     run_adb_shell_cmd_as_root('touch /data/bootchart/enabled')
 
-  search_events = {key: re.compile(pattern)
+  search_events_pattern = {key: re.compile(pattern)
                    for key, pattern in cfg['events'].iteritems()}
-  timing_events = {key: re.compile(pattern)
+  timing_events_pattern = {key: re.compile(pattern)
                    for key, pattern in cfg['timings'].iteritems()}
+  shutdown_events_pattern = {key: re.compile(pattern)
+                   for key, pattern in cfg['shutdown_events'].iteritems()}
 
   data_points = {}
   kernel_timing_points = collections.OrderedDict()
@@ -103,6 +106,8 @@
   boottime_points = collections.OrderedDict()
   boot_chart_file_name_prefix = "bootchart-" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
   systrace_file_name_prefix = "systrace-" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
+  shutdown_event_all = collections.OrderedDict()
+  shutdown_timing_event_all = collections.OrderedDict()
   for it in range(0, args.iterate):
     if args.iterate > 1:
       print "Run: {0}".format(it)
@@ -112,9 +117,24 @@
     boottime_events = None
     while attempt <= MAX_RETRIES and processing_data is None:
       attempt += 1
-      processing_data, kernel_timings, logcat_timings, boottime_events = iterate(
-        args, search_events, timing_events, cfg, error_time, components_to_monitor)
-
+      processing_data, kernel_timings, logcat_timings, boottime_events, shutdown_events,\
+          shutdown_timing_events = iterate(\
+        args, search_events_pattern, timing_events_pattern, shutdown_events_pattern, cfg,\
+        error_time, components_to_monitor)
+    if shutdown_events:
+      for k, v in shutdown_events.iteritems():
+        events = shutdown_event_all.get(k)
+        if not events:
+          events = []
+          shutdown_event_all[k] = events
+        events.append(v)
+    if shutdown_timing_events:
+      for k, v in shutdown_timing_events.iteritems():
+        events = shutdown_timing_event_all.get(k)
+        if not events:
+          events = []
+          shutdown_timing_event_all[k] = events
+        events.append(v)
     if not processing_data or not boottime_events:
       # Processing error
       print "Failed to collect valid samples for run {0}".format(it)
@@ -151,6 +171,24 @@
 
   if args.iterate > 1:
     print "-----------------"
+    print "\nshutdown events after {0} runs".format(args.iterate)
+    print '{0:30}: {1:<7} {2:<7} {3}'.format("Event", "Mean", "stddev", "#runs")
+    for item in shutdown_event_all.items():
+      num_runs = len(item[1])
+      print '{0:30}: {1:<7.5} {2:<7.5} {3} {4}'.format(
+          item[0], sum(item[1])/num_runs, stddev(item[1]),\
+          "*time taken" if item[0].startswith("init.") else "",\
+          num_runs if num_runs != args.iterate else "")
+    print "\nshutdown timing events after {0} runs".format(args.iterate)
+    print '{0:30}: {1:<7} {2:<7} {3}'.format("Event", "Mean", "stddev", "#runs")
+    for item in shutdown_timing_event_all.items():
+      num_runs = len(item[1])
+      print '{0:30}: {1:<7.5} {2:<7.5} {3} {4}'.format(
+          item[0], sum(item[1])/num_runs, stddev(item[1]),\
+          "*time taken" if item[0].startswith("init.") else "",\
+          num_runs if num_runs != args.iterate else "")
+
+    print "-----------------"
     print "ro.boottime.* after {0} runs".format(args.iterate)
     print '{0:30}: {1:<7} {2:<7} {3}'.format("Event", "Mean", "stddev", "#runs")
     for item in boottime_points.items():
@@ -243,19 +281,41 @@
         item[0], item[1])
     print "-----------------"
 
-def iterate(args, search_events, timings, cfg, error_time, components_to_monitor):
-  if args.reboot:
-    reboot(args.serial, args.stressfs != '', args.permissive, args.adb_reboot)
+def handle_reboot_log(capture_log_on_error, shutdown_events_pattern, components_to_monitor):
+  shutdown_events, shutdown_timing_events = collect_logcat_for_shutdown(capture_log_on_error,\
+		shutdown_events_pattern, components_to_monitor)
+  print "\nshutdown events: time"
+  for item in shutdown_events.items():
+    print '{0:30}: {1:<7.5}'.format(item[0], item[1])
+  print "\nshutdown timing events: time"
+  for item in shutdown_timing_events.items():
+    print '{0:30}: {1:<7.5}'.format(item[0], item[1])
+  return shutdown_events, shutdown_timing_events
 
-  dmesg_events, kernel_timing_events = collect_events(search_events, ADB_CMD +\
-                                                      ' shell su root dmesg -w', timings,\
+def iterate(args, search_events_pattern, timings_pattern, shutdown_events_pattern, cfg, error_time,\
+    components_to_monitor):
+  shutdown_events = None
+  shutdown_timing_events = None
+  if args.reboot:
+    # sleep to make sure that logcat reader is reading before adb is gone by reboot. ugly but make
+    # impl simple.
+    t = threading.Thread(target = lambda : (time.sleep(2), reboot(args.serial, args.stressfs != '',\
+        args.permissive, args.adb_reboot)))
+    t.start()
+    shutdown_events, shutdown_timing_events = handle_reboot_log(True, shutdown_events_pattern,\
+        components_to_monitor)
+    t.join()
+
+  dmesg_events, kernel_timing_events = collect_events(search_events_pattern, ADB_CMD +\
+                                                      ' shell su root dmesg -w', timings_pattern,\
                                                       [ KERNEL_BOOT_COMPLETE ], True)
 
   logcat_stop_events = [ LOGCAT_BOOT_COMPLETE, KERNEL_BOOT_COMPLETE, LAUNCHER_START]
   if args.fs_check:
     logcat_stop_events.append("FsStat")
   logcat_events, logcat_timing_events = collect_events(
-    search_events, ADB_CMD + ' logcat -b all -v epoch', timings, logcat_stop_events, False)
+    search_events_pattern, ADB_CMD + ' logcat -b all -v epoch', timings_pattern,\
+    logcat_stop_events, False)
   logcat_event_time = extract_time(
     logcat_events, TIME_LOGCAT, float);
   logcat_original_time = extract_time(
@@ -338,8 +398,8 @@
   print "-----------------"
 
   if args.timings:
-    kernel_timing_points = generate_timing_points(kernel_timing_events, timings)
-    logcat_timing_points = generate_timing_points(logcat_timing_events, timings)
+    kernel_timing_points = generate_timing_points(kernel_timing_events, timings_pattern)
+    logcat_timing_points = generate_timing_points(logcat_timing_events, timings_pattern)
     dump_timing_points("Kernel", kernel_timing_points)
     dump_timing_points("Logcat", logcat_timing_points)
 
@@ -401,7 +461,8 @@
       if (fs_stat_val & ~0x17) != 0:
         capture_bugreport("fs_stat_" + fs_stat, events[LOGCAT_BOOT_COMPLETE])
 
-  return data_points, kernel_timing_points, logcat_timing_points, boottime_events
+  return data_points, kernel_timing_points, logcat_timing_points, boottime_events, shutdown_events,\
+      shutdown_timing_events
 
 def debug(string):
   if DEBUG:
@@ -503,6 +564,64 @@
     existing_event = events.get(new_name)
   return new_name
 
+def collect_logcat_for_shutdown(capture_log_on_error, shutdown_events_pattern,\
+    log_capture_conditions):
+  events = collections.OrderedDict()
+  # shutdown does not have timing_events but calculated from checking Xyz - XyzDone / XyzTimeout
+  timing_events = collections.OrderedDict()
+  process = subprocess.Popen(ADB_CMD + ' logcat -b all -v epoch', shell=True,
+                             stdout=subprocess.PIPE);
+  lines = []
+  capture_log = False
+  shutdown_start_time = 0
+  while (True):
+    line = process.stdout.readline().lstrip().rstrip()
+    if not line:
+      break
+    lines.append(line)
+    event = get_boot_event(line, shutdown_events_pattern);
+    if not event:
+      continue
+    time = extract_a_time(line, TIME_LOGCAT, float)
+    if not time:
+      print "cannot get time from: " + line
+      continue
+    if shutdown_start_time == 0:
+      shutdown_start_time = time
+    time = time - shutdown_start_time
+    events[event] = time
+    time_limit1 = log_capture_conditions.get(event)
+    if time_limit1 and time_limit1 <= time:
+      capture_log = True
+    pair_event = None
+    if event.endswith('Done'):
+	  pair_event = event[:-4]
+    elif event.endswith('Timeout'):
+      pair_event = event[:-7]
+      if capture_log_on_error:
+        capture_log = True
+    if not pair_event:
+      continue
+    start_time = events.get(pair_event)
+    if not start_time:
+      print "No start event for " + event
+      continue
+    time_spent = time - start_time
+    timing_event_name = pair_event + "Duration"
+    timing_events[timing_event_name] = time_spent
+    time_limit2 = log_capture_conditions.get(timing_event_name)
+    if time_limit2 and time_limit2 <= time_spent:
+      capture_log = True
+
+  if capture_log:
+    now = datetime.now()
+    log_file = ("shutdownlog-error-%s.txt") % (now.strftime("%Y-%m-%d-%H-%M-%S"))
+    print "Shutdown error, capture log to %s" % (log_file)
+    with open(log_file, 'w') as f:
+      f.write('\n'.join(lines))
+  return events, timing_events
+
+
 def collect_events(search_events, command, timings, stop_events, disable_timing_after_zygote):
   events = collections.OrderedDict()
   timing_events = {}
diff --git a/tools/bootanalyze/config.yaml b/tools/bootanalyze/config.yaml
index ea60434..90f68b7 100644
--- a/tools/bootanalyze/config.yaml
+++ b/tools/bootanalyze/config.yaml
@@ -57,4 +57,23 @@
   BootComplete_kernel: processing action \(sys\.boot_completed=1\)
   LauncherStart: START.*HOME.*(NexusLauncherActivity|GEL|LensPickerTrampolineActivity|SetupWizardActivity)
   FsStat: fs_stat, partition:userdata stat:(0x\S+)
-
+shutdown_events:
+  ShutdownStart: ShutdownThread:\sNotifying thread to start shutdown
+  ShutdownBroadcast: ShutdownThread:\sSending shutdown broadcast
+  ShutdownActivityManagerService: ShutdownThread:\sShutting down activity manager
+  ShutdownPackageManagerService: ShutdownThread:\sShutting down package manager
+  ShutdownNfc: ShutdownThread:\sTurning off NFC
+  ShutdownBt: ShutdownThread:\sDisabling Bluetooth
+  ShutdownRadio: ShutdownThread:\sTurning off cellular radios
+  ShutdownRadiosWait: ShutdownThread:\sWaiting for NFC, Bluetooth and Radio
+  ShutdownBtDone: ShutdownThread:\sBluetooth turned off
+  ShutdownRadioDone: ShutdownThread:\sRadio turned off
+  ShutdownNfcDone: ShutdownThread:\sNFC turned off
+  ShutdownRadiosWaitDone: ShutdownThread:\sNFC, Radio and Bluetooth shutdown complete
+  ShutdownRadiosWaitTimeout: ShutdownThread:\sTimed out waiting for NFC, Radio and Bluetooth shutdown
+  ShutdownStorageManagerSerivce: ShutdownThread:\sShutting down StorageManagerService
+  ShutdownStorageManagerSerivceDone: ShutdownThread:\sResult code [\d]+ from StorageManagerService\.shutdown
+  ShutdownStorageManagerSerivceTimeout: ShutdownThread:\sShutdown wait timed out
+  ShutdownStartDone: ShutdownThread:\sPerforming low-level shutdown
+  ShutdownInitAction: init\s+:\sprocessing action \(sys\.shutdown\.requested
+  ShutdownInitFsShutdown: init\s+:\sShutdown timeout
diff --git a/tools/emulator/vhal_consts_2_0.py b/tools/emulator/vhal_consts_2_0.py
index 50518fd..38feb9b 100644
--- a/tools/emulator/vhal_consts_2_0.py
+++ b/tools/emulator/vhal_consts_2_0.py
@@ -15,6 +15,92 @@
 # DO NOT EDIT MANUALLY
 # This file was autogenerated by vhal_const_generate.py
 
+# VehicleApPowerStateIndex
+VEHICLEAPPOWERSTATEINDEX_STATE = 0x0
+VEHICLEAPPOWERSTATEINDEX_ADDITIONAL = 0x1
+
+# Wheel
+WHEEL_UNKNOWN = 0x0
+WHEEL_LEFT_FRONT = 0x1
+WHEEL_RIGHT_FRONT = 0x2
+WHEEL_LEFT_REAR = 0x4
+WHEEL_RIGHT_REAR = 0x8
+
+# VehicleAudioFocusState
+VEHICLEAUDIOFOCUSSTATE_STATE_GAIN = 0x1
+VEHICLEAUDIOFOCUSSTATE_STATE_GAIN_TRANSIENT = 0x2
+VEHICLEAUDIOFOCUSSTATE_STATE_LOSS_TRANSIENT_CAN_DUCK = 0x3
+VEHICLEAUDIOFOCUSSTATE_STATE_LOSS_TRANSIENT = 0x4
+VEHICLEAUDIOFOCUSSTATE_STATE_LOSS = 0x5
+VEHICLEAUDIOFOCUSSTATE_STATE_LOSS_TRANSIENT_EXLCUSIVE = 0x6
+
+# VehicleAudioStreamFlag
+VEHICLEAUDIOSTREAMFLAG_STREAM0_FLAG = 0x1
+VEHICLEAUDIOSTREAMFLAG_STREAM1_FLAG = 0x2
+VEHICLEAUDIOSTREAMFLAG_STREAM2_FLAG = 0x4
+
+# VehicleAudioVolumeIndex
+VEHICLEAUDIOVOLUMEINDEX_INDEX_STREAM = 0x0
+VEHICLEAUDIOVOLUMEINDEX_INDEX_VOLUME = 0x1
+VEHICLEAUDIOVOLUMEINDEX_INDEX_STATE = 0x2
+
+# VehicleHvacFanDirection
+VEHICLEHVACFANDIRECTION_FACE = 0x1
+VEHICLEHVACFANDIRECTION_FLOOR = 0x2
+VEHICLEHVACFANDIRECTION_FACE_AND_FLOOR = 0x3
+VEHICLEHVACFANDIRECTION_DEFROST = 0x4
+VEHICLEHVACFANDIRECTION_DEFROST_AND_FLOOR = 0x5
+
+# VehiclePropertyAccess
+VEHICLEPROPERTYACCESS_NONE = 0x0
+VEHICLEPROPERTYACCESS_READ = 0x1
+VEHICLEPROPERTYACCESS_WRITE = 0x2
+VEHICLEPROPERTYACCESS_READ_WRITE = 0x3
+
+# SubscribeFlags
+SUBSCRIBEFLAGS_UNDEFINED = 0x0
+SUBSCRIBEFLAGS_HAL_EVENT = 0x1
+SUBSCRIBEFLAGS_SET_CALL = 0x2
+SUBSCRIBEFLAGS_DEFAULT = 0x1
+
+# VehiclePropertyOperation
+VEHICLEPROPERTYOPERATION_GENERIC = 0x0
+VEHICLEPROPERTYOPERATION_SET = 0x1
+VEHICLEPROPERTYOPERATION_GET = 0x2
+VEHICLEPROPERTYOPERATION_SUBSCRIBE = 0x3
+
+# VehicleAudioVolumeCapabilityFlag
+VEHICLEAUDIOVOLUMECAPABILITYFLAG_PERSISTENT_STORAGE = 0x1
+VEHICLEAUDIOVOLUMECAPABILITYFLAG_MASTER_VOLUME_ONLY = 0x2
+
+# VehicleApPowerStateShutdownParam
+VEHICLEAPPOWERSTATESHUTDOWNPARAM_SHUTDOWN_IMMEDIATELY = 0x1
+VEHICLEAPPOWERSTATESHUTDOWNPARAM_CAN_SLEEP = 0x2
+VEHICLEAPPOWERSTATESHUTDOWNPARAM_SHUTDOWN_ONLY = 0x3
+
+# VehicleIgnitionState
+VEHICLEIGNITIONSTATE_UNDEFINED = 0x0
+VEHICLEIGNITIONSTATE_LOCK = 0x1
+VEHICLEIGNITIONSTATE_OFF = 0x2
+VEHICLEIGNITIONSTATE_ACC = 0x3
+VEHICLEIGNITIONSTATE_ON = 0x4
+VEHICLEIGNITIONSTATE_START = 0x5
+
+# VehicleAudioContextFlag
+VEHICLEAUDIOCONTEXTFLAG_MUSIC_FLAG = 0x1
+VEHICLEAUDIOCONTEXTFLAG_NAVIGATION_FLAG = 0x2
+VEHICLEAUDIOCONTEXTFLAG_VOICE_COMMAND_FLAG = 0x4
+VEHICLEAUDIOCONTEXTFLAG_CALL_FLAG = 0x8
+VEHICLEAUDIOCONTEXTFLAG_ALARM_FLAG = 0x10
+VEHICLEAUDIOCONTEXTFLAG_NOTIFICATION_FLAG = 0x20
+VEHICLEAUDIOCONTEXTFLAG_UNKNOWN_FLAG = 0x40
+VEHICLEAUDIOCONTEXTFLAG_SAFETY_ALERT_FLAG = 0x80
+VEHICLEAUDIOCONTEXTFLAG_CD_ROM_FLAG = 0x100
+VEHICLEAUDIOCONTEXTFLAG_AUX_AUDIO_FLAG = 0x200
+VEHICLEAUDIOCONTEXTFLAG_SYSTEM_SOUND_FLAG = 0x400
+VEHICLEAUDIOCONTEXTFLAG_RADIO_FLAG = 0x800
+VEHICLEAUDIOCONTEXTFLAG_EXT_SOURCE_FLAG = 0x1000
+
 # VehicleApPowerSetState
 VEHICLEAPPOWERSETSTATE_BOOT_COMPLETE = 0x1
 VEHICLEAPPOWERSETSTATE_DEEP_SLEEP_ENTRY = 0x2
@@ -24,29 +110,20 @@
 VEHICLEAPPOWERSETSTATE_DISPLAY_OFF = 0x6
 VEHICLEAPPOWERSETSTATE_DISPLAY_ON = 0x7
 
-# VehicleApPowerStateIndex
-VEHICLEAPPOWERSTATEINDEX_STATE = 0x0
-VEHICLEAPPOWERSTATEINDEX_ADDITIONAL = 0x1
+# StatusCode
+STATUSCODE_OK = 0x0
+STATUSCODE_TRY_AGAIN = 0x1
+STATUSCODE_INVALID_ARG = 0x2
+STATUSCODE_NOT_AVAILABLE = 0x3
+STATUSCODE_ACCESS_DENIED = 0x4
+STATUSCODE_INTERNAL_ERROR = 0x5
 
-# VehicleAudioFocusRequest
-VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN = 0x1
-VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN_TRANSIENT = 0x2
-VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN_TRANSIENT_MAY_DUCK = 0x3
-VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN_TRANSIENT_NO_DUCK = 0x4
-VEHICLEAUDIOFOCUSREQUEST_REQUEST_RELEASE = 0x5
-
-# VehicleDisplay
-VEHICLEDISPLAY_MAIN = 0x0
-VEHICLEDISPLAY_INSTRUMENT_CLUSTER = 0x1
-
-# VehicleRadioConstants
-VEHICLERADIOCONSTANTS_VEHICLE_RADIO_PRESET_MIN_VALUE = 0x1
-
-# VehicleAudioFocusIndex
-VEHICLEAUDIOFOCUSINDEX_FOCUS = 0x0
-VEHICLEAUDIOFOCUSINDEX_STREAMS = 0x1
-VEHICLEAUDIOFOCUSINDEX_EXTERNAL_FOCUS_STATE = 0x2
-VEHICLEAUDIOFOCUSINDEX_AUDIO_CONTEXTS = 0x3
+# VehicleAudioExtFocusFlag
+VEHICLEAUDIOEXTFOCUSFLAG_NONE_FLAG = 0x0
+VEHICLEAUDIOEXTFOCUSFLAG_PERMANENT_FLAG = 0x1
+VEHICLEAUDIOEXTFOCUSFLAG_TRANSIENT_FLAG = 0x2
+VEHICLEAUDIOEXTFOCUSFLAG_PLAY_ONLY_FLAG = 0x4
+VEHICLEAUDIOEXTFOCUSFLAG_MUTE_MEDIA_FLAG = 0x8
 
 # VehicleProperty
 VEHICLEPROPERTY_INVALID = 0x0
@@ -148,6 +225,72 @@
 VEHICLEPROPERTY_WINDOW_VENT_MOVE = 0x11400bc3
 VEHICLEPROPERTY_WINDOW_LOCK = 0x11200bc4
 
+# VehicleDrivingStatus
+VEHICLEDRIVINGSTATUS_UNRESTRICTED = 0x0
+VEHICLEDRIVINGSTATUS_NO_VIDEO = 0x1
+VEHICLEDRIVINGSTATUS_NO_KEYBOARD_INPUT = 0x2
+VEHICLEDRIVINGSTATUS_NO_VOICE_INPUT = 0x4
+VEHICLEDRIVINGSTATUS_NO_CONFIG = 0x8
+VEHICLEDRIVINGSTATUS_LIMIT_MESSAGE_LEN = 0x10
+
+# VehicleAreaSeat
+VEHICLEAREASEAT_ROW_1_LEFT = 0x1
+VEHICLEAREASEAT_ROW_1_CENTER = 0x2
+VEHICLEAREASEAT_ROW_1_RIGHT = 0x4
+VEHICLEAREASEAT_ROW_2_LEFT = 0x10
+VEHICLEAREASEAT_ROW_2_CENTER = 0x20
+VEHICLEAREASEAT_ROW_2_RIGHT = 0x40
+VEHICLEAREASEAT_ROW_3_LEFT = 0x100
+VEHICLEAREASEAT_ROW_3_CENTER = 0x200
+VEHICLEAREASEAT_ROW_3_RIGHT = 0x400
+
+# VehicleRadioConstants
+VEHICLERADIOCONSTANTS_VEHICLE_RADIO_PRESET_MIN_VALUE = 0x1
+
+# VehicleAudioFocusIndex
+VEHICLEAUDIOFOCUSINDEX_FOCUS = 0x0
+VEHICLEAUDIOFOCUSINDEX_STREAMS = 0x1
+VEHICLEAUDIOFOCUSINDEX_EXTERNAL_FOCUS_STATE = 0x2
+VEHICLEAUDIOFOCUSINDEX_AUDIO_CONTEXTS = 0x3
+
+# VehicleAudioVolumeLimitIndex
+VEHICLEAUDIOVOLUMELIMITINDEX_STREAM = 0x0
+VEHICLEAUDIOVOLUMELIMITINDEX_MAX_VOLUME = 0x1
+
+# VehicleGear
+VEHICLEGEAR_GEAR_NEUTRAL = 0x1
+VEHICLEGEAR_GEAR_REVERSE = 0x2
+VEHICLEGEAR_GEAR_PARK = 0x4
+VEHICLEGEAR_GEAR_DRIVE = 0x8
+VEHICLEGEAR_GEAR_LOW = 0x10
+VEHICLEGEAR_GEAR_1 = 0x10
+VEHICLEGEAR_GEAR_2 = 0x20
+VEHICLEGEAR_GEAR_3 = 0x40
+VEHICLEGEAR_GEAR_4 = 0x80
+VEHICLEGEAR_GEAR_5 = 0x100
+VEHICLEGEAR_GEAR_6 = 0x200
+VEHICLEGEAR_GEAR_7 = 0x400
+VEHICLEGEAR_GEAR_8 = 0x800
+VEHICLEGEAR_GEAR_9 = 0x1000
+
+# VehicleDisplay
+VEHICLEDISPLAY_MAIN = 0x0
+VEHICLEDISPLAY_INSTRUMENT_CLUSTER = 0x1
+
+# VehicleAudioRoutingPolicyIndex
+VEHICLEAUDIOROUTINGPOLICYINDEX_STREAM = 0x0
+VEHICLEAUDIOROUTINGPOLICYINDEX_CONTEXTS = 0x1
+
+# VehicleAreaMirror
+VEHICLEAREAMIRROR_DRIVER_LEFT = 0x1
+VEHICLEAREAMIRROR_DRIVER_RIGHT = 0x2
+VEHICLEAREAMIRROR_DRIVER_CENTER = 0x4
+
+# VehicleInstrumentClusterType
+VEHICLEINSTRUMENTCLUSTERTYPE_NONE = 0x0
+VEHICLEINSTRUMENTCLUSTERTYPE_HAL_INTERFACE = 0x1
+VEHICLEINSTRUMENTCLUSTERTYPE_EXTERNAL_DISPLAY = 0x2
+
 # VehicleAreaZone
 VEHICLEAREAZONE_ROW_1_LEFT = 0x1
 VEHICLEAREAZONE_ROW_1_CENTER = 0x2
@@ -167,39 +310,30 @@
 VEHICLEAREAZONE_ROW_4 = 0x8000
 VEHICLEAREAZONE_WHOLE_CABIN = 0x80000000
 
-# SubscribeFlags
-SUBSCRIBEFLAGS_UNDEFINED = 0x0
-SUBSCRIBEFLAGS_HAL_EVENT = 0x1
-SUBSCRIBEFLAGS_SET_CALL = 0x2
-SUBSCRIBEFLAGS_DEFAULT = 0x1
+# VehicleApPowerState
+VEHICLEAPPOWERSTATE_OFF = 0x0
+VEHICLEAPPOWERSTATE_DEEP_SLEEP = 0x1
+VEHICLEAPPOWERSTATE_ON_DISP_OFF = 0x2
+VEHICLEAPPOWERSTATE_ON_FULL = 0x3
+VEHICLEAPPOWERSTATE_SHUTDOWN_PREPARE = 0x4
 
-# Wheel
-WHEEL_UNKNOWN = 0x0
-WHEEL_LEFT_FRONT = 0x1
-WHEEL_RIGHT_FRONT = 0x2
-WHEEL_LEFT_REAR = 0x4
-WHEEL_RIGHT_REAR = 0x8
+# VehicleHwKeyInputAction
+VEHICLEHWKEYINPUTACTION_ACTION_DOWN = 0x0
+VEHICLEHWKEYINPUTACTION_ACTION_UP = 0x1
 
-# StatusCode
-STATUSCODE_OK = 0x0
-STATUSCODE_TRY_AGAIN = 0x1
-STATUSCODE_INVALID_ARG = 0x2
-STATUSCODE_NOT_AVAILABLE = 0x3
-STATUSCODE_ACCESS_DENIED = 0x4
-STATUSCODE_INTERNAL_ERROR = 0x5
+# VehicleAudioStream
+VEHICLEAUDIOSTREAM_STREAM0 = 0x0
+VEHICLEAUDIOSTREAM_STREAM1 = 0x1
 
-# VehicleAudioHwVariantConfigFlag
-VEHICLEAUDIOHWVARIANTCONFIGFLAG_INTERNAL_RADIO_FLAG = 0x1
+# VehicleApPowerStateConfigFlag
+VEHICLEAPPOWERSTATECONFIGFLAG_ENABLE_DEEP_SLEEP_FLAG = 0x1
+VEHICLEAPPOWERSTATECONFIGFLAG_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG = 0x2
 
-# VehiclePropertyGroup
-VEHICLEPROPERTYGROUP_SYSTEM = 0x10000000
-VEHICLEPROPERTYGROUP_VENDOR = 0x20000000
-VEHICLEPROPERTYGROUP_MASK = 0xf0000000
-
-# VehicleAudioStreamFlag
-VEHICLEAUDIOSTREAMFLAG_STREAM0_FLAG = 0x1
-VEHICLEAUDIOSTREAMFLAG_STREAM1_FLAG = 0x2
-VEHICLEAUDIOSTREAMFLAG_STREAM2_FLAG = 0x4
+# VehicleTurnSignal
+VEHICLETURNSIGNAL_NONE = 0x0
+VEHICLETURNSIGNAL_RIGHT = 0x1
+VEHICLETURNSIGNAL_LEFT = 0x2
+VEHICLETURNSIGNAL_EMERGENCY = 0x4
 
 # VehiclePropertyChangeMode
 VEHICLEPROPERTYCHANGEMODE_STATIC = 0x0
@@ -208,21 +342,68 @@
 VEHICLEPROPERTYCHANGEMODE_POLL = 0x3
 VEHICLEPROPERTYCHANGEMODE_ON_SET = 0x4
 
-# VehicleAreaSeat
-VEHICLEAREASEAT_ROW_1_LEFT = 0x1
-VEHICLEAREASEAT_ROW_1_CENTER = 0x2
-VEHICLEAREASEAT_ROW_1_RIGHT = 0x4
-VEHICLEAREASEAT_ROW_2_LEFT = 0x10
-VEHICLEAREASEAT_ROW_2_CENTER = 0x20
-VEHICLEAREASEAT_ROW_2_RIGHT = 0x40
-VEHICLEAREASEAT_ROW_3_LEFT = 0x100
-VEHICLEAREASEAT_ROW_3_CENTER = 0x200
-VEHICLEAREASEAT_ROW_3_RIGHT = 0x400
+# VehicleAreaWindow
+VEHICLEAREAWINDOW_FRONT_WINDSHIELD = 0x1
+VEHICLEAREAWINDOW_REAR_WINDSHIELD = 0x2
+VEHICLEAREAWINDOW_ROOF_TOP = 0x4
+VEHICLEAREAWINDOW_ROW_1_LEFT = 0x10
+VEHICLEAREAWINDOW_ROW_1_RIGHT = 0x20
+VEHICLEAREAWINDOW_ROW_2_LEFT = 0x100
+VEHICLEAREAWINDOW_ROW_2_RIGHT = 0x200
+VEHICLEAREAWINDOW_ROW_3_LEFT = 0x1000
+VEHICLEAREAWINDOW_ROW_3_RIGHT = 0x2000
 
-# VehicleAudioVolumeIndex
-VEHICLEAUDIOVOLUMEINDEX_INDEX_STREAM = 0x0
-VEHICLEAUDIOVOLUMEINDEX_INDEX_VOLUME = 0x1
-VEHICLEAUDIOVOLUMEINDEX_INDEX_STATE = 0x2
+# VehicleArea
+VEHICLEAREA_GLOBAL = 0x1000000
+VEHICLEAREA_ZONE = 0x2000000
+VEHICLEAREA_WINDOW = 0x3000000
+VEHICLEAREA_MIRROR = 0x4000000
+VEHICLEAREA_SEAT = 0x5000000
+VEHICLEAREA_DOOR = 0x6000000
+VEHICLEAREA_MASK = 0xf000000
+
+# VehicleApPowerBootupReason
+VEHICLEAPPOWERBOOTUPREASON_USER_POWER_ON = 0x0
+VEHICLEAPPOWERBOOTUPREASON_USER_UNLOCK = 0x1
+VEHICLEAPPOWERBOOTUPREASON_TIMER = 0x2
+
+# VehicleAreaDoor
+VEHICLEAREADOOR_ROW_1_LEFT = 0x1
+VEHICLEAREADOOR_ROW_1_RIGHT = 0x4
+VEHICLEAREADOOR_ROW_2_LEFT = 0x10
+VEHICLEAREADOOR_ROW_2_RIGHT = 0x40
+VEHICLEAREADOOR_ROW_3_LEFT = 0x100
+VEHICLEAREADOOR_ROW_3_RIGHT = 0x400
+VEHICLEAREADOOR_HOOD = 0x10000000
+VEHICLEAREADOOR_REAR = 0x20000000
+
+# VehiclePropertyGroup
+VEHICLEPROPERTYGROUP_SYSTEM = 0x10000000
+VEHICLEPROPERTYGROUP_VENDOR = 0x20000000
+VEHICLEPROPERTYGROUP_MASK = 0xf0000000
+
+# VehicleAudioFocusRequest
+VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN = 0x1
+VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN_TRANSIENT = 0x2
+VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN_TRANSIENT_MAY_DUCK = 0x3
+VEHICLEAUDIOFOCUSREQUEST_REQUEST_GAIN_TRANSIENT_NO_DUCK = 0x4
+VEHICLEAUDIOFOCUSREQUEST_REQUEST_RELEASE = 0x5
+
+# VehiclePropertyType
+VEHICLEPROPERTYTYPE_STRING = 0x100000
+VEHICLEPROPERTYTYPE_BOOLEAN = 0x200000
+VEHICLEPROPERTYTYPE_INT32 = 0x400000
+VEHICLEPROPERTYTYPE_INT32_VEC = 0x410000
+VEHICLEPROPERTYTYPE_INT64 = 0x500000
+VEHICLEPROPERTYTYPE_FLOAT = 0x600000
+VEHICLEPROPERTYTYPE_FLOAT_VEC = 0x610000
+VEHICLEPROPERTYTYPE_BYTES = 0x700000
+VEHICLEPROPERTYTYPE_COMPLEX = 0xe00000
+VEHICLEPROPERTYTYPE_MASK = 0xff0000
+
+# VehicleAudioVolumeState
+VEHICLEAUDIOVOLUMESTATE_STATE_OK = 0x0
+VEHICLEAUDIOVOLUMESTATE_LIMIT_REACHED = 0x1
 
 # VehicleUnit
 VEHICLEUNIT_SHOULD_NOT_USE = 0x0
@@ -241,189 +422,8 @@
 VEHICLEUNIT_SECS = 0x53
 VEHICLEUNIT_YEAR = 0x59
 
-# VehicleAreaMirror
-VEHICLEAREAMIRROR_DRIVER_LEFT = 0x1
-VEHICLEAREAMIRROR_DRIVER_RIGHT = 0x2
-VEHICLEAREAMIRROR_DRIVER_CENTER = 0x4
-
-# VehiclePropertyAccess
-VEHICLEPROPERTYACCESS_NONE = 0x0
-VEHICLEPROPERTYACCESS_READ = 0x1
-VEHICLEPROPERTYACCESS_WRITE = 0x2
-VEHICLEPROPERTYACCESS_READ_WRITE = 0x3
-
-# VehicleAudioContextFlag
-VEHICLEAUDIOCONTEXTFLAG_MUSIC_FLAG = 0x1
-VEHICLEAUDIOCONTEXTFLAG_NAVIGATION_FLAG = 0x2
-VEHICLEAUDIOCONTEXTFLAG_VOICE_COMMAND_FLAG = 0x4
-VEHICLEAUDIOCONTEXTFLAG_CALL_FLAG = 0x8
-VEHICLEAUDIOCONTEXTFLAG_ALARM_FLAG = 0x10
-VEHICLEAUDIOCONTEXTFLAG_NOTIFICATION_FLAG = 0x20
-VEHICLEAUDIOCONTEXTFLAG_UNKNOWN_FLAG = 0x40
-VEHICLEAUDIOCONTEXTFLAG_SAFETY_ALERT_FLAG = 0x80
-VEHICLEAUDIOCONTEXTFLAG_CD_ROM_FLAG = 0x100
-VEHICLEAUDIOCONTEXTFLAG_AUX_AUDIO_FLAG = 0x200
-VEHICLEAUDIOCONTEXTFLAG_SYSTEM_SOUND_FLAG = 0x400
-VEHICLEAUDIOCONTEXTFLAG_RADIO_FLAG = 0x800
-VEHICLEAUDIOCONTEXTFLAG_EXT_SOURCE_FLAG = 0x1000
-
-# VehicleDrivingStatus
-VEHICLEDRIVINGSTATUS_UNRESTRICTED = 0x0
-VEHICLEDRIVINGSTATUS_NO_VIDEO = 0x1
-VEHICLEDRIVINGSTATUS_NO_KEYBOARD_INPUT = 0x2
-VEHICLEDRIVINGSTATUS_NO_VOICE_INPUT = 0x4
-VEHICLEDRIVINGSTATUS_NO_CONFIG = 0x8
-VEHICLEDRIVINGSTATUS_LIMIT_MESSAGE_LEN = 0x10
-
-# VehicleGear
-VEHICLEGEAR_GEAR_NEUTRAL = 0x1
-VEHICLEGEAR_GEAR_REVERSE = 0x2
-VEHICLEGEAR_GEAR_PARK = 0x4
-VEHICLEGEAR_GEAR_DRIVE = 0x8
-VEHICLEGEAR_GEAR_LOW = 0x10
-VEHICLEGEAR_GEAR_1 = 0x10
-VEHICLEGEAR_GEAR_2 = 0x20
-VEHICLEGEAR_GEAR_3 = 0x40
-VEHICLEGEAR_GEAR_4 = 0x80
-VEHICLEGEAR_GEAR_5 = 0x100
-VEHICLEGEAR_GEAR_6 = 0x200
-VEHICLEGEAR_GEAR_7 = 0x400
-VEHICLEGEAR_GEAR_8 = 0x800
-VEHICLEGEAR_GEAR_9 = 0x1000
-
-# VehicleTurnSignal
-VEHICLETURNSIGNAL_NONE = 0x0
-VEHICLETURNSIGNAL_RIGHT = 0x1
-VEHICLETURNSIGNAL_LEFT = 0x2
-VEHICLETURNSIGNAL_EMERGENCY = 0x4
-
-# VehicleApPowerStateShutdownParam
-VEHICLEAPPOWERSTATESHUTDOWNPARAM_SHUTDOWN_IMMEDIATELY = 0x1
-VEHICLEAPPOWERSTATESHUTDOWNPARAM_CAN_SLEEP = 0x2
-VEHICLEAPPOWERSTATESHUTDOWNPARAM_SHUTDOWN_ONLY = 0x3
-
-# VehiclePropertyOperation
-VEHICLEPROPERTYOPERATION_GENERIC = 0x0
-VEHICLEPROPERTYOPERATION_SET = 0x1
-VEHICLEPROPERTYOPERATION_GET = 0x2
-VEHICLEPROPERTYOPERATION_SUBSCRIBE = 0x3
-
-# VehiclePropertyType
-VEHICLEPROPERTYTYPE_STRING = 0x100000
-VEHICLEPROPERTYTYPE_BOOLEAN = 0x200000
-VEHICLEPROPERTYTYPE_INT32 = 0x400000
-VEHICLEPROPERTYTYPE_INT32_VEC = 0x410000
-VEHICLEPROPERTYTYPE_INT64 = 0x500000
-VEHICLEPROPERTYTYPE_FLOAT = 0x600000
-VEHICLEPROPERTYTYPE_FLOAT_VEC = 0x610000
-VEHICLEPROPERTYTYPE_BYTES = 0x700000
-VEHICLEPROPERTYTYPE_COMPLEX = 0xe00000
-VEHICLEPROPERTYTYPE_MASK = 0xff0000
-
-# VehicleAreaDoor
-VEHICLEAREADOOR_ROW_1_LEFT = 0x1
-VEHICLEAREADOOR_ROW_1_RIGHT = 0x4
-VEHICLEAREADOOR_ROW_2_LEFT = 0x10
-VEHICLEAREADOOR_ROW_2_RIGHT = 0x40
-VEHICLEAREADOOR_ROW_3_LEFT = 0x100
-VEHICLEAREADOOR_ROW_3_RIGHT = 0x400
-VEHICLEAREADOOR_HOOD = 0x10000000
-VEHICLEAREADOOR_REAR = 0x20000000
-
-# VehicleHwKeyInputAction
-VEHICLEHWKEYINPUTACTION_ACTION_DOWN = 0x0
-VEHICLEHWKEYINPUTACTION_ACTION_UP = 0x1
-
-# VehicleApPowerStateConfigFlag
-VEHICLEAPPOWERSTATECONFIGFLAG_ENABLE_DEEP_SLEEP_FLAG = 0x1
-VEHICLEAPPOWERSTATECONFIGFLAG_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG = 0x2
-
-# VehicleIgnitionState
-VEHICLEIGNITIONSTATE_UNDEFINED = 0x0
-VEHICLEIGNITIONSTATE_LOCK = 0x1
-VEHICLEIGNITIONSTATE_OFF = 0x2
-VEHICLEIGNITIONSTATE_ACC = 0x3
-VEHICLEIGNITIONSTATE_ON = 0x4
-VEHICLEIGNITIONSTATE_START = 0x5
-
-# VehicleAudioVolumeLimitIndex
-VEHICLEAUDIOVOLUMELIMITINDEX_STREAM = 0x0
-VEHICLEAUDIOVOLUMELIMITINDEX_MAX_VOLUME = 0x1
-
-# VehicleAreaWindow
-VEHICLEAREAWINDOW_FRONT_WINDSHIELD = 0x1
-VEHICLEAREAWINDOW_REAR_WINDSHIELD = 0x2
-VEHICLEAREAWINDOW_ROOF_TOP = 0x4
-VEHICLEAREAWINDOW_ROW_1_LEFT = 0x10
-VEHICLEAREAWINDOW_ROW_1_RIGHT = 0x20
-VEHICLEAREAWINDOW_ROW_2_LEFT = 0x100
-VEHICLEAREAWINDOW_ROW_2_RIGHT = 0x200
-VEHICLEAREAWINDOW_ROW_3_LEFT = 0x1000
-VEHICLEAREAWINDOW_ROW_3_RIGHT = 0x2000
-
-# VehicleAudioFocusState
-VEHICLEAUDIOFOCUSSTATE_STATE_GAIN = 0x1
-VEHICLEAUDIOFOCUSSTATE_STATE_GAIN_TRANSIENT = 0x2
-VEHICLEAUDIOFOCUSSTATE_STATE_LOSS_TRANSIENT_CAN_DUCK = 0x3
-VEHICLEAUDIOFOCUSSTATE_STATE_LOSS_TRANSIENT = 0x4
-VEHICLEAUDIOFOCUSSTATE_STATE_LOSS = 0x5
-VEHICLEAUDIOFOCUSSTATE_STATE_LOSS_TRANSIENT_EXLCUSIVE = 0x6
-
-# VehicleAudioVolumeCapabilityFlag
-VEHICLEAUDIOVOLUMECAPABILITYFLAG_PERSISTENT_STORAGE = 0x1
-VEHICLEAUDIOVOLUMECAPABILITYFLAG_MASTER_VOLUME_ONLY = 0x2
-
-# VehicleApPowerState
-VEHICLEAPPOWERSTATE_OFF = 0x0
-VEHICLEAPPOWERSTATE_DEEP_SLEEP = 0x1
-VEHICLEAPPOWERSTATE_ON_DISP_OFF = 0x2
-VEHICLEAPPOWERSTATE_ON_FULL = 0x3
-VEHICLEAPPOWERSTATE_SHUTDOWN_PREPARE = 0x4
-
-# VehicleAudioVolumeState
-VEHICLEAUDIOVOLUMESTATE_STATE_OK = 0x0
-VEHICLEAUDIOVOLUMESTATE_LIMIT_REACHED = 0x1
-
-# VehicleAudioRoutingPolicyIndex
-VEHICLEAUDIOROUTINGPOLICYINDEX_STREAM = 0x0
-VEHICLEAUDIOROUTINGPOLICYINDEX_CONTEXTS = 0x1
-
-# VehicleAudioStream
-VEHICLEAUDIOSTREAM_STREAM0 = 0x0
-VEHICLEAUDIOSTREAM_STREAM1 = 0x1
-
-# VehicleInstrumentClusterType
-VEHICLEINSTRUMENTCLUSTERTYPE_NONE = 0x0
-VEHICLEINSTRUMENTCLUSTERTYPE_HAL_INTERFACE = 0x1
-VEHICLEINSTRUMENTCLUSTERTYPE_EXTERNAL_DISPLAY = 0x2
-
-# VehicleAudioExtFocusFlag
-VEHICLEAUDIOEXTFOCUSFLAG_NONE_FLAG = 0x0
-VEHICLEAUDIOEXTFOCUSFLAG_PERMANENT_FLAG = 0x1
-VEHICLEAUDIOEXTFOCUSFLAG_TRANSIENT_FLAG = 0x2
-VEHICLEAUDIOEXTFOCUSFLAG_PLAY_ONLY_FLAG = 0x4
-VEHICLEAUDIOEXTFOCUSFLAG_MUTE_MEDIA_FLAG = 0x8
-
-# VehicleHvacFanDirection
-VEHICLEHVACFANDIRECTION_FACE = 0x1
-VEHICLEHVACFANDIRECTION_FLOOR = 0x2
-VEHICLEHVACFANDIRECTION_FACE_AND_FLOOR = 0x3
-VEHICLEHVACFANDIRECTION_DEFROST = 0x4
-VEHICLEHVACFANDIRECTION_DEFROST_AND_FLOOR = 0x5
-
-# VehicleApPowerBootupReason
-VEHICLEAPPOWERBOOTUPREASON_USER_POWER_ON = 0x0
-VEHICLEAPPOWERBOOTUPREASON_USER_UNLOCK = 0x1
-VEHICLEAPPOWERBOOTUPREASON_TIMER = 0x2
-
-# VehicleArea
-VEHICLEAREA_GLOBAL = 0x1000000
-VEHICLEAREA_ZONE = 0x2000000
-VEHICLEAREA_WINDOW = 0x3000000
-VEHICLEAREA_MIRROR = 0x4000000
-VEHICLEAREA_SEAT = 0x5000000
-VEHICLEAREA_DOOR = 0x6000000
-VEHICLEAREA_MASK = 0xf000000
+# VehicleAudioHwVariantConfigFlag
+VEHICLEAUDIOHWVARIANTCONFIGFLAG_INTERNAL_RADIO_FLAG = 0x1
 
 # Create a container of value_type constants to be used by vhal_emulator
 class vhal_types_2_0:
diff --git a/tools/emulator/vhal_consts_2_1.py b/tools/emulator/vhal_consts_2_1.py
index d367b85..49d892d 100644
--- a/tools/emulator/vhal_consts_2_1.py
+++ b/tools/emulator/vhal_consts_2_1.py
@@ -16,223 +16,169 @@
 # This file was autogenerated by vhal_const_generate.py
 from vhal_consts_2_0 import *
 
-# FuelType
-FUELTYPE_NOT_AVAILABLE = 0x0
-FUELTYPE_GASOLINE = 0x1
-FUELTYPE_METHANOL = 0x2
-FUELTYPE_ETHANOL = 0x3
-FUELTYPE_DIESEL = 0x4
-FUELTYPE_LPG = 0x5
-FUELTYPE_CNG = 0x6
-FUELTYPE_PROPANE = 0x7
-FUELTYPE_ELECTRIC = 0x8
-FUELTYPE_BIFUEL_RUNNING_GASOLINE = 0x9
-FUELTYPE_BIFUEL_RUNNING_METHANOL = 0xa
-FUELTYPE_BIFUEL_RUNNING_ETHANOL = 0xb
-FUELTYPE_BIFUEL_RUNNING_LPG = 0xc
-FUELTYPE_BIFUEL_RUNNING_CNG = 0xd
-FUELTYPE_BIFUEL_RUNNING_PROPANE = 0xe
-FUELTYPE_BIFUEL_RUNNING_ELECTRIC = 0xf
-FUELTYPE_BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION = 0x10
-FUELTYPE_HYBRID_GASOLINE = 0x11
-FUELTYPE_HYBRID_ETHANOL = 0x12
-FUELTYPE_HYBRID_DIESEL = 0x13
-FUELTYPE_HYBRID_ELECTRIC = 0x14
-FUELTYPE_HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION = 0x15
-FUELTYPE_HYBRID_REGENERATIVE = 0x16
-FUELTYPE_BIFUEL_RUNNING_DIESEL = 0x17
+# VmsMessageWithLayerAndPublisherIdIntegerValuesIndex
+VMSMESSAGEWITHLAYERANDPUBLISHERIDINTEGERVALUESINDEX_PUBLISHER_ID = 0x4
+
+# VmsAvailabilityStateIntegerValuesIndex
+VMSAVAILABILITYSTATEINTEGERVALUESINDEX_SEQUENCE_NUMBER = 0x1
+VMSAVAILABILITYSTATEINTEGERVALUESINDEX_NUMBER_OF_ASSOCIATED_LAYERS = 0x2
+VMSAVAILABILITYSTATEINTEGERVALUESINDEX_LAYERS_START = 0x3
+
+# VmsSubscriptionsStateIntegerValuesIndex
+VMSSUBSCRIPTIONSSTATEINTEGERVALUESINDEX_SEQUENCE_NUMBER = 0x1
+VMSSUBSCRIPTIONSSTATEINTEGERVALUESINDEX_NUMBER_OF_LAYERS = 0x2
+VMSSUBSCRIPTIONSSTATEINTEGERVALUESINDEX_NUMBER_OF_ASSOCIATED_LAYERS = 0x3
+VMSSUBSCRIPTIONSSTATEINTEGERVALUESINDEX_SUBSCRIPTIONS_START = 0x4
+
+# Obd2IgnitionMonitorKind
+OBD2IGNITIONMONITORKIND_SPARK = 0x0
+OBD2IGNITIONMONITORKIND_COMPRESSION = 0x1
+
+# VmsOfferingMessageIntegerValuesIndex
+VMSOFFERINGMESSAGEINTEGERVALUESINDEX_PUBLISHER_ID = 0x1
+VMSOFFERINGMESSAGEINTEGERVALUESINDEX_NUMBER_OF_OFFERS = 0x2
+VMSOFFERINGMESSAGEINTEGERVALUESINDEX_OFFERING_START = 0x3
+
+# VehicleProperty
+VEHICLEPROPERTY_WHEEL_TICK = 0x11e00306
+VEHICLEPROPERTY_ABS_ACTIVE = 0x1120040a
+VEHICLEPROPERTY_TRACTION_CONTROL_ACTIVE = 0x1120040b
+VEHICLEPROPERTY_HVAC_AUTO_RECIRC_ON = 0x12200512
+VEHICLEPROPERTY_VEHICLE_MAP_SERVICE = 0x11e00c00
+VEHICLEPROPERTY_OBD2_LIVE_FRAME = 0x11e00d00
+VEHICLEPROPERTY_OBD2_FREEZE_FRAME = 0x11e00d01
+VEHICLEPROPERTY_OBD2_FREEZE_FRAME_INFO = 0x11e00d02
+VEHICLEPROPERTY_OBD2_FREEZE_FRAME_CLEAR = 0x11e00d03
+
+# VmsMessageWithLayerIntegerValuesIndex
+VMSMESSAGEWITHLAYERINTEGERVALUESINDEX_LAYER_TYPE = 0x1
+VMSMESSAGEWITHLAYERINTEGERVALUESINDEX_LAYER_SUBTYPE = 0x2
+VMSMESSAGEWITHLAYERINTEGERVALUESINDEX_LAYER_VERSION = 0x3
+
+# Obd2CompressionIgnitionMonitors
+OBD2COMPRESSIONIGNITIONMONITORS_EGR_OR_VVT_AVAILABLE = 0x40
+OBD2COMPRESSIONIGNITIONMONITORS_EGR_OR_VVT_INCOMPLETE = 0x80
+OBD2COMPRESSIONIGNITIONMONITORS_PM_FILTER_AVAILABLE = 0x100
+OBD2COMPRESSIONIGNITIONMONITORS_PM_FILTER_INCOMPLETE = 0x200
+OBD2COMPRESSIONIGNITIONMONITORS_EXHAUST_GAS_SENSOR_AVAILABLE = 0x400
+OBD2COMPRESSIONIGNITIONMONITORS_EXHAUST_GAS_SENSOR_INCOMPLETE = 0x800
+OBD2COMPRESSIONIGNITIONMONITORS_BOOST_PRESSURE_AVAILABLE = 0x1000
+OBD2COMPRESSIONIGNITIONMONITORS_BOOST_PRESSURE_INCOMPLETE = 0x2000
+OBD2COMPRESSIONIGNITIONMONITORS_NOx_SCR__AVAILABLE = 0x4000
+OBD2COMPRESSIONIGNITIONMONITORS_NOx_SCR_INCOMPLETE = 0x8000
+OBD2COMPRESSIONIGNITIONMONITORS_NMHC_CATALYST_AVAILABLE = 0x10000
+OBD2COMPRESSIONIGNITIONMONITORS_NMHC_CATALYST_INCOMPLETE = 0x20000
 
 # VmsBaseMessageIntegerValuesIndex
-VMSBASEMESSAGEINTEGERVALUESINDEX_VMS_MESSAGE_TYPE = 0x0
+VMSBASEMESSAGEINTEGERVALUESINDEX_MESSAGE_TYPE = 0x0
 
-# SparkIgnitionMonitors
-SPARKIGNITIONMONITORS_EGR_AVAILABLE = 0x40
-SPARKIGNITIONMONITORS_EGR_INCOMPLETE = 0x80
-SPARKIGNITIONMONITORS_OXYGEN_SENSOR_HEATER_AVAILABLE = 0x100
-SPARKIGNITIONMONITORS_OXYGEN_SENSOR_HEATER_INCOMPLETE = 0x200
-SPARKIGNITIONMONITORS_OXYGEN_SENSOR_AVAILABLE = 0x400
-SPARKIGNITIONMONITORS_OXYGEN_SENSOR_INCOMPLETE = 0x800
-SPARKIGNITIONMONITORS_AC_REFRIGERANT_AVAILABLE = 0x1000
-SPARKIGNITIONMONITORS_AC_REFRIGERANT_INCOMPLETE = 0x2000
-SPARKIGNITIONMONITORS_SECONDARY_AIR_SYSTEM_AVAILABLE = 0x4000
-SPARKIGNITIONMONITORS_SECONDARY_AIR_SYSTEM_INCOMPLETE = 0x8000
-SPARKIGNITIONMONITORS_EVAPORATIVE_SYSTEM_AVAILABLE = 0x10000
-SPARKIGNITIONMONITORS_EVAPORATIVE_SYSTEM_INCOMPLETE = 0x20000
-SPARKIGNITIONMONITORS_HEATED_CATALYST_AVAILABLE = 0x40000
-SPARKIGNITIONMONITORS_HEATED_CATALYST_INCOMPLETE = 0x80000
-SPARKIGNITIONMONITORS_CATALYST_AVAILABLE = 0x100000
-SPARKIGNITIONMONITORS_CATALYST_INCOMPLETE = 0x200000
-
-# Obd2FloatSensorIndex
-OBD2FLOATSENSORINDEX_CALCULATED_ENGINE_LOAD = 0x0
-OBD2FLOATSENSORINDEX_ENGINE_COOLANT_TEMPERATURE = 0x1
-OBD2FLOATSENSORINDEX_SHORT_TERM_FUEL_TRIM_BANK1 = 0x2
-OBD2FLOATSENSORINDEX_LONG_TERM_FUEL_TRIM_BANK1 = 0x3
-OBD2FLOATSENSORINDEX_SHORT_TERM_FUEL_TRIM_BANK2 = 0x4
-OBD2FLOATSENSORINDEX_LONG_TERM_FUEL_TRIM_BANK2 = 0x5
-OBD2FLOATSENSORINDEX_FUEL_PRESSURE = 0x6
-OBD2FLOATSENSORINDEX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 0x7
-OBD2FLOATSENSORINDEX_ENGINE_RPM = 0x8
-OBD2FLOATSENSORINDEX_VEHICLE_SPEED = 0x9
-OBD2FLOATSENSORINDEX_TIMING_ADVANCE = 0xa
-OBD2FLOATSENSORINDEX_MAF_AIR_FLOW_RATE = 0xb
-OBD2FLOATSENSORINDEX_THROTTLE_POSITION = 0xc
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR1_VOLTAGE = 0xd
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM = 0xe
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO = 0xf
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR2_VOLTAGE = 0x10
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM = 0x11
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO = 0x12
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR3_VOLTAGE = 0x13
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM = 0x14
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO = 0x15
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR4_VOLTAGE = 0x16
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM = 0x17
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO = 0x18
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR5_VOLTAGE = 0x19
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM = 0x1a
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO = 0x1b
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR6_VOLTAGE = 0x1c
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM = 0x1d
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO = 0x1e
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR7_VOLTAGE = 0x1f
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM = 0x20
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO = 0x21
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR8_VOLTAGE = 0x22
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM = 0x23
-OBD2FLOATSENSORINDEX_OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO = 0x24
-OBD2FLOATSENSORINDEX_FUEL_RAIL_PRESSURE = 0x25
-OBD2FLOATSENSORINDEX_FUEL_RAIL_GAUGE_PRESSURE = 0x26
-OBD2FLOATSENSORINDEX_COMMANDED_EXHAUST_GAS_RECIRCULATION = 0x27
-OBD2FLOATSENSORINDEX_EXHAUST_GAS_RECIRCULATION_ERROR = 0x28
-OBD2FLOATSENSORINDEX_COMMANDED_EVAPORATIVE_PURGE = 0x29
-OBD2FLOATSENSORINDEX_FUEL_TANK_LEVEL_INPUT = 0x2a
-OBD2FLOATSENSORINDEX_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 0x2b
-OBD2FLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK1_SENSOR1 = 0x2c
-OBD2FLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK2_SENSOR1 = 0x2d
-OBD2FLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK1_SENSOR2 = 0x2e
-OBD2FLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK2_SENSOR2 = 0x2f
-OBD2FLOATSENSORINDEX_ABSOLUTE_LOAD_VALUE = 0x30
-OBD2FLOATSENSORINDEX_FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO = 0x31
-OBD2FLOATSENSORINDEX_RELATIVE_THROTTLE_POSITION = 0x32
-OBD2FLOATSENSORINDEX_ABSOLUTE_THROTTLE_POSITION_B = 0x33
-OBD2FLOATSENSORINDEX_ABSOLUTE_THROTTLE_POSITION_C = 0x34
-OBD2FLOATSENSORINDEX_ACCELERATOR_PEDAL_POSITION_D = 0x35
-OBD2FLOATSENSORINDEX_ACCELERATOR_PEDAL_POSITION_E = 0x36
-OBD2FLOATSENSORINDEX_ACCELERATOR_PEDAL_POSITION_F = 0x37
-OBD2FLOATSENSORINDEX_COMMANDED_THROTTLE_ACTUATOR = 0x38
-OBD2FLOATSENSORINDEX_ETHANOL_FUEL_PERCENTAGE = 0x39
-OBD2FLOATSENSORINDEX_ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 0x3a
-OBD2FLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 0x3b
-OBD2FLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 0x3c
-OBD2FLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 0x3d
-OBD2FLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 0x3e
-OBD2FLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 0x3f
-OBD2FLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 0x40
-OBD2FLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 0x41
-OBD2FLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 0x42
-OBD2FLOATSENSORINDEX_RELATIVE_ACCELERATOR_PEDAL_POSITION = 0x43
-OBD2FLOATSENSORINDEX_HYBRID_BATTERY_PACK_REMAINING_LIFE = 0x44
-OBD2FLOATSENSORINDEX_FUEL_INJECTION_TIMING = 0x45
-OBD2FLOATSENSORINDEX_ENGINE_FUEL_RATE = 0x46
-OBD2FLOATSENSORINDEX_LAST_SYSTEM_INDEX = 0x46
-
-# CommonIgnitionMonitors
-COMMONIGNITIONMONITORS_COMPONENTS_AVAILABLE = 0x1
-COMMONIGNITIONMONITORS_COMPONENTS_INCOMPLETE = 0x2
-COMMONIGNITIONMONITORS_FUEL_SYSTEM_AVAILABLE = 0x4
-COMMONIGNITIONMONITORS_FUEL_SYSTEM_INCOMPLETE = 0x8
-COMMONIGNITIONMONITORS_MISFIRE_AVAILABLE = 0x10
-COMMONIGNITIONMONITORS_MISFIRE_INCOMPLETE = 0x20
-
-# IgnitionMonitorKind
-IGNITIONMONITORKIND_SPARK = 0x0
-IGNITIONMONITORKIND_COMPRESSION = 0x1
-
-# SecondaryAirStatus
-SECONDARYAIRSTATUS_UPSTREAM = 0x1
-SECONDARYAIRSTATUS_DOWNSTREAM_OF_CATALYCIC_CONVERTER = 0x2
-SECONDARYAIRSTATUS_FROM_OUTSIDE_OR_OFF = 0x4
-SECONDARYAIRSTATUS_PUMP_ON_FOR_DIAGNOSTICS = 0x8
-
-# VmsMessageType
-VMSMESSAGETYPE_SUBSCRIBE = 0x1
-VMSMESSAGETYPE_UNSUBSCRIBE = 0x2
-VMSMESSAGETYPE_DATA = 0x3
-VMSMESSAGETYPE_OFFERING = 0x4
-VMSMESSAGETYPE_AVAILABILITY_REQUEST = 0x5
-VMSMESSAGETYPE_AVAILABILITY_RESPONSE = 0x6
-VMSMESSAGETYPE_SUBSCRIPTION_REQUEST = 0x7
-VMSMESSAGETYPE_SUBSCRIPTION_RESPONSE = 0x8
-
-# CompressionIgnitionMonitors
-COMPRESSIONIGNITIONMONITORS_EGR_OR_VVT_AVAILABLE = 0x40
-COMPRESSIONIGNITIONMONITORS_EGR_OR_VVT_INCOMPLETE = 0x80
-COMPRESSIONIGNITIONMONITORS_PM_FILTER_AVAILABLE = 0x100
-COMPRESSIONIGNITIONMONITORS_PM_FILTER_INCOMPLETE = 0x200
-COMPRESSIONIGNITIONMONITORS_EXHAUST_GAS_SENSOR_AVAILABLE = 0x400
-COMPRESSIONIGNITIONMONITORS_EXHAUST_GAS_SENSOR_INCOMPLETE = 0x800
-COMPRESSIONIGNITIONMONITORS_BOOST_PRESSURE_AVAILABLE = 0x1000
-COMPRESSIONIGNITIONMONITORS_BOOST_PRESSURE_INCOMPLETE = 0x2000
-COMPRESSIONIGNITIONMONITORS_NOx_SCR__AVAILABLE = 0x4000
-COMPRESSIONIGNITIONMONITORS_NOx_SCR_INCOMPLETE = 0x8000
-COMPRESSIONIGNITIONMONITORS_NMHC_CATALYST_AVAILABLE = 0x10000
-COMPRESSIONIGNITIONMONITORS_NMHC_CATALYST_INCOMPLETE = 0x20000
+# Obd2CommonIgnitionMonitors
+OBD2COMMONIGNITIONMONITORS_COMPONENTS_AVAILABLE = 0x1
+OBD2COMMONIGNITIONMONITORS_COMPONENTS_INCOMPLETE = 0x2
+OBD2COMMONIGNITIONMONITORS_FUEL_SYSTEM_AVAILABLE = 0x4
+OBD2COMMONIGNITIONMONITORS_FUEL_SYSTEM_INCOMPLETE = 0x8
+OBD2COMMONIGNITIONMONITORS_MISFIRE_AVAILABLE = 0x10
+OBD2COMMONIGNITIONMONITORS_MISFIRE_INCOMPLETE = 0x20
 
 # VehiclePropertyGroup
 VEHICLEPROPERTYGROUP_SYSTEM = 0x10000000
 VEHICLEPROPERTYGROUP_VENDOR = 0x20000000
 VEHICLEPROPERTYGROUP_MASK = 0xf0000000
 
-# Obd2IntegerSensorIndex
-OBD2INTEGERSENSORINDEX_FUEL_SYSTEM_STATUS = 0x0
-OBD2INTEGERSENSORINDEX_MALFUNCTION_INDICATOR_LIGHT_ON = 0x1
-OBD2INTEGERSENSORINDEX_IGNITION_MONITORS_SUPPORTED = 0x2
-OBD2INTEGERSENSORINDEX_IGNITION_SPECIFIC_MONITORS = 0x3
-OBD2INTEGERSENSORINDEX_INTAKE_AIR_TEMPERATURE = 0x4
-OBD2INTEGERSENSORINDEX_COMMANDED_SECONDARY_AIR_STATUS = 0x5
-OBD2INTEGERSENSORINDEX_NUM_OXYGEN_SENSORS_PRESENT = 0x6
-OBD2INTEGERSENSORINDEX_RUNTIME_SINCE_ENGINE_START = 0x7
-OBD2INTEGERSENSORINDEX_DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON = 0x8
-OBD2INTEGERSENSORINDEX_WARMUPS_SINCE_CODES_CLEARED = 0x9
-OBD2INTEGERSENSORINDEX_DISTANCE_TRAVELED_SINCE_CODES_CLEARED = 0xa
-OBD2INTEGERSENSORINDEX_ABSOLUTE_BAROMETRIC_PRESSURE = 0xb
-OBD2INTEGERSENSORINDEX_CONTROL_MODULE_VOLTAGE = 0xc
-OBD2INTEGERSENSORINDEX_AMBIENT_AIR_TEMPERATURE = 0xd
-OBD2INTEGERSENSORINDEX_TIME_WITH_MALFUNCTION_LIGHT_ON = 0xe
-OBD2INTEGERSENSORINDEX_TIME_SINCE_TROUBLE_CODES_CLEARED = 0xf
-OBD2INTEGERSENSORINDEX_MAX_FUEL_AIR_EQUIVALENCE_RATIO = 0x10
-OBD2INTEGERSENSORINDEX_MAX_OXYGEN_SENSOR_VOLTAGE = 0x11
-OBD2INTEGERSENSORINDEX_MAX_OXYGEN_SENSOR_CURRENT = 0x12
-OBD2INTEGERSENSORINDEX_MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 0x13
-OBD2INTEGERSENSORINDEX_MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR = 0x14
-OBD2INTEGERSENSORINDEX_FUEL_TYPE = 0x15
-OBD2INTEGERSENSORINDEX_FUEL_RAIL_ABSOLUTE_PRESSURE = 0x16
-OBD2INTEGERSENSORINDEX_ENGINE_OIL_TEMPERATURE = 0x17
-OBD2INTEGERSENSORINDEX_DRIVER_DEMAND_PERCENT_TORQUE = 0x18
-OBD2INTEGERSENSORINDEX_ENGINE_ACTUAL_PERCENT_TORQUE = 0x19
-OBD2INTEGERSENSORINDEX_ENGINE_REFERENCE_PERCENT_TORQUE = 0x1a
-OBD2INTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_IDLE = 0x1b
-OBD2INTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT1 = 0x1c
-OBD2INTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT2 = 0x1d
-OBD2INTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT3 = 0x1e
-OBD2INTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT4 = 0x1f
-OBD2INTEGERSENSORINDEX_LAST_SYSTEM_INDEX = 0x1f
+# Obd2FuelSystemStatus
+OBD2FUELSYSTEMSTATUS_OPEN_INSUFFICIENT_ENGINE_TEMPERATURE = 0x1
+OBD2FUELSYSTEMSTATUS_CLOSED_LOOP = 0x2
+OBD2FUELSYSTEMSTATUS_OPEN_ENGINE_LOAD_OR_DECELERATION = 0x4
+OBD2FUELSYSTEMSTATUS_OPEN_SYSTEM_FAILURE = 0x8
+OBD2FUELSYSTEMSTATUS_CLOSED_LOOP_BUT_FEEDBACK_FAULT = 0x10
 
-# VehicleProperty
-VEHICLEPROPERTY_WHEEL_TICK = 0x11610306
-VEHICLEPROPERTY_OBD2_LIVE_FRAME = 0x11e00d00
-VEHICLEPROPERTY_OBD2_FREEZE_FRAME = 0x11e00d01
-VEHICLEPROPERTY_OBD2_FREEZE_FRAME_INFO = 0x11e00d02
-VEHICLEPROPERTY_OBD2_FREEZE_FRAME_CLEAR = 0x11e00d03
-VEHICLEPROPERTY_VEHICLE_MAP_SERVICE = 0x11e00c00
+# VmsMessageType
+VMSMESSAGETYPE_SUBSCRIBE = 0x1
+VMSMESSAGETYPE_SUBSCRIBE_TO_PUBLISHER = 0x2
+VMSMESSAGETYPE_UNSUBSCRIBE = 0x3
+VMSMESSAGETYPE_UNSUBSCRIBE_TO_PUBLISHER = 0x4
+VMSMESSAGETYPE_OFFERING = 0x5
+VMSMESSAGETYPE_AVAILABILITY_REQUEST = 0x6
+VMSMESSAGETYPE_SUBSCRIPTIONS_REQUEST = 0x7
+VMSMESSAGETYPE_AVAILABILITY_RESPONSE = 0x8
+VMSMESSAGETYPE_AVAILABILITY_CHANGE = 0x9
+VMSMESSAGETYPE_SUBSCRIPTIONS_RESPONSE = 0xa
+VMSMESSAGETYPE_SUBSCRIPTIONS_CHANGE = 0xb
+VMSMESSAGETYPE_DATA = 0xc
 
-# FuelSystemStatus
-FUELSYSTEMSTATUS_OPEN_INSUFFICIENT_ENGINE_TEMPERATURE = 0x1
-FUELSYSTEMSTATUS_CLOSED_LOOP = 0x2
-FUELSYSTEMSTATUS_OPEN_ENGINE_LOAD_OR_DECELERATION = 0x4
-FUELSYSTEMSTATUS_OPEN_SYSTEM_FAILURE = 0x8
-FUELSYSTEMSTATUS_CLOSED_LOOP_BUT_FEEDBACK_FAULT = 0x10
+# DiagnosticFloatSensorIndex
+DIAGNOSTICFLOATSENSORINDEX_CALCULATED_ENGINE_LOAD = 0x0
+DIAGNOSTICFLOATSENSORINDEX_ENGINE_COOLANT_TEMPERATURE = 0x1
+DIAGNOSTICFLOATSENSORINDEX_SHORT_TERM_FUEL_TRIM_BANK1 = 0x2
+DIAGNOSTICFLOATSENSORINDEX_LONG_TERM_FUEL_TRIM_BANK1 = 0x3
+DIAGNOSTICFLOATSENSORINDEX_SHORT_TERM_FUEL_TRIM_BANK2 = 0x4
+DIAGNOSTICFLOATSENSORINDEX_LONG_TERM_FUEL_TRIM_BANK2 = 0x5
+DIAGNOSTICFLOATSENSORINDEX_FUEL_PRESSURE = 0x6
+DIAGNOSTICFLOATSENSORINDEX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 0x7
+DIAGNOSTICFLOATSENSORINDEX_ENGINE_RPM = 0x8
+DIAGNOSTICFLOATSENSORINDEX_VEHICLE_SPEED = 0x9
+DIAGNOSTICFLOATSENSORINDEX_TIMING_ADVANCE = 0xa
+DIAGNOSTICFLOATSENSORINDEX_MAF_AIR_FLOW_RATE = 0xb
+DIAGNOSTICFLOATSENSORINDEX_THROTTLE_POSITION = 0xc
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR1_VOLTAGE = 0xd
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM = 0xe
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO = 0xf
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR2_VOLTAGE = 0x10
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM = 0x11
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO = 0x12
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR3_VOLTAGE = 0x13
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM = 0x14
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO = 0x15
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR4_VOLTAGE = 0x16
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM = 0x17
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO = 0x18
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR5_VOLTAGE = 0x19
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM = 0x1a
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO = 0x1b
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR6_VOLTAGE = 0x1c
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM = 0x1d
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO = 0x1e
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR7_VOLTAGE = 0x1f
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM = 0x20
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO = 0x21
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR8_VOLTAGE = 0x22
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM = 0x23
+DIAGNOSTICFLOATSENSORINDEX_OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO = 0x24
+DIAGNOSTICFLOATSENSORINDEX_FUEL_RAIL_PRESSURE = 0x25
+DIAGNOSTICFLOATSENSORINDEX_FUEL_RAIL_GAUGE_PRESSURE = 0x26
+DIAGNOSTICFLOATSENSORINDEX_COMMANDED_EXHAUST_GAS_RECIRCULATION = 0x27
+DIAGNOSTICFLOATSENSORINDEX_EXHAUST_GAS_RECIRCULATION_ERROR = 0x28
+DIAGNOSTICFLOATSENSORINDEX_COMMANDED_EVAPORATIVE_PURGE = 0x29
+DIAGNOSTICFLOATSENSORINDEX_FUEL_TANK_LEVEL_INPUT = 0x2a
+DIAGNOSTICFLOATSENSORINDEX_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 0x2b
+DIAGNOSTICFLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK1_SENSOR1 = 0x2c
+DIAGNOSTICFLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK2_SENSOR1 = 0x2d
+DIAGNOSTICFLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK1_SENSOR2 = 0x2e
+DIAGNOSTICFLOATSENSORINDEX_CATALYST_TEMPERATURE_BANK2_SENSOR2 = 0x2f
+DIAGNOSTICFLOATSENSORINDEX_ABSOLUTE_LOAD_VALUE = 0x30
+DIAGNOSTICFLOATSENSORINDEX_FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO = 0x31
+DIAGNOSTICFLOATSENSORINDEX_RELATIVE_THROTTLE_POSITION = 0x32
+DIAGNOSTICFLOATSENSORINDEX_ABSOLUTE_THROTTLE_POSITION_B = 0x33
+DIAGNOSTICFLOATSENSORINDEX_ABSOLUTE_THROTTLE_POSITION_C = 0x34
+DIAGNOSTICFLOATSENSORINDEX_ACCELERATOR_PEDAL_POSITION_D = 0x35
+DIAGNOSTICFLOATSENSORINDEX_ACCELERATOR_PEDAL_POSITION_E = 0x36
+DIAGNOSTICFLOATSENSORINDEX_ACCELERATOR_PEDAL_POSITION_F = 0x37
+DIAGNOSTICFLOATSENSORINDEX_COMMANDED_THROTTLE_ACTUATOR = 0x38
+DIAGNOSTICFLOATSENSORINDEX_ETHANOL_FUEL_PERCENTAGE = 0x39
+DIAGNOSTICFLOATSENSORINDEX_ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 0x3a
+DIAGNOSTICFLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 0x3b
+DIAGNOSTICFLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 0x3c
+DIAGNOSTICFLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 0x3d
+DIAGNOSTICFLOATSENSORINDEX_SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 0x3e
+DIAGNOSTICFLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 0x3f
+DIAGNOSTICFLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 0x40
+DIAGNOSTICFLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 0x41
+DIAGNOSTICFLOATSENSORINDEX_LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 0x42
+DIAGNOSTICFLOATSENSORINDEX_RELATIVE_ACCELERATOR_PEDAL_POSITION = 0x43
+DIAGNOSTICFLOATSENSORINDEX_HYBRID_BATTERY_PACK_REMAINING_LIFE = 0x44
+DIAGNOSTICFLOATSENSORINDEX_FUEL_INJECTION_TIMING = 0x45
+DIAGNOSTICFLOATSENSORINDEX_ENGINE_FUEL_RATE = 0x46
+DIAGNOSTICFLOATSENSORINDEX_LAST_SYSTEM_INDEX = 0x46
 
 # VehiclePropertyType
 VEHICLEPROPERTYTYPE_STRING = 0x100000
@@ -246,10 +192,6 @@
 VEHICLEPROPERTYTYPE_COMPLEX = 0xe00000
 VEHICLEPROPERTYTYPE_MASK = 0xff0000
 
-# VmsSimpleMessageIntegerValuesIndex
-VMSSIMPLEMESSAGEINTEGERVALUESINDEX_VMS_LAYER_ID = 0x1
-VMSSIMPLEMESSAGEINTEGERVALUESINDEX_VMS_LAYER_VERSION = 0x2
-
 # VehicleArea
 VEHICLEAREA_GLOBAL = 0x1000000
 VEHICLEAREA_ZONE = 0x2000000
@@ -259,11 +201,87 @@
 VEHICLEAREA_DOOR = 0x6000000
 VEHICLEAREA_MASK = 0xf000000
 
-# VmsOfferingMessageIntegerValuesIndex
-VMSOFFERINGMESSAGEINTEGERVALUESINDEX_VMS_NUMBER_OF_LAYERS_DEPENDENCIES = 0x1
-VMSOFFERINGMESSAGEINTEGERVALUESINDEX_FIRST_DEPENDENCIES_INDEX = 0x2
+# Obd2FuelType
+OBD2FUELTYPE_NOT_AVAILABLE = 0x0
+OBD2FUELTYPE_GASOLINE = 0x1
+OBD2FUELTYPE_METHANOL = 0x2
+OBD2FUELTYPE_ETHANOL = 0x3
+OBD2FUELTYPE_DIESEL = 0x4
+OBD2FUELTYPE_LPG = 0x5
+OBD2FUELTYPE_CNG = 0x6
+OBD2FUELTYPE_PROPANE = 0x7
+OBD2FUELTYPE_ELECTRIC = 0x8
+OBD2FUELTYPE_BIFUEL_RUNNING_GASOLINE = 0x9
+OBD2FUELTYPE_BIFUEL_RUNNING_METHANOL = 0xa
+OBD2FUELTYPE_BIFUEL_RUNNING_ETHANOL = 0xb
+OBD2FUELTYPE_BIFUEL_RUNNING_LPG = 0xc
+OBD2FUELTYPE_BIFUEL_RUNNING_CNG = 0xd
+OBD2FUELTYPE_BIFUEL_RUNNING_PROPANE = 0xe
+OBD2FUELTYPE_BIFUEL_RUNNING_ELECTRIC = 0xf
+OBD2FUELTYPE_BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION = 0x10
+OBD2FUELTYPE_HYBRID_GASOLINE = 0x11
+OBD2FUELTYPE_HYBRID_ETHANOL = 0x12
+OBD2FUELTYPE_HYBRID_DIESEL = 0x13
+OBD2FUELTYPE_HYBRID_ELECTRIC = 0x14
+OBD2FUELTYPE_HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION = 0x15
+OBD2FUELTYPE_HYBRID_REGENERATIVE = 0x16
+OBD2FUELTYPE_BIFUEL_RUNNING_DIESEL = 0x17
 
-# VmsSubscriptionResponseFormat
-VMSSUBSCRIPTIONRESPONSEFORMAT_SEQUENCE_NUMBER = 0x1
-VMSSUBSCRIPTIONRESPONSEFORMAT_NUMBER_OF_LAYERS = 0x2
-VMSSUBSCRIPTIONRESPONSEFORMAT_FIRST_LAYER = 0x3
+# DiagnosticIntegerSensorIndex
+DIAGNOSTICINTEGERSENSORINDEX_FUEL_SYSTEM_STATUS = 0x0
+DIAGNOSTICINTEGERSENSORINDEX_MALFUNCTION_INDICATOR_LIGHT_ON = 0x1
+DIAGNOSTICINTEGERSENSORINDEX_IGNITION_MONITORS_SUPPORTED = 0x2
+DIAGNOSTICINTEGERSENSORINDEX_IGNITION_SPECIFIC_MONITORS = 0x3
+DIAGNOSTICINTEGERSENSORINDEX_INTAKE_AIR_TEMPERATURE = 0x4
+DIAGNOSTICINTEGERSENSORINDEX_COMMANDED_SECONDARY_AIR_STATUS = 0x5
+DIAGNOSTICINTEGERSENSORINDEX_NUM_OXYGEN_SENSORS_PRESENT = 0x6
+DIAGNOSTICINTEGERSENSORINDEX_RUNTIME_SINCE_ENGINE_START = 0x7
+DIAGNOSTICINTEGERSENSORINDEX_DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON = 0x8
+DIAGNOSTICINTEGERSENSORINDEX_WARMUPS_SINCE_CODES_CLEARED = 0x9
+DIAGNOSTICINTEGERSENSORINDEX_DISTANCE_TRAVELED_SINCE_CODES_CLEARED = 0xa
+DIAGNOSTICINTEGERSENSORINDEX_ABSOLUTE_BAROMETRIC_PRESSURE = 0xb
+DIAGNOSTICINTEGERSENSORINDEX_CONTROL_MODULE_VOLTAGE = 0xc
+DIAGNOSTICINTEGERSENSORINDEX_AMBIENT_AIR_TEMPERATURE = 0xd
+DIAGNOSTICINTEGERSENSORINDEX_TIME_WITH_MALFUNCTION_LIGHT_ON = 0xe
+DIAGNOSTICINTEGERSENSORINDEX_TIME_SINCE_TROUBLE_CODES_CLEARED = 0xf
+DIAGNOSTICINTEGERSENSORINDEX_MAX_FUEL_AIR_EQUIVALENCE_RATIO = 0x10
+DIAGNOSTICINTEGERSENSORINDEX_MAX_OXYGEN_SENSOR_VOLTAGE = 0x11
+DIAGNOSTICINTEGERSENSORINDEX_MAX_OXYGEN_SENSOR_CURRENT = 0x12
+DIAGNOSTICINTEGERSENSORINDEX_MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 0x13
+DIAGNOSTICINTEGERSENSORINDEX_MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR = 0x14
+DIAGNOSTICINTEGERSENSORINDEX_FUEL_TYPE = 0x15
+DIAGNOSTICINTEGERSENSORINDEX_FUEL_RAIL_ABSOLUTE_PRESSURE = 0x16
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_OIL_TEMPERATURE = 0x17
+DIAGNOSTICINTEGERSENSORINDEX_DRIVER_DEMAND_PERCENT_TORQUE = 0x18
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_ACTUAL_PERCENT_TORQUE = 0x19
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_REFERENCE_PERCENT_TORQUE = 0x1a
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_IDLE = 0x1b
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT1 = 0x1c
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT2 = 0x1d
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT3 = 0x1e
+DIAGNOSTICINTEGERSENSORINDEX_ENGINE_PERCENT_TORQUE_DATA_POINT4 = 0x1f
+DIAGNOSTICINTEGERSENSORINDEX_LAST_SYSTEM_INDEX = 0x1f
+
+# Obd2SparkIgnitionMonitors
+OBD2SPARKIGNITIONMONITORS_EGR_AVAILABLE = 0x40
+OBD2SPARKIGNITIONMONITORS_EGR_INCOMPLETE = 0x80
+OBD2SPARKIGNITIONMONITORS_OXYGEN_SENSOR_HEATER_AVAILABLE = 0x100
+OBD2SPARKIGNITIONMONITORS_OXYGEN_SENSOR_HEATER_INCOMPLETE = 0x200
+OBD2SPARKIGNITIONMONITORS_OXYGEN_SENSOR_AVAILABLE = 0x400
+OBD2SPARKIGNITIONMONITORS_OXYGEN_SENSOR_INCOMPLETE = 0x800
+OBD2SPARKIGNITIONMONITORS_AC_REFRIGERANT_AVAILABLE = 0x1000
+OBD2SPARKIGNITIONMONITORS_AC_REFRIGERANT_INCOMPLETE = 0x2000
+OBD2SPARKIGNITIONMONITORS_SECONDARY_AIR_SYSTEM_AVAILABLE = 0x4000
+OBD2SPARKIGNITIONMONITORS_SECONDARY_AIR_SYSTEM_INCOMPLETE = 0x8000
+OBD2SPARKIGNITIONMONITORS_EVAPORATIVE_SYSTEM_AVAILABLE = 0x10000
+OBD2SPARKIGNITIONMONITORS_EVAPORATIVE_SYSTEM_INCOMPLETE = 0x20000
+OBD2SPARKIGNITIONMONITORS_HEATED_CATALYST_AVAILABLE = 0x40000
+OBD2SPARKIGNITIONMONITORS_HEATED_CATALYST_INCOMPLETE = 0x80000
+OBD2SPARKIGNITIONMONITORS_CATALYST_AVAILABLE = 0x100000
+OBD2SPARKIGNITIONMONITORS_CATALYST_INCOMPLETE = 0x200000
+
+# Obd2SecondaryAirStatus
+OBD2SECONDARYAIRSTATUS_UPSTREAM = 0x1
+OBD2SECONDARYAIRSTATUS_DOWNSTREAM_OF_CATALYCIC_CONVERTER = 0x2
+OBD2SECONDARYAIRSTATUS_FROM_OUTSIDE_OR_OFF = 0x4
+OBD2SECONDARYAIRSTATUS_PUMP_ON_FOR_DIAGNOSTICS = 0x8
diff --git a/tools/emulator/vhal_emulator_test.py b/tools/emulator/vhal_emulator_test.py
index 1d0ada0..ea4030d 100755
--- a/tools/emulator/vhal_emulator_test.py
+++ b/tools/emulator/vhal_emulator_test.py
@@ -37,7 +37,7 @@
 sys.dont_write_bytecode = True
 
 import VehicleHalProto_pb2
-import vhal_consts_2_0
+import vhal_consts_2_1
 import vhal_emulator
 import logging
 
@@ -47,6 +47,16 @@
     _configs = 0                    # List of configs from DUT
     _log = 0                        # Logger module
     _vhal = 0                       # Handle to VHAL object that communicates over socket to DUT
+    # TODO: b/38203109 - Fix OBD2 values, implement handling for complex properties
+    _skipProps = [
+                    vhal_consts_2_1.VEHICLEPROPERTY_OBD2_LIVE_FRAME,
+                    vhal_consts_2_1.VEHICLEPROPERTY_OBD2_FREEZE_FRAME,
+                    vhal_consts_2_1.VEHICLEPROPERTY_OBD2_FREEZE_FRAME_INFO,
+                    vhal_consts_2_1.VEHICLEPROPERTY_OBD2_FREEZE_FRAME_CLEAR,
+                    vhal_consts_2_1.VEHICLEPROPERTY_VEHICLE_MAP_SERVICE,
+                    vhal_consts_2_1.VEHICLEPROPERTY_WHEEL_TICK,     # Need to support complex properties
+                    0x21E00666      # FakeDataControllingProperty - an internal test property
+                 ]
 
     def _getMidpoint(self, minVal, maxVal):
         retVal =  minVal + (maxVal - minVal)/2
@@ -60,7 +70,7 @@
         elif valType in self._types.TYPE_BYTES:
             # Generate array of integers counting from 0
             testValue = list(range(len(origValue)))
-        elif valType == vhal_consts_2_0.VEHICLEPROPERTYTYPE_BOOLEAN:
+        elif valType == vhal_consts_2_1.VEHICLEPROPERTYTYPE_BOOLEAN:
             testValue = origValue ^ 1
         elif valType in self._types.TYPE_INT32:
             try:
@@ -87,7 +97,7 @@
             testValue = "%.5f" % testValue
             testValue = float(testValue)
         else:
-            self._log.error("generateTestValue:  valType=%d is not handled", valType)
+            self._log.error("generateTestValue:  valType=0x%X is not handled", valType)
             testValue = None
         return testValue
 
@@ -103,7 +113,7 @@
                 value = rxMsg.value[0].string_value
             elif valType in self._types.TYPE_BYTES:
                 value = rxMsg.value[0].bytes_value
-            elif valType == vhal_consts_2_0.VEHICLEPROPERTYTYPE_BOOLEAN:
+            elif valType == vhal_consts_2_1.VEHICLEPROPERTYTYPE_BOOLEAN:
                 value = rxMsg.value[0].int32_values[0]
             elif valType in self._types.TYPE_INT32:
                 value = rxMsg.value[0].int32_values[0]
@@ -115,7 +125,7 @@
                 value = "%.5f" % value
                 value = float(value)
             else:
-                self._log.error("getValuesFromMsg:  valType=%d is not handled", valType)
+                self._log.error("getValueFromMsg:  valType=0x%X is not handled", valType)
                 value = None
         return value
 
@@ -126,10 +136,10 @@
         retVal = 1
         rxMsg = self._vhal.rxMsg()
         if rxMsg.msg_type != expectedType:
-            self._log.error("rxMsg Type expected: %d, received: %d", expectedType, rxMsg.msg_type)
+            self._log.error("rxMsg Type expected: 0x%X, received: 0x%X", expectedType, rxMsg.msg_type)
             retVal = 0
         if rxMsg.status != expectedStatus:
-            self._log.error("rxMsg Status expected: %d, received: %d", expectedStatus, rxMsg.status)
+            self._log.error("rxMsg Status expected: 0x%X, received: 0x%X", expectedStatus, rxMsg.status)
             retVal = 0
         return rxMsg, retVal
 
@@ -138,13 +148,13 @@
     def testGetConfig(self):
         self._log.info("Starting testGetConfig...")
         for cfg in self._configs:
-            self._log.debug("  Getting config for propId=%d", cfg.prop)
+            self._log.debug("  Getting config for propId=0x%X", cfg.prop)
             self._vhal.getConfig(cfg.prop)
             rxMsg, retVal = self._rxMsgAndValidate(VehicleHalProto_pb2.GET_CONFIG_RESP,
                                                    VehicleHalProto_pb2.RESULT_OK)
             if retVal:
                 if rxMsg.config[0] != cfg:
-                    self._log.error("testGetConfig failed.  prop=%d, expected:\n%s\nreceived:\n%s",
+                    self._log.error("testGetConfig failed.  prop=0x%X, expected:\n%s\nreceived:\n%s",
                                cfg.prop, str(cfg), str(rxMsg.config))
         self._log.info("  Finished testGetConfig!")
 
@@ -152,13 +162,13 @@
     def testGetBadConfig(self):
         self._log.info("Starting testGetBadConfig...")
         for prop in self._badProps:
-            self._log.debug("  Testing bad propId=%d", prop)
+            self._log.debug("  Testing bad propId=0x%X", prop)
             self._vhal.getConfig(prop)
             rxMsg, retVal = self._rxMsgAndValidate(VehicleHalProto_pb2.GET_CONFIG_RESP,
                                                    VehicleHalProto_pb2.ERROR_INVALID_PROPERTY)
             if retVal:
                 for cfg in rxMsg.config:
-                    self._log.error("testGetBadConfig  prop=%d, expected:None, received:\n%s",
+                    self._log.error("testGetBadConfig  prop=0x%X, expected:None, received:\n%s",
                                     cfg.prop, str(rxMsg.config))
         self._log.info("  Finished testGetBadConfig!")
 
@@ -177,6 +187,11 @@
     def testGetSet(self):
         self._log.info("Starting testGetSet()...")
         for cfg in self._configs:
+            if cfg.prop in self._skipProps:
+                # Skip properties that cannot be handled properly by this test.
+                self._log.warning("  Skipping propId=0x%X", cfg.prop)
+                continue
+
             areas = cfg.supported_areas
             idx = -1
             while (idx == -1) | (areas != 0):
@@ -188,7 +203,7 @@
                 # Remove the area from areas
                 areas ^= area
 
-                self._log.debug("  Testing propId=%d, area=%d", cfg.prop, area)
+                self._log.debug("  Testing propId=0x%X, area=0x%X", cfg.prop, area)
 
                 # Get the current value
                 self._vhal.getProperty(cfg.prop, area)
@@ -198,21 +213,21 @@
                 # Save the original value
                 origValue = self._getValueFromMsg(rxMsg)
                 if origValue == None:
-                    self._log.error("testGetSet:  Could not get value for prop=%d, area=%d",
+                    self._log.error("testGetSet:  Could not get value for prop=0x%X, area=0x%X",
                                     cfg.prop, area)
                     continue
 
                 # Generate the test value
                 testValue = self._generateTestValue(cfg, idx, origValue)
                 if testValue == None:
-                    self._log.error("testGetSet:  Cannot generate test value for prop=%d, area=%d",
+                    self._log.error("testGetSet:  Cannot generate test value for prop=0x%X, area=0x%X",
                                     cfg.prop, area)
                     continue
 
                 # Send the new value
                 self._vhal.setProperty(cfg.prop, area, testValue)
                 rxMsg, retVal = self._rxMsgAndValidate(VehicleHalProto_pb2.SET_PROPERTY_RESP,
-                                                       VehicleHalProto_pb2.RESULT_OK)
+                                                        VehicleHalProto_pb2.RESULT_OK)
 
                 # Get the new value and verify it
                 self._vhal.getProperty(cfg.prop, area)
@@ -220,7 +235,7 @@
                                                        VehicleHalProto_pb2.RESULT_OK)
                 newValue = self._getValueFromMsg(rxMsg)
                 if newValue != testValue:
-                    self._log.error("testGetSet: set failed for propId=%d, area=%d", cfg.prop, area)
+                    self._log.error("testGetSet: set failed for propId=0x%X, area=0x%X", cfg.prop, area)
                     print("testValue= ", testValue, "newValue= ", newValue)
                     continue
 
@@ -233,13 +248,13 @@
     def testGetBadProperty(self):
         self._log.info("Starting testGetBadProperty()...")
         for prop in self._badProps:
-            self._log.debug("  Testing bad propId=%d", prop)
+            self._log.debug("  Testing bad propId=0x%X", prop)
             self._vhal.getProperty(prop, 0)
             rxMsg, retVal = self._rxMsgAndValidate(VehicleHalProto_pb2.GET_PROPERTY_RESP,
                                                    VehicleHalProto_pb2.ERROR_INVALID_PROPERTY)
             if retVal:
                 for value in rxMsg.value:
-                    self._log.error("testGetBadProperty  prop=%d, expected:None, received:\n%s",
+                    self._log.error("testGetBadProperty  prop=0x%X, expected:None, received:\n%s",
                                     prop, str(rxMsg))
         self._log.info("  Finished testGetBadProperty()!")
 
@@ -248,12 +263,12 @@
         area = 1
         value = 100
         for prop in self._badProps:
-            self._log.debug("  Testing bad propId=%d", prop)
+            self._log.debug("  Testing bad propId=0x%X", prop)
             area = area + 1
             value = value + 1
             try:
                 self._vhal.setProperty(prop, area, value)
-                self._log.error("testGetBadProperty failed.  prop=%d, area=%d, value=%d",
+                self._log.error("testGetBadProperty failed.  prop=0x%X, area=0x%X, value=%d",
                                 prop, area, value)
             except ValueError as e:
                 # Received expected error
@@ -290,5 +305,5 @@
         self._configs = self._vhal.rxMsg().config
 
 if __name__ == '__main__':
-    v = VhalTest(vhal_consts_2_0.vhal_types_2_0)
+    v = VhalTest(vhal_consts_2_1.vhal_types_2_0)
     v.runTests()
diff --git a/tools/update-obd2-sensors.py b/tools/update-obd2-sensors.py
index 6528b16..e161258 100755
--- a/tools/update-obd2-sensors.py
+++ b/tools/update-obd2-sensors.py
@@ -126,7 +126,7 @@
 " * limitations under the License.\n" + \
 "*/\n" + \
 "\n" + \
-"package android.car.hardware;\n" + \
+"package android.car.diagnostic;\n" + \
 "\n" + \
 "import android.annotation.IntDef;\n" + \
 "import android.annotation.SystemApi;\n" + \
@@ -281,9 +281,9 @@
 import os
 
 if len(sys.argv) != 4:
-    print('syntax: update-obd2-sensors.py <path/to/types.hal> <path/to/*SensorIndices.java> <path/to/diagnostic_sensors.py>')
+    print('syntax: update-obd2-sensors.py <path/to/types.hal> <path/to/android.car.diagnostic> <path/to/diagnostic_sensors.py>')
     print('This script will parse types.hal, and use the resulting', end='')
-    print('parse tree to generate CarDiagnosticSensorIndices.java.')
+    print('parse tree to generate Java and Python lists of sensor identifiers.')
     sys.exit(1)
 load(sys.argv[1])
 generateJava(sys.argv[2])
diff --git a/vehicle-hal-support-lib/Android.mk b/vehicle-hal-support-lib/Android.mk
index 688fb24..9ff39c6 100644
--- a/vehicle-hal-support-lib/Android.mk
+++ b/vehicle-hal-support-lib/Android.mk
@@ -24,6 +24,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
+    android.hidl.base-V1.0-java \
     android.hardware.automotive.vehicle-V2.0-java \
     android.hardware.automotive.vehicle-V2.1-java \
     junit \