Merge "Remove the data type from the OperationType enum." into oc-mr1-dev
diff --git a/Android.bp b/Android.bp
index 79e8609..7ae00b6 100644
--- a/Android.bp
+++ b/Android.bp
@@ -9,3 +9,32 @@
"-Werror",
],
}
+
+// VTS tests must link to HAL definition libraries statically.
+cc_defaults {
+ name: "VtsHalTargetTestDefaults",
+ defaults: ["hidl_defaults"],
+
+ // Lists all dependencies that can *not* be expected on the device.
+ static_libs: [
+ "VtsHalHidlTargetTestBase",
+ ],
+ group_static_libs: true,
+
+ // Lists all system dependencies that can be expected on the device.
+ shared_libs: [
+ "libbase",
+ // All the following are dependencies of any HAL definition library.
+ "libcutils",
+ "liblog",
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ ],
+ cflags: [
+ "-O0",
+ "-g",
+ ],
+
+}
diff --git a/audio/2.0/Android.bp b/audio/2.0/Android.bp
index b193c8f..cdaaa15 100644
--- a/audio/2.0/Android.bp
+++ b/audio/2.0/Android.bp
@@ -81,13 +81,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.audio@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.audio@2.0_genc++"],
generated_headers: ["android.hardware.audio@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.audio@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/audio/2.0/vts/functional/Android.bp b/audio/2.0/vts/functional/Android.bp
index b289709..f3b2ca7 100644
--- a/audio/2.0/vts/functional/Android.bp
+++ b/audio/2.0/vts/functional/Android.bp
@@ -16,29 +16,18 @@
cc_test {
name: "VtsHalAudioV2_0TargetTest",
- defaults: ["hidl_defaults"],
- srcs: ["AudioPrimaryHidlHalTest.cpp",
- "ValidateAudioConfiguration.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libhidlbase",
- "libhidltransport",
- "libutils",
- "libcutils",
- "libxml2",
- "android.hardware.audio@2.0",
- "android.hardware.audio.common@2.0",
+ defaults: ["VtsHalTargetTestDefaults"],
+ srcs: [
+ "AudioPrimaryHidlHalTest.cpp",
+ "ValidateAudioConfiguration.cpp"
],
static_libs: [
- "VtsHalHidlTargetTestBase",
"android.hardware.audio.common.test.utility",
+ "android.hardware.audio@2.0",
+ "android.hardware.audio.common@2.0",
+ "libxml2",
],
- cflags: [
- "-O0",
- "-g",
- "-Wall",
- "-Wextra",
- "-Werror",
+ shared_libs: [
+ "libicuuc",
],
}
diff --git a/audio/common/2.0/Android.bp b/audio/common/2.0/Android.bp
index 39db15a..0007f44 100644
--- a/audio/common/2.0/Android.bp
+++ b/audio/common/2.0/Android.bp
@@ -32,13 +32,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.audio.common@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.audio.common@2.0_genc++"],
generated_headers: ["android.hardware.audio.common@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.audio.common@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/audio/common/2.0/default/Android.bp b/audio/common/2.0/default/Android.bp
index 0486a5c..104bbac 100644
--- a/audio/common/2.0/default/Android.bp
+++ b/audio/common/2.0/default/Android.bp
@@ -16,6 +16,9 @@
cc_library_shared {
name: "android.hardware.audio.common@2.0-util",
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
srcs: [
"EffectMap.cpp",
"HidlUtils.cpp",
diff --git a/audio/effect/2.0/Android.bp b/audio/effect/2.0/Android.bp
index a004263..fd667f0 100644
--- a/audio/effect/2.0/Android.bp
+++ b/audio/effect/2.0/Android.bp
@@ -130,13 +130,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.audio.effect@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.audio.effect@2.0_genc++"],
generated_headers: ["android.hardware.audio.effect@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.audio.effect@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/audio/effect/2.0/vts/functional/Android.bp b/audio/effect/2.0/vts/functional/Android.bp
index 15f1e64..7b421cb 100644
--- a/audio/effect/2.0/vts/functional/Android.bp
+++ b/audio/effect/2.0/vts/functional/Android.bp
@@ -16,30 +16,20 @@
cc_test {
name: "VtsHalAudioEffectV2_0TargetTest",
- defaults: ["hidl_defaults"],
- srcs: ["VtsHalAudioEffectV2_0TargetTest.cpp",
- "ValidateAudioEffectsConfiguration.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "libxml2",
+ defaults: ["VtsHalTargetTestDefaults"],
+ srcs: [
+ "VtsHalAudioEffectV2_0TargetTest.cpp",
+ "ValidateAudioEffectsConfiguration.cpp"
+ ],
+ static_libs: [
+ "android.hardware.audio.common.test.utility",
"android.hardware.audio.common@2.0",
"android.hardware.audio.effect@2.0",
"android.hidl.allocator@1.0",
"android.hidl.memory@1.0",
+ "libxml2",
],
- static_libs: [
- "VtsHalHidlTargetTestBase",
- "android.hardware.audio.common.test.utility",
- ],
- cflags: [
- "-O0",
- "-g",
- "-Wextra",
+ shared_libs: [
+ "libicuuc",
],
}
diff --git a/automotive/evs/1.0/Android.bp b/automotive/evs/1.0/Android.bp
index 9ca97a7..7ae2231 100644
--- a/automotive/evs/1.0/Android.bp
+++ b/automotive/evs/1.0/Android.bp
@@ -60,13 +60,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.automotive.evs@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.automotive.evs@1.0_genc++"],
generated_headers: ["android.hardware.automotive.evs@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.automotive.evs@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/automotive/vehicle/2.0/Android.bp b/automotive/vehicle/2.0/Android.bp
index e21bef0..879fe0d 100644
--- a/automotive/vehicle/2.0/Android.bp
+++ b/automotive/vehicle/2.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.automotive.vehicle@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.automotive.vehicle@2.0_genc++"],
generated_headers: ["android.hardware.automotive.vehicle@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.automotive.vehicle@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/automotive/vehicle/2.1/Android.bp b/automotive/vehicle/2.1/Android.bp
index 9e45fb5..447c08e 100644
--- a/automotive/vehicle/2.1/Android.bp
+++ b/automotive/vehicle/2.1/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.automotive.vehicle@2.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.automotive.vehicle@2.1_genc++"],
generated_headers: ["android.hardware.automotive.vehicle@2.1_genc++_headers"],
export_generated_headers: ["android.hardware.automotive.vehicle@2.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/automotive/vehicle/2.1/types.hal b/automotive/vehicle/2.1/types.hal
index 53feb23..569e1a5 100644
--- a/automotive/vehicle/2.1/types.hal
+++ b/automotive/vehicle/2.1/types.hal
@@ -50,16 +50,11 @@
* configArray[3] = micrometers per rear right wheel tick
* configArray[4] = micrometers per rear left wheel tick
*
- * NOTE: If a wheel is not supported, its value shall always be set to
- * LONG_MAX = 9223372036854775807.
+ * NOTE: If a wheel is not supported, its value shall always be set to 0.
*
* VehiclePropValue.timestamp must be correctly filled in.
*
- * Vendors must specify wheels that support this sensor in
- * VehiclePropConfig.configFlags. The format of this field is a bitset of
- * values from Wheel enum.
- *
- * @change_mode VehiclePropertyChangeMode:ON_CHANGE |VehiclePropertyChangeMode:CONTINUOUS
+ * @change_mode VehiclePropertyChangeMode:CONTINUOUS
* @access VehiclePropertyAccess:READ
*/
WHEEL_TICK = (
@@ -95,9 +90,8 @@
/**
* Automatic re-circulation on/off
*
- * IVehicle#set may return StatusCode::NOT_AVAILABLE and IVehicle#get is not
- * guaranteed to work if HVAC unit is off. See HVAC_POWER_ON property for
- * details.
+ * IVehicle#set and IVehicle#get must return StatusCode::NOT_AVAILABLE when HVAC unit is off.
+ * See HVAC_POWER_ON property for details.
*
* @change_mode VehiclePropertyChangeMode:ON_CHANGE
* @access VehiclePropertyAccess:READ_WRITE
@@ -255,7 +249,10 @@
| VehicleArea:GLOBAL),
};
-/** The status of the vehicle's fuel system. */
+/**
+ * The status of the vehicle's fuel system.
+ * These values come from the SAE J1979 standard.
+ */
enum Obd2FuelSystemStatus : int32_t {
OPEN_INSUFFICIENT_ENGINE_TEMPERATURE = 1,
CLOSED_LOOP = 2,
@@ -270,7 +267,10 @@
COMPRESSION = 1,
};
-/** These ignition monitors are common to both SPARK and COMPRESSION. */
+/**
+ * Ignition monitors common to both SPARK and COMPRESSION.
+ * These values come from the SAE J1979 standard.
+ */
enum Obd2CommonIgnitionMonitors : int32_t {
COMPONENTS_AVAILABLE = 0x1 << 0,
COMPONENTS_INCOMPLETE = 0x1 << 1,
@@ -282,7 +282,10 @@
MISFIRE_INCOMPLETE = 0x1 << 5,
};
-/** Ignition monitors available for SPARK vehicles. */
+/**
+ * Ignition monitors available for SPARK vehicles.
+ * These values come from the SAE J1979 standard.
+ */
enum Obd2SparkIgnitionMonitors : Obd2CommonIgnitionMonitors {
EGR_AVAILABLE = 0x1 << 6,
EGR_INCOMPLETE = 0x1 << 7,
@@ -309,7 +312,10 @@
CATALYST_INCOMPLETE = 0x1 << 21,
};
-/** Ignition monitors only available for COMPRESSION vehicles. */
+/**
+ * Ignition monitors only available for COMPRESSION vehicles.
+ * These values come from the SAE J1979 standard.
+ */
enum Obd2CompressionIgnitionMonitors : Obd2CommonIgnitionMonitors {
EGR_OR_VVT_AVAILABLE = 0x1 << 6,
EGR_OR_VVT_INCOMPLETE = 0x1 << 7,
@@ -323,14 +329,17 @@
BOOST_PRESSURE_AVAILABLE = 0x1 << 12,
BOOST_PRESSURE_INCOMPLETE = 0x1 << 13,
- NOx_SCR__AVAILABLE = 0x1 << 14,
+ NOx_SCR_AVAILABLE = 0x1 << 14,
NOx_SCR_INCOMPLETE = 0x1 << 15,
NMHC_CATALYST_AVAILABLE = 0x1 << 16,
NMHC_CATALYST_INCOMPLETE = 0x1 << 17,
};
-/** The status of the vehicle's secondary air system. */
+/**
+ * The status of the vehicle's secondary air system.
+ * These values come from the SAE J1979 standard.
+ */
enum Obd2SecondaryAirStatus : int32_t {
UPSTREAM = 1,
DOWNSTREAM_OF_CATALYCIC_CONVERTER = 2,
@@ -338,7 +347,10 @@
PUMP_ON_FOR_DIAGNOSTICS = 8,
};
-/** The fuel type(s) supported by a vehicle. */
+/**
+ * The fuel type(s) supported by a vehicle.
+ * These values come from the SAE J1979 standard.
+ */
enum Obd2FuelType : int32_t {
NOT_AVAILABLE = 0,
GASOLINE = 1,
@@ -372,14 +384,16 @@
* Some of the properties are represented as an integer mapping to another enum. In those cases
* expect a comment by the property definition describing the enum to look at for the mapping.
* Any value greater than the last reserved index is available to vendors to map their extensions.
+ * While these values do not directly map to SAE J1979 PIDs, an equivalence is listed next
+ * to each one to aid implementors.
*/
enum DiagnosticIntegerSensorIndex : int32_t {
/** refer to FuelSystemStatus for a description of this value. */
- FUEL_SYSTEM_STATUS = 0,
- MALFUNCTION_INDICATOR_LIGHT_ON = 1,
+ FUEL_SYSTEM_STATUS = 0, /* PID 0x03 */
+ MALFUNCTION_INDICATOR_LIGHT_ON = 1, /* PID 0x01 */
/** refer to IgnitionMonitorKind for a description of this value. */
- IGNITION_MONITORS_SUPPORTED = 2,
+ IGNITION_MONITORS_SUPPORTED = 2, /* PID 0x01 */
/**
* The value of this sensor is a bitmask that specifies whether ignition-specific
@@ -387,39 +401,39 @@
* bits in this value are given by, respectively, SparkIgnitionMonitors and
* CompressionIgnitionMonitors depending on the value of IGNITION_MONITORS_SUPPORTED.
*/
- IGNITION_SPECIFIC_MONITORS = 3,
- INTAKE_AIR_TEMPERATURE = 4,
+ IGNITION_SPECIFIC_MONITORS = 3, /* PID 0x01 */
+ INTAKE_AIR_TEMPERATURE = 4, /* PID 0x0F */
/** refer to SecondaryAirStatus for a description of this value. */
- COMMANDED_SECONDARY_AIR_STATUS = 5,
- NUM_OXYGEN_SENSORS_PRESENT = 6,
- RUNTIME_SINCE_ENGINE_START = 7,
- DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON = 8,
- WARMUPS_SINCE_CODES_CLEARED = 9,
- DISTANCE_TRAVELED_SINCE_CODES_CLEARED = 10,
- ABSOLUTE_BAROMETRIC_PRESSURE = 11,
- CONTROL_MODULE_VOLTAGE = 12,
- AMBIENT_AIR_TEMPERATURE = 13,
- TIME_WITH_MALFUNCTION_LIGHT_ON = 14,
- TIME_SINCE_TROUBLE_CODES_CLEARED = 15,
- MAX_FUEL_AIR_EQUIVALENCE_RATIO = 16,
- MAX_OXYGEN_SENSOR_VOLTAGE = 17,
- MAX_OXYGEN_SENSOR_CURRENT = 18,
- MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 19,
- MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR = 20,
+ COMMANDED_SECONDARY_AIR_STATUS = 5, /* PID 0x12 */
+ NUM_OXYGEN_SENSORS_PRESENT = 6, /* PID 0x13 */
+ RUNTIME_SINCE_ENGINE_START = 7, /* PID 0x1F */
+ DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON = 8, /* PID 0x21 */
+ WARMUPS_SINCE_CODES_CLEARED = 9, /* PID 0x30 */
+ DISTANCE_TRAVELED_SINCE_CODES_CLEARED = 10, /* PID 0x31 */
+ ABSOLUTE_BAROMETRIC_PRESSURE = 11, /* PID 0x33 */
+ CONTROL_MODULE_VOLTAGE = 12, /* PID 0x42 */
+ AMBIENT_AIR_TEMPERATURE = 13, /* PID 0x46 */
+ TIME_WITH_MALFUNCTION_LIGHT_ON = 14, /* PID 0x4D */
+ TIME_SINCE_TROUBLE_CODES_CLEARED = 15, /* PID 0x4E */
+ MAX_FUEL_AIR_EQUIVALENCE_RATIO = 16, /* PID 0x4F */
+ MAX_OXYGEN_SENSOR_VOLTAGE = 17, /* PID 0x4F */
+ MAX_OXYGEN_SENSOR_CURRENT = 18, /* PID 0x4F */
+ MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 19, /* PID 0x4F */
+ MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR = 20, /* PID 0x50 */
/** refer to FuelType for a description of this value. */
- FUEL_TYPE = 21,
- FUEL_RAIL_ABSOLUTE_PRESSURE = 22,
- ENGINE_OIL_TEMPERATURE = 23,
- DRIVER_DEMAND_PERCENT_TORQUE = 24,
- ENGINE_ACTUAL_PERCENT_TORQUE = 25,
- ENGINE_REFERENCE_PERCENT_TORQUE = 26,
- ENGINE_PERCENT_TORQUE_DATA_IDLE = 27,
- ENGINE_PERCENT_TORQUE_DATA_POINT1 = 28,
- ENGINE_PERCENT_TORQUE_DATA_POINT2 = 29,
- ENGINE_PERCENT_TORQUE_DATA_POINT3 = 30,
- ENGINE_PERCENT_TORQUE_DATA_POINT4 = 31,
+ FUEL_TYPE = 21, /* PID 0x51 */
+ FUEL_RAIL_ABSOLUTE_PRESSURE = 22, /* PID 0x59 */
+ ENGINE_OIL_TEMPERATURE = 23, /* PID 0x5C */
+ DRIVER_DEMAND_PERCENT_TORQUE = 24, /* PID 0x61 */
+ ENGINE_ACTUAL_PERCENT_TORQUE = 25, /* PID 0x62 */
+ ENGINE_REFERENCE_PERCENT_TORQUE = 26, /* PID 0x63 */
+ ENGINE_PERCENT_TORQUE_DATA_IDLE = 27, /* PID 0x64 */
+ ENGINE_PERCENT_TORQUE_DATA_POINT1 = 28, /* PID 0x64 */
+ ENGINE_PERCENT_TORQUE_DATA_POINT2 = 29, /* PID 0x64 */
+ ENGINE_PERCENT_TORQUE_DATA_POINT3 = 30, /* PID 0x64 */
+ ENGINE_PERCENT_TORQUE_DATA_POINT4 = 31, /* PID 0x64 */
LAST_SYSTEM_INDEX = ENGINE_PERCENT_TORQUE_DATA_POINT4,
};
@@ -427,79 +441,81 @@
* This enum provides the canonical mapping for sensor properties that have a floating-point value.
* The ordering of the values is taken from the OBD2 specification.
* Any value greater than the last reserved index is available to vendors to map their extensions.
+ * While these values do not directly map to SAE J1979 PIDs, an equivalence is listed next
+ * to each one to aid implementors.
*/
enum DiagnosticFloatSensorIndex : int32_t {
- CALCULATED_ENGINE_LOAD = 0,
- ENGINE_COOLANT_TEMPERATURE = 1,
- SHORT_TERM_FUEL_TRIM_BANK1 = 2,
- LONG_TERM_FUEL_TRIM_BANK1 = 3,
- SHORT_TERM_FUEL_TRIM_BANK2 = 4,
- LONG_TERM_FUEL_TRIM_BANK2 = 5,
- FUEL_PRESSURE = 6,
- INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 7,
- ENGINE_RPM = 8,
- VEHICLE_SPEED = 9,
- TIMING_ADVANCE = 10,
- MAF_AIR_FLOW_RATE = 11,
- THROTTLE_POSITION = 12,
- OXYGEN_SENSOR1_VOLTAGE = 13,
- OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM = 14,
- OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO = 15,
- OXYGEN_SENSOR2_VOLTAGE = 16,
- OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM = 17,
- OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO = 18,
- OXYGEN_SENSOR3_VOLTAGE = 19,
- OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM = 20,
- OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO = 21,
- OXYGEN_SENSOR4_VOLTAGE = 22,
- OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM = 23,
- OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO = 24,
- OXYGEN_SENSOR5_VOLTAGE = 25,
- OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM = 26,
- OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO = 27,
- OXYGEN_SENSOR6_VOLTAGE = 28,
- OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM = 29,
- OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO = 30,
- OXYGEN_SENSOR7_VOLTAGE = 31,
- OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM = 32,
- OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO = 33,
- OXYGEN_SENSOR8_VOLTAGE = 34,
- OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM = 35,
- OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO = 36,
- FUEL_RAIL_PRESSURE = 37,
- FUEL_RAIL_GAUGE_PRESSURE = 38,
- COMMANDED_EXHAUST_GAS_RECIRCULATION = 39,
- EXHAUST_GAS_RECIRCULATION_ERROR = 40,
- COMMANDED_EVAPORATIVE_PURGE = 41,
- FUEL_TANK_LEVEL_INPUT = 42,
- EVAPORATION_SYSTEM_VAPOR_PRESSURE = 43,
- CATALYST_TEMPERATURE_BANK1_SENSOR1 = 44,
- CATALYST_TEMPERATURE_BANK2_SENSOR1 = 45,
- CATALYST_TEMPERATURE_BANK1_SENSOR2 = 46,
- CATALYST_TEMPERATURE_BANK2_SENSOR2 = 47,
- ABSOLUTE_LOAD_VALUE = 48,
- FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO = 49,
- RELATIVE_THROTTLE_POSITION = 50,
- ABSOLUTE_THROTTLE_POSITION_B = 51,
- ABSOLUTE_THROTTLE_POSITION_C = 52,
- ACCELERATOR_PEDAL_POSITION_D = 53,
- ACCELERATOR_PEDAL_POSITION_E = 54,
- ACCELERATOR_PEDAL_POSITION_F = 55,
- COMMANDED_THROTTLE_ACTUATOR = 56,
- ETHANOL_FUEL_PERCENTAGE = 57,
- ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 58,
- SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 59,
- SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 60,
- SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 61,
- SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 62,
- LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 63,
- LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 64,
- LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 65,
- LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 66,
- RELATIVE_ACCELERATOR_PEDAL_POSITION = 67,
- HYBRID_BATTERY_PACK_REMAINING_LIFE = 68,
- FUEL_INJECTION_TIMING = 69,
- ENGINE_FUEL_RATE = 70,
+ CALCULATED_ENGINE_LOAD = 0, /* PID 0x04 */
+ ENGINE_COOLANT_TEMPERATURE = 1, /* PID 0x05 */
+ SHORT_TERM_FUEL_TRIM_BANK1 = 2, /* PID 0x06 */
+ LONG_TERM_FUEL_TRIM_BANK1 = 3, /* PID 0x07 */
+ SHORT_TERM_FUEL_TRIM_BANK2 = 4, /* PID 0x08 */
+ LONG_TERM_FUEL_TRIM_BANK2 = 5, /* PID 0x09 */
+ FUEL_PRESSURE = 6, /* PID 0x0A */
+ INTAKE_MANIFOLD_ABSOLUTE_PRESSURE = 7, /* PID 0x0B */
+ ENGINE_RPM = 8, /* PID 0x0C */
+ VEHICLE_SPEED = 9, /* PID 0x0D */
+ TIMING_ADVANCE = 10, /* PID 0x0E */
+ MAF_AIR_FLOW_RATE = 11, /* PID 0x10 */
+ THROTTLE_POSITION = 12, /* PID 0x11 */
+ OXYGEN_SENSOR1_VOLTAGE = 13, /* PID 0x14 */
+ OXYGEN_SENSOR1_SHORT_TERM_FUEL_TRIM = 14, /* PID 0x14 */
+ OXYGEN_SENSOR1_FUEL_AIR_EQUIVALENCE_RATIO = 15, /* PID 0x24 */
+ OXYGEN_SENSOR2_VOLTAGE = 16, /* PID 0x15 */
+ OXYGEN_SENSOR2_SHORT_TERM_FUEL_TRIM = 17, /* PID 0x15 */
+ OXYGEN_SENSOR2_FUEL_AIR_EQUIVALENCE_RATIO = 18, /* PID 0x25 */
+ OXYGEN_SENSOR3_VOLTAGE = 19, /* PID 0x16 */
+ OXYGEN_SENSOR3_SHORT_TERM_FUEL_TRIM = 20, /* PID 0x16 */
+ OXYGEN_SENSOR3_FUEL_AIR_EQUIVALENCE_RATIO = 21, /* PID 0x26 */
+ OXYGEN_SENSOR4_VOLTAGE = 22, /* PID 0x17 */
+ OXYGEN_SENSOR4_SHORT_TERM_FUEL_TRIM = 23, /* PID 0x17 */
+ OXYGEN_SENSOR4_FUEL_AIR_EQUIVALENCE_RATIO = 24, /* PID 0x27 */
+ OXYGEN_SENSOR5_VOLTAGE = 25, /* PID 0x18 */
+ OXYGEN_SENSOR5_SHORT_TERM_FUEL_TRIM = 26, /* PID 0x18 */
+ OXYGEN_SENSOR5_FUEL_AIR_EQUIVALENCE_RATIO = 27, /* PID 0x28 */
+ OXYGEN_SENSOR6_VOLTAGE = 28, /* PID 0x19 */
+ OXYGEN_SENSOR6_SHORT_TERM_FUEL_TRIM = 29, /* PID 0x19 */
+ OXYGEN_SENSOR6_FUEL_AIR_EQUIVALENCE_RATIO = 30, /* PID 0x29 */
+ OXYGEN_SENSOR7_VOLTAGE = 31, /* PID 0x1A */
+ OXYGEN_SENSOR7_SHORT_TERM_FUEL_TRIM = 32, /* PID 0x1A */
+ OXYGEN_SENSOR7_FUEL_AIR_EQUIVALENCE_RATIO = 33, /* PID 0x2A */
+ OXYGEN_SENSOR8_VOLTAGE = 34, /* PID 0x1B */
+ OXYGEN_SENSOR8_SHORT_TERM_FUEL_TRIM = 35, /* PID 0x1B */
+ OXYGEN_SENSOR8_FUEL_AIR_EQUIVALENCE_RATIO = 36, /* PID 0x2B */
+ FUEL_RAIL_PRESSURE = 37, /* PID 0x22 */
+ FUEL_RAIL_GAUGE_PRESSURE = 38, /* PID 0x23 */
+ COMMANDED_EXHAUST_GAS_RECIRCULATION = 39, /* PID 0x2C */
+ EXHAUST_GAS_RECIRCULATION_ERROR = 40, /* PID 0x2D */
+ COMMANDED_EVAPORATIVE_PURGE = 41, /* PID 0x2E */
+ FUEL_TANK_LEVEL_INPUT = 42, /* PID 0x2F */
+ EVAPORATION_SYSTEM_VAPOR_PRESSURE = 43, /* PID 0x32 */
+ CATALYST_TEMPERATURE_BANK1_SENSOR1 = 44, /* PID 0x3C */
+ CATALYST_TEMPERATURE_BANK2_SENSOR1 = 45, /* PID 0x3D */
+ CATALYST_TEMPERATURE_BANK1_SENSOR2 = 46, /* PID 0x3E */
+ CATALYST_TEMPERATURE_BANK2_SENSOR2 = 47, /* PID 0x3F */
+ ABSOLUTE_LOAD_VALUE = 48, /* PID 0x43 */
+ FUEL_AIR_COMMANDED_EQUIVALENCE_RATIO = 49, /* PID 0x44 */
+ RELATIVE_THROTTLE_POSITION = 50, /* PID 0x45 */
+ ABSOLUTE_THROTTLE_POSITION_B = 51, /* PID 0x47 */
+ ABSOLUTE_THROTTLE_POSITION_C = 52, /* PID 0x48 */
+ ACCELERATOR_PEDAL_POSITION_D = 53, /* PID 0x49 */
+ ACCELERATOR_PEDAL_POSITION_E = 54, /* PID 0x4A */
+ ACCELERATOR_PEDAL_POSITION_F = 55, /* PID 0x4B */
+ COMMANDED_THROTTLE_ACTUATOR = 56, /* PID 0x4C */
+ ETHANOL_FUEL_PERCENTAGE = 57,/* PID 0x52 */
+ ABSOLUTE_EVAPORATION_SYSTEM_VAPOR_PRESSURE = 58, /* PID 0x53 */
+ SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 59, /* PID 0x55 */
+ SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 60, /* PID 0x57 */
+ SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 61,/* PID 0x55 */
+ SHORT_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 62, /* PID 0x57 */
+ LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK1 = 63, /* PID 0x56 */
+ LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK2 = 64, /* PID 0x58 */
+ LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK3 = 65, /* PID 0x56 */
+ LONG_TERM_SECONDARY_OXYGEN_SENSOR_TRIM_BANK4 = 66, /* PID 0x58 */
+ RELATIVE_ACCELERATOR_PEDAL_POSITION = 67, /* PID 0x5A */
+ HYBRID_BATTERY_PACK_REMAINING_LIFE = 68, /* PID 0x5B */
+ FUEL_INJECTION_TIMING = 69, /* PID 0x5D */
+ ENGINE_FUEL_RATE = 70, /* PID 0x5E */
LAST_SYSTEM_INDEX = ENGINE_FUEL_RATE,
};
diff --git a/biometrics/fingerprint/2.1/Android.bp b/biometrics/fingerprint/2.1/Android.bp
index c16fd78..3898da5 100644
--- a/biometrics/fingerprint/2.1/Android.bp
+++ b/biometrics/fingerprint/2.1/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.biometrics.fingerprint@2.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.biometrics.fingerprint@2.1_genc++"],
generated_headers: ["android.hardware.biometrics.fingerprint@2.1_genc++_headers"],
export_generated_headers: ["android.hardware.biometrics.fingerprint@2.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/biometrics/fingerprint/2.1/vts/functional/Android.bp b/biometrics/fingerprint/2.1/vts/functional/Android.bp
index 27b7157..bee3657 100644
--- a/biometrics/fingerprint/2.1/vts/functional/Android.bp
+++ b/biometrics/fingerprint/2.1/vts/functional/Android.bp
@@ -16,21 +16,8 @@
cc_test {
name: "VtsHalBiometricsFingerprintV2_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalBiometricsFingerprintV2_1TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "libhidltransport",
- "libhardware",
- "libhidlbase",
- "liblog",
- "libutils",
- "android.hardware.biometrics.fingerprint@2.1",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.biometrics.fingerprint@2.1"],
}
diff --git a/bluetooth/1.0/Android.bp b/bluetooth/1.0/Android.bp
index 34d1648..c883c59 100644
--- a/bluetooth/1.0/Android.bp
+++ b/bluetooth/1.0/Android.bp
@@ -53,6 +53,9 @@
generated_headers: ["android.hardware.bluetooth@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.bluetooth@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/bluetooth/1.0/default/OWNERS b/bluetooth/1.0/default/OWNERS
new file mode 100644
index 0000000..5df5bfe
--- /dev/null
+++ b/bluetooth/1.0/default/OWNERS
@@ -0,0 +1,3 @@
+eisenbach@google.com
+mylesgw@google.com
+pavlin@google.com
diff --git a/bluetooth/1.0/default/vendor_interface.cc b/bluetooth/1.0/default/vendor_interface.cc
index ffc283e..15b6c74 100644
--- a/bluetooth/1.0/default/vendor_interface.cc
+++ b/bluetooth/1.0/default/vendor_interface.cc
@@ -226,6 +226,11 @@
int fd_list[CH_MAX] = {0};
int fd_count = lib_interface_->op(BT_VND_OP_USERIAL_OPEN, &fd_list);
+ if (fd_count < 1 || fd_count > CH_MAX - 1) {
+ ALOGE("%s: fd_count %d is invalid!", __func__, fd_count);
+ return false;
+ }
+
for (int i = 0; i < fd_count; i++) {
if (fd_list[i] == INVALID_FD) {
ALOGE("%s: fd %d is invalid!", __func__, fd_list[i]);
diff --git a/bluetooth/1.0/vts/functional/Android.bp b/bluetooth/1.0/vts/functional/Android.bp
index cd2be44..2e60588 100644
--- a/bluetooth/1.0/vts/functional/Android.bp
+++ b/bluetooth/1.0/vts/functional/Android.bp
@@ -16,24 +16,10 @@
cc_test {
name: "VtsHalBluetoothV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalBluetoothV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.bluetooth@1.0",
- ],
static_libs: [
- "VtsHalHidlTargetTestBase",
+ "android.hardware.bluetooth@1.0",
"libbluetooth-types",
],
- cflags: [
- "-O0",
- "-g",
- ],
}
diff --git a/boot/1.0/Android.bp b/boot/1.0/Android.bp
index e138601..4e4efa3 100644
--- a/boot/1.0/Android.bp
+++ b/boot/1.0/Android.bp
@@ -46,6 +46,9 @@
generated_headers: ["android.hardware.boot@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.boot@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/boot/1.0/vts/functional/Android.bp b/boot/1.0/vts/functional/Android.bp
index 5b14f54..2ef89f3 100644
--- a/boot/1.0/vts/functional/Android.bp
+++ b/boot/1.0/vts/functional/Android.bp
@@ -16,20 +16,7 @@
cc_test {
name: "VtsHalBootV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalBootV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libnativehelper",
- "libutils",
- "android.hardware.boot@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.boot@1.0"],
}
diff --git a/broadcastradio/1.0/Android.bp b/broadcastradio/1.0/Android.bp
index f0c4b22..5b8e239 100644
--- a/broadcastradio/1.0/Android.bp
+++ b/broadcastradio/1.0/Android.bp
@@ -60,13 +60,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.broadcastradio@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.broadcastradio@1.0_genc++"],
generated_headers: ["android.hardware.broadcastradio@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.broadcastradio@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/broadcastradio/1.0/vts/functional/Android.bp b/broadcastradio/1.0/vts/functional/Android.bp
index cf52f49..f31a2dc 100644
--- a/broadcastradio/1.0/vts/functional/Android.bp
+++ b/broadcastradio/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalBroadcastradioV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalBroadcastradioV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.broadcastradio@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.broadcastradio@1.0"],
}
diff --git a/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp b/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp
index fa0f030..fd048db 100644
--- a/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp
+++ b/broadcastradio/1.0/vts/functional/VtsHalBroadcastradioV1_0TargetTest.cpp
@@ -229,7 +229,18 @@
bool getProperties();
bool openTuner();
bool checkAntenna();
- BandConfig& getBand(unsigned idx);
+
+ /**
+ * Retrieves AM/FM band configuration from module properties.
+ *
+ * The configuration may not exist: if radio type is other than AM/FM
+ * or provided index is out of bounds.
+ * In such case, empty configuration is returned.
+ *
+ * @param idx Band index to retrieve.
+ * @return Band configuration reference.
+ */
+ const BandConfig& getBand(unsigned idx);
static const nsecs_t kConnectCallbacktimeoutNs = seconds_to_nanoseconds(1);
static const nsecs_t kConfigCallbacktimeoutNs = seconds_to_nanoseconds(10);
@@ -349,7 +360,7 @@
return ((halResult == Result::OK) && (halConfig.antennaConnected == true));
}
-BandConfig& BroadcastRadioHidlTest::getBand(unsigned idx) {
+const BandConfig& BroadcastRadioHidlTest::getBand(unsigned idx) {
static BandConfig dummyBandConfig = {};
if (radioClass == Class::AM_FM) {
EXPECT_GT(mHalProperties.bands.size(), idx);
@@ -419,8 +430,12 @@
auto openCb = [&](Result result, const sp<ITuner>&) { halResult = result; };
auto hidlReturn = mRadio->openTuner(getBand(0), true, mTunerCallback, openCb);
EXPECT_TRUE(hidlReturn.isOk());
- if (halResult == Result::INVALID_STATE) {
- EXPECT_TRUE(waitForCallback(kConfigCallbacktimeoutNs));
+ if (halResult == Result::OK) {
+ if (radioClass == Class::AM_FM) {
+ EXPECT_TRUE(waitForCallback(kConfigCallbacktimeoutNs));
+ }
+ } else {
+ EXPECT_EQ(Result::INVALID_STATE, halResult);
}
}
@@ -432,6 +447,9 @@
* - the methods return 0 (no error)
* - the configuration callback is received within kConfigCallbacktimeoutNs ns
* - the configuration read back from HAl has the same class Id
+ *
+ * Skipped for other radio classes than AM/FM, because setConfiguration
+ * applies only for these bands.
*/
TEST_P(BroadcastRadioHidlTest, SetAndGetConfiguration) {
if (radioClass != Class::AM_FM) skipped = true;
@@ -467,6 +485,9 @@
* Verifies that:
* - the methods returns INVALID_ARGUMENTS on invalid arguments
* - the method recovers and succeeds after passing correct arguments
+ *
+ * Skipped for other radio classes than AM/FM, because setConfiguration
+ * applies only for these bands.
*/
TEST_P(BroadcastRadioHidlTest, SetConfigurationFails) {
if (radioClass != Class::AM_FM) skipped = true;
@@ -531,6 +552,9 @@
* - the method returns 0 (no error)
* - the tuned callback is received within kTuneCallbacktimeoutNs ns
* - skipping sub-channel or not does not fail the call
+ *
+ * Skipped for other radio classes than AM/FM, because step is not possible
+ * on DAB nor satellite.
*/
TEST_P(BroadcastRadioHidlTest, Step) {
if (radioClass != Class::AM_FM) skipped = true;
@@ -559,6 +583,9 @@
* - the HAL implements the methods
* - the methods return 0 (no error)
* - the tuned callback is received within kTuneCallbacktimeoutNs ns after tune()
+ *
+ * Skipped for other radio classes than AM/FM, because tune to frequency
+ * is not possible on DAB nor satellite.
*/
TEST_P(BroadcastRadioHidlTest, TuneAndGetProgramInformationAndCancel) {
if (radioClass != Class::AM_FM) skipped = true;
@@ -617,6 +644,9 @@
* Verifies that:
* - the method returns INVALID_ARGUMENTS when applicable
* - the method recovers and succeeds after passing correct arguments
+ *
+ * Skipped for other radio classes than AM/FM, because tune to frequency
+ * is not possible on DAB nor satellite.
*/
TEST_P(BroadcastRadioHidlTest, TuneFailsOutOfBounds) {
if (radioClass != Class::AM_FM) skipped = true;
diff --git a/broadcastradio/1.1/Android.bp b/broadcastradio/1.1/Android.bp
index 3b50416..12e23d6 100644
--- a/broadcastradio/1.1/Android.bp
+++ b/broadcastradio/1.1/Android.bp
@@ -60,13 +60,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.broadcastradio@1.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.broadcastradio@1.1_genc++"],
generated_headers: ["android.hardware.broadcastradio@1.1_genc++_headers"],
export_generated_headers: ["android.hardware.broadcastradio@1.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/broadcastradio/1.1/IBroadcastRadio.hal b/broadcastradio/1.1/IBroadcastRadio.hal
index 9bde361..dadba2a 100644
--- a/broadcastradio/1.1/IBroadcastRadio.hal
+++ b/broadcastradio/1.1/IBroadcastRadio.hal
@@ -31,19 +31,34 @@
* Fetch image from radio module.
*
* This call is meant to make V1_0::MetaData lightweight - instead of
- * passing image data blob in MetadataType.RAW field, only identifier is
- * passed, so the client may cache images or even not fetch them.
+ * passing an image data blob in the MetadataType.RAW field, the HAL
+ * implementation only passes the identifier, so the client may cache images
+ * or even not fetch them.
*
- * Identifier may be any arbitrary number - sequential, sha256 prefix,
+ * The identifier may be any arbitrary number - sequential, sha256 prefix,
* or any other unique value selected by the vendor.
*
* The data should be a valid PNG, JPEG, GIF or BMP file.
- * Invalid format must be handled gracefully as if the image was missing.
+ * Image data with an invalid format must be handled gracefully in the same
+ * way as a missing image.
+ *
+ * The image identifier may become invalid after some time from passing it
+ * with metadata struct (due to resource cleanup at the HAL implementation).
+ * However, it must remain valid for a currently tuned program at least
+ * until currentProgramInfoChanged or programListChanged is called and
+ * metadata changes for the current program.
+ *
+ * There is still a race condition possible (if the HAL deletes the old
+ * image immediately after notifying about the new one) between
+ * currentProgramInfoChanged callback propagating through the framework and
+ * the HAL implementation removing previous image. In such case, client
+ * application may expect the new currentProgramInfoChanged callback with
+ * updated image identifier.
*
* @param id Identifier of an image;
* value of 0 is reserved and should be treated as invalid image.
* @return image A binary blob with image data
- * or zero-length vector if identifier doesn't exists.
+ * or a zero-length vector if identifier doesn't exist.
*/
getImage(int32_t id) generates (vec<uint8_t> image);
};
diff --git a/broadcastradio/1.1/IBroadcastRadioFactory.hal b/broadcastradio/1.1/IBroadcastRadioFactory.hal
index fce1cc0..edf78ff 100644
--- a/broadcastradio/1.1/IBroadcastRadioFactory.hal
+++ b/broadcastradio/1.1/IBroadcastRadioFactory.hal
@@ -19,8 +19,10 @@
import @1.0::IBroadcastRadioFactory;
/**
- * To use 1.1 features you must cast specific interfaces after being returned from 1.0 HAL,
- * for example V1_1::ITuner::castFrom() after retrieving it from IBroadcastRadio::openTuner().
+ * To use 1.1 features you must cast specific interfaces returned from the
+ * 1.0 HAL. For example V1_0::IBroadcastRadio::openTuner() returns V1_0::ITuner,
+ * which can be cast with V1_1::ITuner::castFrom() call.
+ *
* The 1.1 server must always return the 1.1 version of specific interface.
*/
interface IBroadcastRadioFactory extends @1.0::IBroadcastRadioFactory {
diff --git a/broadcastradio/1.1/ITuner.hal b/broadcastradio/1.1/ITuner.hal
index cc2e58d..b20c5f4 100644
--- a/broadcastradio/1.1/ITuner.hal
+++ b/broadcastradio/1.1/ITuner.hal
@@ -39,7 +39,7 @@
* INVALID_ARGUMENTS if invalid arguments are passed.
* NOT_INITIALIZED if another error occurs.
*/
- tune_1_1(ProgramSelector program) generates (Result result);
+ tuneByProgramSelector(ProgramSelector program) generates (Result result);
/**
* Cancels announcement.
@@ -106,10 +106,8 @@
* This call does not trigger actual scan, but operates on the list cached
* internally at the driver level.
*
- * @param filter vendor-specific filter for the stations to be retrieved.
- * An empty string MUST result in full list.
- * Client application MUST verify vendor/product name
- * before setting this parameter to anything else.
+ * @param vendorFilter vendor-specific filter for the stations to be retrieved.
+ * An empty vector MUST result in full list for a given tuner.
* @return result OK if the list was successfully retrieved.
* INVALID_ARGUMENTS if invalid arguments are passed
* NOT_READY if the scan is in progress.
@@ -118,23 +116,10 @@
* NOT_INITIALIZED if any other error occurs.
* @return programList List of stations available for user.
*/
- getProgramList(string filter)
+ getProgramList(vec<VendorKeyValue> vendorFilter)
generates (ProgramListResult result, vec<ProgramInfo> programList);
/**
- * Checks, if the analog playback is forced, see setAnalogForced.
- *
- * The isForced value is only valid if result was OK.
- *
- * @return result OK if the call succeeded and isForced is valid.
- * INVALID_STATE if the switch is not supported at current
- * configuration.
- * NOT_INITIALIZED if any other error occurs.
- * @return isForced true if analog is forced, false otherwise.
- */
- isAnalogForced() generates (Result result, bool isForced);
-
- /**
* Forces the analog playback for the supporting radio technology.
*
* User may disable digital playback for FM HD Radio or hybrid FM/DAB with
@@ -150,4 +135,17 @@
* NOT_INITIALIZED if any other error occurs.
*/
setAnalogForced(bool isForced) generates (Result result);
+
+ /**
+ * Checks, if the analog playback is forced, see setAnalogForced.
+ *
+ * The isForced value is only valid if result was OK.
+ *
+ * @return result OK if the call succeeded and isForced is valid.
+ * INVALID_STATE if the switch is not supported at current
+ * configuration.
+ * NOT_INITIALIZED if any other error occurs.
+ * @return isForced true if analog is forced, false otherwise.
+ */
+ isAnalogForced() generates (Result result, bool isForced);
};
diff --git a/broadcastradio/1.1/ITunerCallback.hal b/broadcastradio/1.1/ITunerCallback.hal
index b1c5b01..8bf5b7f 100644
--- a/broadcastradio/1.1/ITunerCallback.hal
+++ b/broadcastradio/1.1/ITunerCallback.hal
@@ -29,9 +29,13 @@
* Method called by the HAL when a tuning operation completes
* following a step(), scan() or tune() command.
*
- * This callback supersedes V1_0::tuneComplete. For performance reasons,
- * the 1.0 callback may not be called when HAL implementation detects 1.1
- * client (by casting V1_0::ITunerCallback to V1_1::ITunerCallback).
+ * This callback supersedes V1_0::tuneComplete.
+ * The 1.0 callback must not be called when HAL implementation detects
+ * 1.1 client (by casting V1_0::ITunerCallback to V1_1::ITunerCallback).
+ *
+ * In case of success, currentProgramInfoChanged must be called too.
+ * It means the success case may (or may not) be handled by the client in
+ * currentProgramInfoChanged, instead of here.
*
* @param result OK if tune succeeded or TIMEOUT in case of time out.
* @param selector A ProgramSelector structure describing the tuned station.
@@ -39,17 +43,6 @@
oneway tuneComplete_1_1(Result result, ProgramSelector selector);
/**
- * Method called by the HAL when a frequency switch occurs.
- *
- * This callback supersedes V1_0::afSwitch. For performance reasons,
- * the 1.0 callback may not be called when HAL implementation detects 1.1
- * client (by casting V1_0::ITunerCallback to V1_1::ITunerCallback).
- *
- * @param selector A ProgramSelector structure describing the tuned station.
- */
- oneway afSwitch_1_1(ProgramSelector selector);
-
- /**
* Called by the HAL when background scan feature becomes available or not.
*
* @param isAvailable true, if the tuner turned temporarily background-
@@ -73,6 +66,9 @@
* call it immediately, ie. it may wait for a short time to accumulate
* multiple list change notifications into a single event.
*
+ * This callback is only for notifying about insertions and deletions,
+ * not about metadata changes.
+ *
* It may be triggered either by an explicitly issued background scan,
* or a scan issued by the device internally.
*
@@ -89,10 +85,12 @@
*
* This may be called together with tuneComplete_1_1 or afSwitch_1_1.
*
- * This callback supersedes V1_0::tuneComplete, V1_0::afSwitch and
- * newMetadata. For performance reasons, these callbacks may not be called
- * when HAL implementation detects 1.1 client (by casting
- * V1_0::ITunerCallback to V1_1::ITunerCallback).
+ * This callback supersedes V1_0::newMetadata and V1_0::afSwitch;
+ * partly V1_0::tuneComplete.
+ * 1.0 callbacks must not be called when HAL implementation detects
+ * 1.1 client (by casting V1_0::ITunerCallback to V1_1::ITunerCallback).
+ *
+ * @param info current program information
*/
- oneway programInfoChanged();
+ oneway currentProgramInfoChanged(ProgramInfo info);
};
diff --git a/broadcastradio/1.1/default/BroadcastRadio.cpp b/broadcastradio/1.1/default/BroadcastRadio.cpp
index 17ec780..38b4b99 100644
--- a/broadcastradio/1.1/default/BroadcastRadio.cpp
+++ b/broadcastradio/1.1/default/BroadcastRadio.cpp
@@ -45,16 +45,28 @@
"Digital radio mock",
{ // amFmBands
AmFmBandConfig({
+ Band::AM,
+ 153, // lowerLimit
+ 26100, // upperLimit
+ {5, 9, 10}, // spacings
+ }),
+ AmFmBandConfig({
+ Band::FM,
+ 65800, // lowerLimit
+ 108000, // upperLimit
+ {10, 100, 200}, // spacings
+ }),
+ AmFmBandConfig({
Band::AM_HD,
- 540, // lowerLimit
- 1610, // upperLimit
- 10, // spacing
+ 153, // lowerLimit
+ 26100, // upperLimit
+ {5, 9, 10}, // spacings
}),
AmFmBandConfig({
Band::FM_HD,
87900, // lowerLimit
107900, // upperLimit
- 200, // spacing
+ {200}, // spacings
}),
},
})},
@@ -91,17 +103,19 @@
prop10.numAudioSources = 1;
prop10.supportsCapture = false;
prop11.supportsBackgroundScanning = false;
- prop11.supportedProgramTypes = vector<uint32_t>({
+ prop11.supportedProgramTypes = hidl_vec<uint32_t>({
static_cast<uint32_t>(ProgramType::AM), static_cast<uint32_t>(ProgramType::FM),
static_cast<uint32_t>(ProgramType::AM_HD), static_cast<uint32_t>(ProgramType::FM_HD),
});
- prop11.supportedIdentifierTypes = vector<uint32_t>({
+ prop11.supportedIdentifierTypes = hidl_vec<uint32_t>({
static_cast<uint32_t>(IdentifierType::AMFM_FREQUENCY),
static_cast<uint32_t>(IdentifierType::RDS_PI),
static_cast<uint32_t>(IdentifierType::HD_STATION_ID_EXT),
static_cast<uint32_t>(IdentifierType::HD_SUBCHANNEL),
});
- prop11.vendorInfo = "dummy";
+ prop11.vendorInfo = hidl_vec<VendorKeyValue>({
+ {"com.google.dummy", "dummy"},
+ });
prop10.bands.resize(mConfig.amFmBands.size());
for (size_t i = 0; i < mConfig.amFmBands.size(); i++) {
@@ -112,14 +126,14 @@
dst.antennaConnected = true;
dst.lowerLimit = src.lowerLimit;
dst.upperLimit = src.upperLimit;
- dst.spacings = vector<uint32_t>({src.spacing});
+ dst.spacings = src.spacings;
- if (src.type == Band::AM) {
+ if (utils::isAm(src.type)) {
dst.ext.am.stereo = true;
- } else if (src.type == Band::FM) {
- dst.ext.fm.deemphasis = Deemphasis::D75;
+ } else if (utils::isFm(src.type)) {
+ dst.ext.fm.deemphasis = static_cast<Deemphasis>(Deemphasis::D50 | Deemphasis::D75);
dst.ext.fm.stereo = true;
- dst.ext.fm.rds = Rds::US;
+ dst.ext.fm.rds = static_cast<Rds>(Rds::WORLD | Rds::US);
dst.ext.fm.ta = true;
dst.ext.fm.af = true;
dst.ext.fm.ea = true;
diff --git a/broadcastradio/1.1/default/BroadcastRadio.h b/broadcastradio/1.1/default/BroadcastRadio.h
index 71e3be8..a96a2ab 100644
--- a/broadcastradio/1.1/default/BroadcastRadio.h
+++ b/broadcastradio/1.1/default/BroadcastRadio.h
@@ -31,7 +31,7 @@
V1_0::Band type;
uint32_t lowerLimit; // kHz
uint32_t upperLimit; // kHz
- uint32_t spacing; // kHz
+ std::vector<uint32_t> spacings; // kHz
};
struct ModuleConfig {
diff --git a/broadcastradio/1.1/default/OWNERS b/broadcastradio/1.1/default/OWNERS
new file mode 100644
index 0000000..0c27b71
--- /dev/null
+++ b/broadcastradio/1.1/default/OWNERS
@@ -0,0 +1,4 @@
+# Automotive team
+egranata@google.com
+keunyoung@google.com
+twasilczyk@google.com
diff --git a/broadcastradio/1.1/default/Tuner.cpp b/broadcastradio/1.1/default/Tuner.cpp
index f48a8db..9a34cb1 100644
--- a/broadcastradio/1.1/default/Tuner.cpp
+++ b/broadcastradio/1.1/default/Tuner.cpp
@@ -83,7 +83,7 @@
mAmfmConfig.antennaConnected = true;
mCurrentProgram = utils::make_selector(mAmfmConfig.type, mAmfmConfig.lowerLimit);
- if (mAmfmConfig.type == Band::FM_HD || mAmfmConfig.type == Band::FM) {
+ if (utils::isFm(mAmfmConfig.type)) {
mVirtualRadio = std::ref(getFmRadio());
} else {
mVirtualRadio = std::ref(getAmRadio());
@@ -144,6 +144,7 @@
mCallback->tuneComplete(Result::OK, mCurrentProgramInfo.base);
} else {
mCallback1_1->tuneComplete_1_1(Result::OK, mCurrentProgramInfo.selector);
+ mCallback1_1->currentProgramInfoChanged(mCurrentProgramInfo);
}
}
@@ -214,8 +215,10 @@
return Result::NOT_INITIALIZED;
}
- ALOGW_IF(!mIsAmfmConfigSet, "AM/FM config not set");
- if (!mIsAmfmConfigSet) return Result::INVALID_STATE;
+ if (!mIsAmfmConfigSet) {
+ ALOGW("AM/FM config not set");
+ return Result::INVALID_STATE;
+ }
mIsTuneCompleted = false;
auto task = [this, direction]() {
@@ -248,22 +251,34 @@
lock_guard<mutex> lk(mMut);
band = mAmfmConfig.type;
}
- return tune_1_1(utils::make_selector(band, channel, subChannel));
+ return tuneByProgramSelector(utils::make_selector(band, channel, subChannel));
}
-Return<Result> Tuner::tune_1_1(const ProgramSelector& sel) {
+Return<Result> Tuner::tuneByProgramSelector(const ProgramSelector& sel) {
ALOGV("%s(%s)", __func__, toString(sel).c_str());
lock_guard<mutex> lk(mMut);
if (mIsClosed) return Result::NOT_INITIALIZED;
- if (utils::isAmFm(utils::getType(mCurrentProgram))) {
- ALOGW_IF(!mIsAmfmConfigSet, "AM/FM config not set");
- if (!mIsAmfmConfigSet) return Result::INVALID_STATE;
+ // checking if ProgramSelector is valid
+ auto programType = utils::getType(sel);
+ if (utils::isAmFm(programType)) {
+ if (!mIsAmfmConfigSet) {
+ ALOGW("AM/FM config not set");
+ return Result::INVALID_STATE;
+ }
auto freq = utils::getId(sel, IdentifierType::AMFM_FREQUENCY);
if (freq < mAmfmConfig.lowerLimit || freq > mAmfmConfig.upperLimit) {
return Result::INVALID_ARGUMENTS;
}
+ } else if (programType == ProgramType::DAB) {
+ if (!utils::hasId(sel, IdentifierType::DAB_SIDECC)) return Result::INVALID_ARGUMENTS;
+ } else if (programType == ProgramType::DRMO) {
+ if (!utils::hasId(sel, IdentifierType::DRMO_SERVICE_ID)) return Result::INVALID_ARGUMENTS;
+ } else if (programType == ProgramType::SXM) {
+ if (!utils::hasId(sel, IdentifierType::SXM_SERVICE_ID)) return Result::INVALID_ARGUMENTS;
+ } else {
+ return Result::INVALID_ARGUMENTS;
}
mIsTuneCompleted = false;
@@ -322,8 +337,9 @@
return ProgramListResult::UNAVAILABLE;
}
-Return<void> Tuner::getProgramList(const hidl_string& filter, getProgramList_cb _hidl_cb) {
- ALOGV("%s(%s)", __func__, filter.c_str());
+Return<void> Tuner::getProgramList(const hidl_vec<VendorKeyValue>& vendorFilter,
+ getProgramList_cb _hidl_cb) {
+ ALOGV("%s(%s)", __func__, toString(vendorFilter).substr(0, 100).c_str());
lock_guard<mutex> lk(mMut);
if (mIsClosed) {
_hidl_cb(ProgramListResult::NOT_INITIALIZED, {});
@@ -336,6 +352,15 @@
return {};
}
+Return<Result> Tuner::setAnalogForced(bool isForced) {
+ ALOGV("%s", __func__);
+ lock_guard<mutex> lk(mMut);
+ if (mIsClosed) return Result::NOT_INITIALIZED;
+
+ mIsAnalogForced = isForced;
+ return Result::OK;
+}
+
Return<void> Tuner::isAnalogForced(isAnalogForced_cb _hidl_cb) {
ALOGV("%s", __func__);
lock_guard<mutex> lk(mMut);
@@ -348,15 +373,6 @@
return {};
}
-Return<Result> Tuner::setAnalogForced(bool isForced) {
- ALOGV("%s", __func__);
- lock_guard<mutex> lk(mMut);
- if (mIsClosed) return Result::NOT_INITIALIZED;
-
- mIsAnalogForced = isForced;
- return Result::OK;
-}
-
} // namespace implementation
} // namespace V1_1
} // namespace broadcastradio
diff --git a/broadcastradio/1.1/default/Tuner.h b/broadcastradio/1.1/default/Tuner.h
index c4efe6e..07d3189 100644
--- a/broadcastradio/1.1/default/Tuner.h
+++ b/broadcastradio/1.1/default/Tuner.h
@@ -39,16 +39,16 @@
virtual Return<Result> scan(V1_0::Direction direction, bool skipSubChannel) override;
virtual Return<Result> step(V1_0::Direction direction, bool skipSubChannel) override;
virtual Return<Result> tune(uint32_t channel, uint32_t subChannel) override;
- virtual Return<Result> tune_1_1(const ProgramSelector& program) override;
+ virtual Return<Result> tuneByProgramSelector(const ProgramSelector& program) override;
virtual Return<Result> cancel() override;
virtual Return<Result> cancelAnnouncement() override;
virtual Return<void> getProgramInformation(getProgramInformation_cb _hidl_cb) override;
virtual Return<void> getProgramInformation_1_1(getProgramInformation_1_1_cb _hidl_cb) override;
virtual Return<ProgramListResult> startBackgroundScan() override;
- virtual Return<void> getProgramList(const hidl_string& filter,
+ virtual Return<void> getProgramList(const hidl_vec<VendorKeyValue>& filter,
getProgramList_cb _hidl_cb) override;
- virtual Return<void> isAnalogForced(isAnalogForced_cb _hidl_cb) override;
virtual Return<Result> setAnalogForced(bool isForced) override;
+ virtual Return<void> isAnalogForced(isAnalogForced_cb _hidl_cb) override;
private:
std::mutex mMut;
diff --git a/broadcastradio/1.1/default/VirtualProgram.cpp b/broadcastradio/1.1/default/VirtualProgram.cpp
index 1c2285d..7977391 100644
--- a/broadcastradio/1.1/default/VirtualProgram.cpp
+++ b/broadcastradio/1.1/default/VirtualProgram.cpp
@@ -61,6 +61,11 @@
createDemoBitmap(MetadataKey::ART, halRev),
});
+ info11.vendorInfo = hidl_vec<VendorKeyValue>({
+ {"com.google.dummy", "dummy"},
+ {"com.google.dummy.VirtualProgram", std::to_string(reinterpret_cast<uintptr_t>(this))},
+ });
+
return info11;
}
diff --git a/broadcastradio/1.1/tests/OWNERS b/broadcastradio/1.1/tests/OWNERS
new file mode 100644
index 0000000..aa5ce82
--- /dev/null
+++ b/broadcastradio/1.1/tests/OWNERS
@@ -0,0 +1,8 @@
+# Automotive team
+egranata@google.com
+keunyoung@google.com
+twasilczyk@google.com
+
+# VTS team
+ryanjcampbell@google.com
+yim@google.com
diff --git a/broadcastradio/1.1/types.hal b/broadcastradio/1.1/types.hal
index 4034d8b..8b8fc6f 100644
--- a/broadcastradio/1.1/types.hal
+++ b/broadcastradio/1.1/types.hal
@@ -56,6 +56,24 @@
TRAFFIC_ANNOUNCEMENT = 1 << 3,
};
+/**
+ * A key-value pair for vendor-specific information to be passed as-is through
+ * Android framework to the front-end application.
+ */
+struct VendorKeyValue {
+ /**
+ * Key must be prefixed with unique vendor Java-style namespace,
+ * eg. 'com.somecompany.parameter1'.
+ */
+ string key;
+
+ /**
+ * Value must be passed through the framework without any changes.
+ * Format of this string can vary across vendors.
+ */
+ string value;
+};
+
struct Properties {
@1.0::Properties base;
@@ -89,16 +107,12 @@
vec<uint32_t> supportedIdentifierTypes;
/**
- * Opaque vendor-specific string, to be passed to front-end without changes.
- * Format of this string can vary across vendors.
+ * Vendor-specific information.
*
- * It may be used for extra features, that's not supported by a platform,
- * for example: "preset-slots=6;ultra-hd-capable=false".
- *
- * Front-end application MUST verify vendor/product name from the
- * @1.0::Properties struct before doing any interpretation of this value.
+ * It may be used for extra features, not supported by the platform,
+ * for example: com.me.preset-slots=6; com.me.ultra-hd-capable=false.
*/
- string vendorInfo;
+ vec<VendorKeyValue> vendorInfo;
};
/**
@@ -114,11 +128,14 @@
/**
* Type of a radio technology.
*
+ * VENDOR program types must be opaque to the framework.
+ *
* There are multiple VENDOR program types just to make vendor implementation
* easier with multiple properitary radio technologies. They are treated the
* same by the framework.
*
* All other values are reserved for future use.
+ * Values not matching any enumerated constant must be ignored.
*/
enum ProgramType : uint32_t {
AM = 1, // analogue AM radio (with or without RDS)
@@ -128,10 +145,10 @@
DAB, // Digital audio broadcasting
DRMO, // Digital Radio Mondiale
SXM, // SiriusXM Satellite Radio
- VENDOR1, // Vendor-specific, not synced across devices.
- VENDOR2, // Vendor-specific, not synced across devices.
- VENDOR3, // Vendor-specific, not synced across devices.
- VENDOR4, // Vendor-specific, not synced across devices.
+
+ // Vendor-specific, not synced across devices.
+ VENDOR_START = 1000,
+ VENDOR_END = 1999,
};
/**
@@ -141,10 +158,13 @@
* it for secondary IDs. For example, a satellite program may set AM/FM fallback
* frequency, if a station broadcasts both via satellite and AM/FM.
*
+ * VENDOR identifier types must be opaque to the framework.
+ *
* The value format for each (but VENDOR_PRIMARY) identifier is strictly defined
* to maintain interoperability between devices made by different vendors.
*
* All other values are reserved for future use.
+ * Values not matching any enumerated constant must be ignored.
*/
enum IdentifierType : uint32_t {
AMFM_FREQUENCY = 1, // kHz
@@ -194,12 +214,12 @@
* Primary identifier for vendor-specific radio technology.
* The value format is determined by a vendor.
*
- * It must not be used in any other programType than VENDORx.
+ * It must not be used in any other programType than corresponding VENDOR
+ * type between VENDOR_START and VENDOR_END (eg. identifier type 1015 must
+ * not be used in any program type other than 1015).
*/
- VENDOR1_PRIMARY,
- VENDOR2_PRIMARY,
- VENDOR3_PRIMARY,
- VENDOR4_PRIMARY,
+ VENDOR_PRIMARY_START = ProgramType:VENDOR_START,
+ VENDOR_PRIMARY_END = ProgramType:VENDOR_END,
};
/**
@@ -276,14 +296,10 @@
bitfield<ProgramInfoFlags> flags;
/**
- * Opaque vendor-specific string, to be passed to front-end without changes.
- * Format of this string can vary across vendors.
+ * Vendor-specific information.
*
- * It may be used for extra features, that's not supported by a platform,
- * for example: "paid-service=true;bitrate=320kbps".
- *
- * Front-end application MUST verify vendor/product name from the
- * @1.0::Properties struct before doing any interpretation of this value.
+ * It may be used for extra features, not supported by the platform,
+ * for example: paid-service=true; bitrate=320kbps.
*/
- string vendorInfo;
+ vec<VendorKeyValue> vendorInfo;
};
diff --git a/broadcastradio/1.1/utils/OWNERS b/broadcastradio/1.1/utils/OWNERS
new file mode 100644
index 0000000..0c27b71
--- /dev/null
+++ b/broadcastradio/1.1/utils/OWNERS
@@ -0,0 +1,4 @@
+# Automotive team
+egranata@google.com
+keunyoung@google.com
+twasilczyk@google.com
diff --git a/broadcastradio/1.1/utils/Utils.cpp b/broadcastradio/1.1/utils/Utils.cpp
index 50a407c..4dd6b13 100644
--- a/broadcastradio/1.1/utils/Utils.cpp
+++ b/broadcastradio/1.1/utils/Utils.cpp
@@ -93,11 +93,7 @@
return haveEqualIds(a, b, IdentifierType::SXM_SERVICE_ID);
}
return haveEqualIds(a, b, IdentifierType::SXM_CHANNEL);
- case ProgramType::VENDOR1:
- case ProgramType::VENDOR2:
- case ProgramType::VENDOR3:
- case ProgramType::VENDOR4:
- default:
+ default: // includes all vendor types
ALOGW("Unsupported program type: %s", toString(type).c_str());
return false;
}
@@ -119,6 +115,14 @@
}
}
+bool isAm(const Band band) {
+ return band == Band::AM || band == Band::AM_HD;
+}
+
+bool isFm(const Band band) {
+ return band == Band::FM || band == Band::FM_HD;
+}
+
bool hasId(const ProgramSelector& sel, const IdentifierType type) {
auto itype = static_cast<uint32_t>(type);
if (sel.primaryId.type == itype) return true;
@@ -153,17 +157,12 @@
// we can't use ProgramType::AM_HD or FM_HD, because we don't know HD station ID
ProgramType type;
- switch (band) {
- case Band::AM:
- case Band::AM_HD:
- type = ProgramType::AM;
- break;
- case Band::FM:
- case Band::FM_HD:
- type = ProgramType::FM;
- break;
- default:
- LOG_ALWAYS_FATAL("Unsupported band: %s", toString(band).c_str());
+ if (isAm(band)) {
+ type = ProgramType::AM;
+ } else if (isFm(band)) {
+ type = ProgramType::FM;
+ } else {
+ LOG_ALWAYS_FATAL("Unsupported band: %s", toString(band).c_str());
}
sel.programType = static_cast<uint32_t>(type);
@@ -219,9 +218,9 @@
if (l.lowerLimit != r.lowerLimit) return false;
if (l.upperLimit != r.upperLimit) return false;
if (l.spacings != r.spacings) return false;
- if (l.type == Band::AM || l.type == Band::AM_HD) {
+ if (V1_1::utils::isAm(l.type)) {
return l.ext.am == r.ext.am;
- } else if (l.type == Band::FM || l.type == Band::FM_HD) {
+ } else if (V1_1::utils::isFm(l.type)) {
return l.ext.fm == r.ext.fm;
} else {
ALOGW("Unsupported band config type: %s", toString(l.type).c_str());
diff --git a/broadcastradio/1.1/utils/include/broadcastradio-utils/Utils.h b/broadcastradio/1.1/utils/include/broadcastradio-utils/Utils.h
index 4d69c0a..24c60ee 100644
--- a/broadcastradio/1.1/utils/include/broadcastradio-utils/Utils.h
+++ b/broadcastradio/1.1/utils/include/broadcastradio-utils/Utils.h
@@ -48,6 +48,9 @@
ProgramType getType(const ProgramSelector& sel);
bool isAmFm(const ProgramType type);
+bool isAm(const V1_0::Band band);
+bool isFm(const V1_0::Band band);
+
bool hasId(const ProgramSelector& sel, const IdentifierType type);
/**
diff --git a/broadcastradio/1.1/vts/OWNERS b/broadcastradio/1.1/vts/OWNERS
new file mode 100644
index 0000000..aa5ce82
--- /dev/null
+++ b/broadcastradio/1.1/vts/OWNERS
@@ -0,0 +1,8 @@
+# Automotive team
+egranata@google.com
+keunyoung@google.com
+twasilczyk@google.com
+
+# VTS team
+ryanjcampbell@google.com
+yim@google.com
diff --git a/broadcastradio/1.1/vts/functional/Android.bp b/broadcastradio/1.1/vts/functional/Android.bp
index 6e5c84c..4b93cbc 100644
--- a/broadcastradio/1.1/vts/functional/Android.bp
+++ b/broadcastradio/1.1/vts/functional/Android.bp
@@ -16,28 +16,13 @@
cc_test {
name: "VtsHalBroadcastradioV1_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalBroadcastradioV1_1TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
+ static_libs: [
"android.hardware.broadcastradio@1.0",
"android.hardware.broadcastradio@1.1",
- ],
- static_libs: [
- "VtsHalHidlTargetTestBase",
"android.hardware.broadcastradio@1.1-utils-lib",
"android.hardware.broadcastradio@1.1-vts-utils-lib",
"libgmock",
],
- cflags: [
- "-Wextra",
- "-O0",
- "-g",
- ],
}
diff --git a/broadcastradio/1.1/vts/functional/VtsHalBroadcastradioV1_1TargetTest.cpp b/broadcastradio/1.1/vts/functional/VtsHalBroadcastradioV1_1TargetTest.cpp
index bd2e0a7..a46378e 100644
--- a/broadcastradio/1.1/vts/functional/VtsHalBroadcastradioV1_1TargetTest.cpp
+++ b/broadcastradio/1.1/vts/functional/VtsHalBroadcastradioV1_1TargetTest.cpp
@@ -62,8 +62,13 @@
static constexpr auto kConfigTimeout = 10s;
static constexpr auto kConnectModuleTimeout = 1s;
static constexpr auto kTuneTimeout = 30s;
+static constexpr auto kEventPropagationTimeout = 1s;
static constexpr auto kFullScanTimeout = 1min;
+static constexpr ProgramType kStandardProgramTypes[] = {
+ ProgramType::AM, ProgramType::FM, ProgramType::AM_HD, ProgramType::FM_HD,
+ ProgramType::DAB, ProgramType::DRMO, ProgramType::SXM};
+
static void printSkipped(std::string msg) {
std::cout << "[ SKIPPED ] " << msg << std::endl;
}
@@ -76,7 +81,6 @@
MOCK_METHOD2(tuneComplete, Return<void>(Result, const V1_0::ProgramInfo&));
MOCK_TIMEOUT_METHOD2(tuneComplete_1_1, Return<void>(Result, const ProgramSelector&));
MOCK_METHOD1(afSwitch, Return<void>(const V1_0::ProgramInfo&));
- MOCK_METHOD1(afSwitch_1_1, Return<void>(const ProgramSelector&));
MOCK_METHOD1(antennaStateChange, Return<void>(bool connected));
MOCK_METHOD1(trafficAnnouncement, Return<void>(bool active));
MOCK_METHOD1(emergencyAnnouncement, Return<void>(bool active));
@@ -84,7 +88,7 @@
MOCK_METHOD1(backgroundScanAvailable, Return<void>(bool));
MOCK_TIMEOUT_METHOD1(backgroundScanComplete, Return<void>(ProgramListResult));
MOCK_METHOD0(programListChanged, Return<void>());
- MOCK_METHOD0(programInfoChanged, Return<void>());
+ MOCK_TIMEOUT_METHOD1(currentProgramInfoChanged, Return<void>(const ProgramInfo&));
};
class BroadcastRadioHalTest : public ::testing::VtsHalHidlTargetTestBase,
@@ -265,7 +269,7 @@
// first try...
EXPECT_TIMEOUT_CALL(*mCallback, backgroundScanComplete, ProgramListResult::OK)
.Times(AnyNumber());
- auto hidlResult = mTuner->getProgramList("", getListCb);
+ auto hidlResult = mTuner->getProgramList({}, getListCb);
EXPECT_TRUE(hidlResult.isOk());
if (!hidlResult.isOk()) return false;
@@ -278,7 +282,7 @@
EXPECT_TIMEOUT_CALL_WAIT(*mCallback, backgroundScanComplete, kFullScanTimeout);
// second (last) try...
- hidlResult = mTuner->getProgramList("", getListCb);
+ hidlResult = mTuner->getProgramList({}, getListCb);
EXPECT_TRUE(hidlResult.isOk());
if (!hidlResult.isOk()) return false;
EXPECT_EQ(ProgramListResult::OK, getListResult);
@@ -315,7 +319,8 @@
* - getProgramList either succeeds or returns NOT_STARTED/NOT_READY status;
* - if the program list is NOT_STARTED, startBackgroundScan makes it completed
* within a full scan timeout and the next getProgramList call succeeds;
- * - if the program list is not empty, tune_1_1 call succeeds.
+ * - if the program list is not empty, tuneByProgramSelector call succeeds;
+ * - getProgramInformation_1_1 returns the same selector as returned in tuneComplete_1_1 call.
*/
TEST_P(BroadcastRadioHalTest, TuneFromProgramList) {
if (skipped) return;
@@ -336,16 +341,74 @@
return;
}
+ ProgramInfo infoCb;
ProgramSelector selCb;
EXPECT_CALL(*mCallback, tuneComplete(_, _)).Times(0);
EXPECT_TIMEOUT_CALL(*mCallback, tuneComplete_1_1, Result::OK, _)
.WillOnce(DoAll(SaveArg<1>(&selCb), testing::Return(ByMove(Void()))));
- auto tuneResult = mTuner->tune_1_1(firstProgram.selector);
+ EXPECT_TIMEOUT_CALL(*mCallback, currentProgramInfoChanged, _)
+ .WillOnce(DoAll(SaveArg<0>(&infoCb), testing::Return(ByMove(Void()))));
+ auto tuneResult = mTuner->tuneByProgramSelector(firstProgram.selector);
ASSERT_EQ(Result::OK, tuneResult);
EXPECT_TIMEOUT_CALL_WAIT(*mCallback, tuneComplete_1_1, kTuneTimeout);
+ EXPECT_TIMEOUT_CALL_WAIT(*mCallback, currentProgramInfoChanged, kEventPropagationTimeout);
EXPECT_EQ(firstProgram.selector.primaryId, selCb.primaryId);
+ EXPECT_EQ(infoCb.selector, selCb);
+
+ bool called = false;
+ auto getResult = mTuner->getProgramInformation_1_1([&](Result result, ProgramInfo info) {
+ called = true;
+ EXPECT_EQ(Result::OK, result);
+ EXPECT_EQ(selCb, info.selector);
+ });
+ ASSERT_TRUE(getResult.isOk());
+ ASSERT_TRUE(called);
}
+/**
+ * Test that primary vendor identifier isn't used for standard program types.
+ *
+ * Verifies that:
+ * - tuneByProgramSelector fails when VENDORn_PRIMARY is set as a primary
+ * identifier for program types other than VENDORn.
+ */
+TEST_P(BroadcastRadioHalTest, TuneFailsForPrimaryVendor) {
+ if (skipped) return;
+ ASSERT_TRUE(openTuner());
+
+ for (auto ptype : kStandardProgramTypes) {
+ ALOGD("Checking %s...", toString(ptype).c_str());
+ ProgramSelector sel = {};
+ sel.programType = static_cast<uint32_t>(ptype);
+ sel.primaryId.type = static_cast<uint32_t>(IdentifierType::VENDOR_PRIMARY_START);
+
+ auto tuneResult = mTuner->tuneByProgramSelector(sel);
+ ASSERT_NE(Result::OK, tuneResult);
+ }
+}
+
+/**
+ * Test that tune with unknown program type fails.
+ *
+ * Verifies that:
+ * - tuneByProgramSelector fails with INVALID_ARGUMENT when unknown program type is passed.
+ */
+TEST_P(BroadcastRadioHalTest, TuneFailsForUnknownProgram) {
+ if (skipped) return;
+ ASSERT_TRUE(openTuner());
+
+ // Program type is 1-based, so 0 will be always invalid.
+ ProgramSelector sel = {};
+ auto tuneResult = mTuner->tuneByProgramSelector(sel);
+ ASSERT_EQ(Result::INVALID_ARGUMENTS, tuneResult);
+}
+
+/**
+ * Test cancelling announcement.
+ *
+ * Verifies that:
+ * - cancelAnnouncement succeeds either when there is an announcement or there is none.
+ */
TEST_P(BroadcastRadioHalTest, CancelAnnouncement) {
if (skipped) return;
ASSERT_TRUE(openTuner());
@@ -358,7 +421,7 @@
* Test getImage call with invalid image ID.
*
* Verifies that:
- * - getImage call handles argument 0 gracefully
+ * - getImage call handles argument 0 gracefully.
*/
TEST_P(BroadcastRadioHalTest, GetNoImage) {
if (skipped) return;
@@ -375,8 +438,8 @@
* Test proper image format in metadata.
*
* Verifies that:
- * - all images in metadata are provided out-of-band (by id, not as a binary blob)
- * - images are available for getImage call
+ * - all images in metadata are provided out-of-band (by id, not as a binary blob);
+ * - images are available for getImage call.
*/
TEST_P(BroadcastRadioHalTest, OobImagesOnly) {
if (skipped) return;
@@ -420,7 +483,7 @@
* Test AnalogForced switch.
*
* Verifies that:
- * - setAnalogForced results either with INVALID_STATE, or isAnalogForced replying the same
+ * - setAnalogForced results either with INVALID_STATE, or isAnalogForced replying the same.
*/
TEST_P(BroadcastRadioHalTest, AnalogForcedSwitch) {
if (skipped) return;
diff --git a/broadcastradio/1.1/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h b/broadcastradio/1.1/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h
index fa1114f..b0ce088 100644
--- a/broadcastradio/1.1/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h
+++ b/broadcastradio/1.1/vts/utils/include/broadcastradio-vts-utils/mock-timeout.h
@@ -44,6 +44,14 @@
return ret;
/**
+ * Gmock MOCK_METHOD0 timeout-capable extension.
+ */
+#define MOCK_TIMEOUT_METHOD0(Method, ...) \
+ MOCK_METHOD0(egmock_##Method, __VA_ARGS__); \
+ EGMOCK_TIMEOUT_METHOD_DEF_(Method); \
+ virtual GMOCK_RESULT_(, __VA_ARGS__) Method() { EGMOCK_TIMEOUT_METHOD_BODY_(Method); }
+
+/**
* Gmock MOCK_METHOD1 timeout-capable extension.
*/
#define MOCK_TIMEOUT_METHOD1(Method, ...) \
diff --git a/camera/common/1.0/Android.bp b/camera/common/1.0/Android.bp
index 252d490..ade7260 100644
--- a/camera/common/1.0/Android.bp
+++ b/camera/common/1.0/Android.bp
@@ -32,13 +32,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.camera.common@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.camera.common@1.0_genc++"],
generated_headers: ["android.hardware.camera.common@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.camera.common@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/camera/device/1.0/Android.bp b/camera/device/1.0/Android.bp
index 3ef40c8..b8335f9 100644
--- a/camera/device/1.0/Android.bp
+++ b/camera/device/1.0/Android.bp
@@ -53,13 +53,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.camera.device@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.camera.device@1.0_genc++"],
generated_headers: ["android.hardware.camera.device@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.camera.device@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/camera/device/3.2/Android.bp b/camera/device/3.2/Android.bp
index dbc80ab..24c2151 100644
--- a/camera/device/3.2/Android.bp
+++ b/camera/device/3.2/Android.bp
@@ -53,13 +53,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.camera.device@3.2",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.camera.device@3.2_genc++"],
generated_headers: ["android.hardware.camera.device@3.2_genc++_headers"],
export_generated_headers: ["android.hardware.camera.device@3.2_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/camera/metadata/3.2/Android.bp b/camera/metadata/3.2/Android.bp
index 707b521..3c4b5e9 100644
--- a/camera/metadata/3.2/Android.bp
+++ b/camera/metadata/3.2/Android.bp
@@ -32,13 +32,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.camera.metadata@3.2",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.camera.metadata@3.2_genc++"],
generated_headers: ["android.hardware.camera.metadata@3.2_genc++_headers"],
export_generated_headers: ["android.hardware.camera.metadata@3.2_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/camera/provider/2.4/Android.bp b/camera/provider/2.4/Android.bp
index 36a726a..82a3a78 100644
--- a/camera/provider/2.4/Android.bp
+++ b/camera/provider/2.4/Android.bp
@@ -42,13 +42,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.camera.provider@2.4",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.camera.provider@2.4_genc++"],
generated_headers: ["android.hardware.camera.provider@2.4_genc++_headers"],
export_generated_headers: ["android.hardware.camera.provider@2.4_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
index 8ff9847..e6cd3b4 100644
--- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
+++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -1417,8 +1417,8 @@
}
}
-// Image capture cancel should fail when image capture is not running.
-TEST_F(CameraHidlTest, cancelPictureFail) {
+// Image capture cancel is a no-op when image capture is not running.
+TEST_F(CameraHidlTest, cancelPictureNOP) {
hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames(mProvider);
for (const auto& name : cameraDeviceNames) {
@@ -1433,7 +1433,7 @@
Return<Status> returnStatus = device1->cancelPicture();
ASSERT_TRUE(returnStatus.isOk());
- ASSERT_NE(Status::OK, returnStatus);
+ ASSERT_EQ(Status::OK, returnStatus);
stopPreviewAndClose(device1);
}
diff --git a/cas/1.0/Android.bp b/cas/1.0/Android.bp
index 2251f11..6d94793 100644
--- a/cas/1.0/Android.bp
+++ b/cas/1.0/Android.bp
@@ -60,13 +60,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.cas@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.cas@1.0_genc++"],
generated_headers: ["android.hardware.cas@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.cas@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/cas/native/1.0/Android.bp b/cas/native/1.0/Android.bp
index 414fca7..e39cab1 100644
--- a/cas/native/1.0/Android.bp
+++ b/cas/native/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.cas.native@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.cas.native@1.0_genc++"],
generated_headers: ["android.hardware.cas.native@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.cas.native@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/configstore/1.0/Android.bp b/configstore/1.0/Android.bp
index 6e60433..96ef00a 100644
--- a/configstore/1.0/Android.bp
+++ b/configstore/1.0/Android.bp
@@ -46,6 +46,9 @@
generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/configstore/1.0/vts/functional/Android.bp b/configstore/1.0/vts/functional/Android.bp
index 1775538..1b8a591 100644
--- a/configstore/1.0/vts/functional/Android.bp
+++ b/configstore/1.0/vts/functional/Android.bp
@@ -16,19 +16,8 @@
cc_test {
name: "VtsHalConfigstoreV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalConfigstoreV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "libhidlbase",
- "liblog",
- "libutils",
- "android.hardware.configstore@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.configstore@1.0"],
}
diff --git a/configstore/1.1/Android.bp b/configstore/1.1/Android.bp
index 2d8cb64..92fb7c1 100644
--- a/configstore/1.1/Android.bp
+++ b/configstore/1.1/Android.bp
@@ -35,13 +35,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.configstore@1.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.configstore@1.1_genc++"],
generated_headers: ["android.hardware.configstore@1.1_genc++_headers"],
export_generated_headers: ["android.hardware.configstore@1.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/configstore/1.1/default/Android.mk b/configstore/1.1/default/Android.mk
index ac3d8b0..58b67c1 100644
--- a/configstore/1.1/default/Android.mk
+++ b/configstore/1.1/default/Android.mk
@@ -3,6 +3,7 @@
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.configstore@1.1-service
+LOCAL_REQUIRED_MODULES_arm64 := configstore@1.1.policy
LOCAL_PROPRIETARY_MODULE := true
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_RELATIVE_PATH := hw
@@ -17,7 +18,18 @@
libhidlbase \
libhidltransport \
libbase \
+ libhwminijail \
liblog \
libutils \
include $(BUILD_EXECUTABLE)
+
+# seccomp filter for configstore
+ifeq ($(TARGET_ARCH), $(filter $(TARGET_ARCH), arm64))
+include $(CLEAR_VARS)
+LOCAL_MODULE := configstore@1.1.policy
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc/seccomp_policy
+LOCAL_SRC_FILES := seccomp_policy/configstore@1.1-$(TARGET_ARCH).policy
+include $(BUILD_PREBUILT)
+endif
diff --git a/configstore/1.1/default/seccomp_policy/configstore@1.1-arm64.policy b/configstore/1.1/default/seccomp_policy/configstore@1.1-arm64.policy
new file mode 100644
index 0000000..8c901eb
--- /dev/null
+++ b/configstore/1.1/default/seccomp_policy/configstore@1.1-arm64.policy
@@ -0,0 +1,40 @@
+# 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.
+
+futex: 1
+# ioctl: arg1 == BINDER_WRITE_READ
+ioctl: arg1 == 0xc0306201
+ioctl: 1
+# prctl: arg0 == PR_SET_NAME || arg0 == PR_SET_VMA || arg0 == PR_SET_TIMERSLACK
+prctl: arg0 == 15 || arg0 == 0x53564d41 || arg0 == 29
+openat: 1
+mmap: 1
+mprotect: 1
+close: 1
+getuid: 1
+read: 1
+faccessat: 1
+write: 1
+fstat: 1
+clone: 1
+munmap: 1
+lseek: 1
+sigaltstack: 1
+writev: 1
+setpriority: 1
+restart_syscall: 1
+exit: 1
+exit_group: 1
+rt_sigreturn: 1
+getrlimit: 1
diff --git a/configstore/1.1/default/service.cpp b/configstore/1.1/default/service.cpp
index 52db025..535e0cd 100644
--- a/configstore/1.1/default/service.cpp
+++ b/configstore/1.1/default/service.cpp
@@ -18,6 +18,7 @@
#include <android/hardware/configstore/1.1/ISurfaceFlingerConfigs.h>
#include <hidl/HidlTransportSupport.h>
+#include <hwminijail/HardwareMinijail.h>
#include "SurfaceFlingerConfigs.h"
@@ -25,6 +26,7 @@
using android::hardware::joinRpcThreadpool;
using android::hardware::configstore::V1_1::ISurfaceFlingerConfigs;
using android::hardware::configstore::V1_1::implementation::SurfaceFlingerConfigs;
+using android::hardware::SetupMinijail;
using android::sp;
using android::status_t;
using android::OK;
@@ -32,6 +34,8 @@
int main() {
configureRpcThreadpool(10, true);
+ SetupMinijail("/vendor/etc/seccomp_policy/configstore@1.1.policy");
+
sp<ISurfaceFlingerConfigs> surfaceFlingerConfigs = new SurfaceFlingerConfigs;
status_t status = surfaceFlingerConfigs->registerAsService();
LOG_ALWAYS_FATAL_IF(status != OK, "Could not register ISurfaceFlingerConfigs");
diff --git a/configstore/1.1/vts/functional/Android.bp b/configstore/1.1/vts/functional/Android.bp
index 5cfa483..59beb09 100644
--- a/configstore/1.1/vts/functional/Android.bp
+++ b/configstore/1.1/vts/functional/Android.bp
@@ -16,19 +16,11 @@
cc_test {
name: "VtsHalConfigstoreV1_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalConfigstoreV1_1TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "libhidlbase",
- "liblog",
- "libutils",
+ static_libs: [
+ "android.hardware.configstore@1.0",
"android.hardware.configstore@1.1",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
}
diff --git a/configstore/utils/Android.bp b/configstore/utils/Android.bp
index a4cad66..93e52f1 100644
--- a/configstore/utils/Android.bp
+++ b/configstore/utils/Android.bp
@@ -17,6 +17,9 @@
cc_library_shared {
name: "android.hardware.configstore-utils",
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
defaults: ["hidl_defaults"],
srcs: [ "ConfigStoreUtils.cpp" ],
diff --git a/contexthub/1.0/Android.bp b/contexthub/1.0/Android.bp
index 45d2e5c..ae1bd08 100644
--- a/contexthub/1.0/Android.bp
+++ b/contexthub/1.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.contexthub@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.contexthub@1.0_genc++"],
generated_headers: ["android.hardware.contexthub@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.contexthub@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/contexthub/1.0/vts/functional/Android.bp b/contexthub/1.0/vts/functional/Android.bp
index c35386d..7c6e8c7 100644
--- a/contexthub/1.0/vts/functional/Android.bp
+++ b/contexthub/1.0/vts/functional/Android.bp
@@ -16,19 +16,8 @@
cc_test {
name: "VtsHalContexthubV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalContexthubV1_0TargetTest.cpp"],
- shared_libs: [
- "liblog",
- "libhidlbase",
- "libhidltransport",
- "libutils",
- "android.hardware.contexthub@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.contexthub@1.0"],
}
diff --git a/current.txt b/current.txt
index 2017df5..f8cdc93 100644
--- a/current.txt
+++ b/current.txt
@@ -193,7 +193,9 @@
dc7e6d4f537b9943e27edc4f86c5a03bb643b18f18f866f8c3c71c0ac4ea8cbc android.hardware.broadcastradio@1.0::types
760485232f6cce07f8bb05e3475509956996b702f77415ee5bff05e2ec5a5bcc android.hardware.dumpstate@1.0::IDumpstateDevice
e822cb7f4a1bdd45689c5e92ccd19a2201c20b771bd4b2ec1ae627e324591f9d android.hardware.radio@1.0::IRadioResponse
+6e69adb24d7c0b0ca3a54a38c49a5625b161b3f5d5f7d6fda0befdbbfc8e9e06 android.hardware.radio@1.0::IRadioResponse
28e929b453df3d9f5060af2764e6cdb123ddb893e3e86923c877f6ff7e5f02c9 android.hardware.wifi@1.0::types
+df1d7b27e644bfed0a4f606a8c44d35d45cafce82c7c648494c8a25c7cd4a949 android.hardware.wifi@1.0::types
# HALs released in Android O MR1
diff --git a/drm/1.0/Android.bp b/drm/1.0/Android.bp
index 731f58f..d004b82 100644
--- a/drm/1.0/Android.bp
+++ b/drm/1.0/Android.bp
@@ -67,13 +67,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.drm@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.drm@1.0_genc++"],
generated_headers: ["android.hardware.drm@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.drm@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
@@ -89,5 +92,3 @@
"libutils",
],
}
-
-subdirs = ["default"]
diff --git a/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp b/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp
index eeee3c0..3966eac 100644
--- a/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp
+++ b/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp
@@ -76,9 +76,12 @@
#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
-static const uint8_t kClearKeyUUID[16] = {
- 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02,
- 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B};
+static const uint8_t kCommonPsshBoxUUID[16] = {0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02,
+ 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B};
+
+// To be used in mpd to specify drm scheme for players
+static const uint8_t kClearKeyUUID[16] = {0xE2, 0x71, 0x9D, 0x58, 0xA9, 0x85, 0xB3, 0xC9,
+ 0x78, 0x1A, 0xB0, 0x30, 0xAF, 0x78, 0xD3, 0x0E};
static const uint8_t kInvalidUUID[16] = {
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80,
@@ -111,6 +114,9 @@
* Ensure the factory supports the clearkey scheme UUID
*/
TEST_F(DrmHalClearkeyFactoryTest, ClearKeyPluginSupported) {
+ EXPECT_TRUE(drmFactory->isCryptoSchemeSupported(kCommonPsshBoxUUID));
+ EXPECT_TRUE(cryptoFactory->isCryptoSchemeSupported(kCommonPsshBoxUUID));
+
EXPECT_TRUE(drmFactory->isCryptoSchemeSupported(kClearKeyUUID));
EXPECT_TRUE(cryptoFactory->isCryptoSchemeSupported(kClearKeyUUID));
}
@@ -1064,8 +1070,6 @@
AES_set_encrypt_key(&key[0], 128, &decryptionKey);
size_t offset = 0;
- size_t num = 0;
- size_t ecount_buf = 0;
for (size_t i = 0; i < subSamples.size(); i++) {
memcpy(dest + offset, src + offset, subSamples[i].numBytesOfClearData);
offset += subSamples[i].numBytesOfClearData;
@@ -1106,7 +1110,6 @@
Status status = cryptoPlugin->setMediaDrmSession(sessionId);
EXPECT_EQ(Status::OK, status);
- const bool kNotSecure = false;
uint32_t byteCount = decrypt(Mode::UNENCRYPTED, &iv[0], subSamples,
noPattern, Status::OK);
EXPECT_EQ(kByteCount, byteCount);
@@ -1133,7 +1136,6 @@
Status status = cryptoPlugin->setMediaDrmSession(sessionId);
EXPECT_EQ(Status::OK, status);
- const bool kNotSecure = false;
uint32_t byteCount = decrypt(Mode::AES_CTR, &iv[0], subSamples,
noPattern, Status::OK);
EXPECT_EQ(kClearBytes + kEncryptedBytes, byteCount);
@@ -1154,7 +1156,6 @@
Status status = cryptoPlugin->setMediaDrmSession(sessionId);
EXPECT_EQ(Status::OK, status);
- const bool kNotSecure = false;
uint32_t byteCount = decrypt(Mode::AES_CTR, &iv[0], subSamples,
noPattern, Status::ERROR_DRM_NO_LICENSE);
EXPECT_EQ(0u, byteCount);
diff --git a/drm/1.0/vts/functional/drm_hal_vendor_test.cpp b/drm/1.0/vts/functional/drm_hal_vendor_test.cpp
index 6ce465f..61f3014 100644
--- a/drm/1.0/vts/functional/drm_hal_vendor_test.cpp
+++ b/drm/1.0/vts/functional/drm_hal_vendor_test.cpp
@@ -1406,8 +1406,6 @@
AES_set_encrypt_key(&key[0], 128, &decryptionKey);
size_t offset = 0;
- size_t num = 0;
- size_t ecount_buf = 0;
for (size_t i = 0; i < subSamples.size(); i++) {
const SubSample& subSample = subSamples[i];
diff --git a/drm/Android.bp b/drm/Android.bp
index 33f70eb..ed19a37 100644
--- a/drm/Android.bp
+++ b/drm/Android.bp
@@ -1,5 +1,6 @@
// This is an autogenerated file, do not edit.
subdirs = [
"1.0",
+ "1.0/default",
"1.0/vts/functional",
]
diff --git a/dumpstate/1.0/Android.bp b/dumpstate/1.0/Android.bp
index 2424c33..b135e00 100644
--- a/dumpstate/1.0/Android.bp
+++ b/dumpstate/1.0/Android.bp
@@ -35,13 +35,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.dumpstate@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.dumpstate@1.0_genc++"],
generated_headers: ["android.hardware.dumpstate@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.dumpstate@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/dumpstate/1.0/vts/functional/Android.bp b/dumpstate/1.0/vts/functional/Android.bp
index a1c735b..1ab530f 100644
--- a/dumpstate/1.0/vts/functional/Android.bp
+++ b/dumpstate/1.0/vts/functional/Android.bp
@@ -15,18 +15,7 @@
cc_test {
name: "VtsHalDumpstateV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalDumpstateV1_0TargetTest.cpp"],
- shared_libs: [
- "android.hardware.dumpstate@1.0",
- "libcutils",
- "libhidlbase",
- "liblog",
- "libutils",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.dumpstate@1.0"],
}
diff --git a/gatekeeper/1.0/Android.bp b/gatekeeper/1.0/Android.bp
index eb70c09..f12f38f 100644
--- a/gatekeeper/1.0/Android.bp
+++ b/gatekeeper/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.gatekeeper@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.gatekeeper@1.0_genc++"],
generated_headers: ["android.hardware.gatekeeper@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.gatekeeper@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/gatekeeper/1.0/vts/functional/Android.bp b/gatekeeper/1.0/vts/functional/Android.bp
index 70cb615..aa1da7b 100644
--- a/gatekeeper/1.0/vts/functional/Android.bp
+++ b/gatekeeper/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalGatekeeperV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalGatekeeperV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.gatekeeper@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.gatekeeper@1.0"],
}
diff --git a/gnss/1.0/Android.bp b/gnss/1.0/Android.bp
index c2988de..6db98f6 100644
--- a/gnss/1.0/Android.bp
+++ b/gnss/1.0/Android.bp
@@ -172,13 +172,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.gnss@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.gnss@1.0_genc++"],
generated_headers: ["android.hardware.gnss@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.gnss@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/gnss/1.0/vts/functional/Android.bp b/gnss/1.0/vts/functional/Android.bp
index 6d96059..d7713db 100644
--- a/gnss/1.0/vts/functional/Android.bp
+++ b/gnss/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalGnssV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalGnssV1_0TargetTest.cpp"],
- shared_libs: [
- "android.hardware.gnss@1.0",
- "libbase",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "liblog",
- "libnativehelper",
- "libutils",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
-}
\ No newline at end of file
+ static_libs: ["android.hardware.gnss@1.0"],
+}
diff --git a/graphics/allocator/2.0/Android.bp b/graphics/allocator/2.0/Android.bp
index 2c2a3da..46faa17 100644
--- a/graphics/allocator/2.0/Android.bp
+++ b/graphics/allocator/2.0/Android.bp
@@ -35,13 +35,17 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.graphics.allocator@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.graphics.allocator@2.0_genc++"],
generated_headers: ["android.hardware.graphics.allocator@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.graphics.allocator@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ support_system_process: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/graphics/bufferqueue/1.0/Android.bp b/graphics/bufferqueue/1.0/Android.bp
index 4773963..2d36fc7 100644
--- a/graphics/bufferqueue/1.0/Android.bp
+++ b/graphics/bufferqueue/1.0/Android.bp
@@ -42,13 +42,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.graphics.bufferqueue@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.graphics.bufferqueue@1.0_genc++"],
generated_headers: ["android.hardware.graphics.bufferqueue@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.graphics.bufferqueue@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/graphics/common/1.0/Android.bp b/graphics/common/1.0/Android.bp
index 3d9aa90..86438c1 100644
--- a/graphics/common/1.0/Android.bp
+++ b/graphics/common/1.0/Android.bp
@@ -32,13 +32,17 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.graphics.common@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.graphics.common@1.0_genc++"],
generated_headers: ["android.hardware.graphics.common@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.graphics.common@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ support_system_process: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/graphics/composer/2.1/Android.bp b/graphics/composer/2.1/Android.bp
index 299570d..e875708 100644
--- a/graphics/composer/2.1/Android.bp
+++ b/graphics/composer/2.1/Android.bp
@@ -53,13 +53,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.graphics.composer@2.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.graphics.composer@2.1_genc++"],
generated_headers: ["android.hardware.graphics.composer@2.1_genc++_headers"],
export_generated_headers: ["android.hardware.graphics.composer@2.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/graphics/composer/2.1/default/Hwc.cpp b/graphics/composer/2.1/default/Hwc.cpp
index 8ca0eb3..862dff1 100644
--- a/graphics/composer/2.1/default/Hwc.cpp
+++ b/graphics/composer/2.1/default/Hwc.cpp
@@ -18,6 +18,7 @@
#include "Hwc.h"
+#include <chrono>
#include <type_traits>
#include <log/log.h>
@@ -25,6 +26,8 @@
#include "hardware/hwcomposer.h"
#include "hwc2on1adapter/HWC2On1Adapter.h"
+using namespace std::chrono_literals;
+
namespace android {
namespace hardware {
namespace graphics {
@@ -218,7 +221,24 @@
sp<ComposerClient> client;
{
- std::lock_guard<std::mutex> lock(mClientMutex);
+ std::unique_lock<std::mutex> lock(mClientMutex);
+
+ if (mClient != nullptr) {
+ // In surface flinger we delete a composer client on one thread and
+ // then create a new client on another thread. Although surface
+ // flinger ensures the calls are made in that sequence (destroy and
+ // then create), sometimes the calls land in the composer service
+ // inverted (create and then destroy). Wait for a brief period to
+ // see if the existing client is destroyed.
+ ALOGI("HwcHal::createClient: Client already exists. Waiting for"
+ " it to be destroyed.");
+ mClientDestroyedWait.wait_for(lock, 1s,
+ [this] { return mClient == nullptr; });
+ std::string doneMsg = mClient == nullptr ?
+ "Existing client was destroyed." :
+ "Existing client was never destroyed!";
+ ALOGI("HwcHal::createClient: Done waiting. %s", doneMsg.c_str());
+ }
// only one client is allowed
if (mClient == nullptr) {
@@ -245,6 +265,7 @@
{
std::lock_guard<std::mutex> lock(mClientMutex);
mClient = nullptr;
+ mClientDestroyedWait.notify_all();
}
void HwcHal::hotplugHook(hwc2_callback_data_t callbackData,
diff --git a/graphics/composer/2.1/default/Hwc.h b/graphics/composer/2.1/default/Hwc.h
index b45389a..7561327 100644
--- a/graphics/composer/2.1/default/Hwc.h
+++ b/graphics/composer/2.1/default/Hwc.h
@@ -17,8 +17,9 @@
#ifndef ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_HWC_H
#define ANDROID_HARDWARE_GRAPHICS_COMPOSER_V2_1_HWC_H
-#include <mutex>
+#include <condition_variable>
#include <memory>
+#include <mutex>
#include <unordered_set>
#include <vector>
@@ -211,6 +212,7 @@
} mDispatch;
std::mutex mClientMutex;
+ std::condition_variable mClientDestroyedWait;
wp<ComposerClient> mClient;
// If the HWC implementation version is < 2.0, use an adapter to interface
diff --git a/graphics/composer/2.1/vts/functional/Android.bp b/graphics/composer/2.1/vts/functional/Android.bp
index 2e87144..1ba7c9a 100644
--- a/graphics/composer/2.1/vts/functional/Android.bp
+++ b/graphics/composer/2.1/vts/functional/Android.bp
@@ -44,33 +44,21 @@
cc_test {
name: "VtsHalGraphicsComposerV2_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalGraphicsComposerV2_1TargetTest.cpp"],
+
+ // TODO(b/64437680): Assume these libs are always available on the device.
shared_libs: [
+ "libfmq",
+ "libsync",
+ ],
+ static_libs: [
"android.hardware.graphics.allocator@2.0",
"android.hardware.graphics.composer@2.1",
"android.hardware.graphics.mapper@2.0",
- "libbase",
- "libcutils",
- "libfmq",
- "libhidlbase",
- "libhidltransport",
- "liblog",
- "libnativehelper",
- "libsync",
- "libutils",
- ],
- static_libs: [
- "libhwcomposer-command-buffer",
"libVtsHalGraphicsComposerTestUtils",
"libVtsHalGraphicsMapperTestUtils",
- "VtsHalHidlTargetTestBase",
+ "libhwcomposer-command-buffer",
+ "libnativehelper",
],
- cflags: [
- "-Wall",
- "-Wextra",
- "-Werror",
- "-O0",
- "-g",
- ]
}
diff --git a/graphics/composer/2.1/vts/functional/GraphicsComposerCallback.h b/graphics/composer/2.1/vts/functional/GraphicsComposerCallback.h
index ada7d09..e332086 100644
--- a/graphics/composer/2.1/vts/functional/GraphicsComposerCallback.h
+++ b/graphics/composer/2.1/vts/functional/GraphicsComposerCallback.h
@@ -51,7 +51,7 @@
// the set of all currently connected displays
std::unordered_set<Display> mDisplays;
// true only when vsync is enabled
- bool mVsyncAllowed = false;
+ bool mVsyncAllowed = true;
// track invalid callbacks
int mInvalidHotplugCount = 0;
diff --git a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerTestUtils.cpp b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerTestUtils.cpp
index 4e65a95..c66cdd0 100644
--- a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerTestUtils.cpp
+++ b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerTestUtils.cpp
@@ -297,6 +297,11 @@
: IComposerClient::Vsync::DISABLE;
Error error = mClient->setVsyncEnabled(display, vsync);
ASSERT_EQ(Error::NONE, error) << "failed to set vsync mode";
+
+ // give the hwbinder thread some time to handle any pending vsync callback
+ if (!enabled) {
+ usleep(5 * 1000);
+ }
}
void ComposerClient::execute(TestCommandReader* reader,
diff --git a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
index c77b7d3..0f03546 100644
--- a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
+++ b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
@@ -61,6 +61,10 @@
// assume the first display is primary and is never removed
mPrimaryDisplay = waitForFirstDisplay();
+
+ // explicitly disable vsync
+ mComposerClient->setVsyncEnabled(mPrimaryDisplay, false);
+ mComposerCallback->setVsyncAllowed(false);
}
void TearDown() override {
diff --git a/graphics/mapper/2.0/Android.bp b/graphics/mapper/2.0/Android.bp
index 408d58f..f5913af 100644
--- a/graphics/mapper/2.0/Android.bp
+++ b/graphics/mapper/2.0/Android.bp
@@ -39,13 +39,17 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.graphics.mapper@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.graphics.mapper@2.0_genc++"],
generated_headers: ["android.hardware.graphics.mapper@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.graphics.mapper@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ support_system_process: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/graphics/mapper/2.0/vts/functional/Android.bp b/graphics/mapper/2.0/vts/functional/Android.bp
index 1c0e4c5..ac6cb47 100644
--- a/graphics/mapper/2.0/vts/functional/Android.bp
+++ b/graphics/mapper/2.0/vts/functional/Android.bp
@@ -37,30 +37,16 @@
cc_test {
name: "VtsHalGraphicsMapperV2_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalGraphicsMapperV2_0TargetTest.cpp"],
shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
"libsync",
- "libutils",
+ ],
+ static_libs: [
"android.hardware.graphics.allocator@2.0",
"android.hardware.graphics.mapper@2.0",
"android.hardware.graphics.common@1.0",
- ],
- static_libs: [
"libVtsHalGraphicsMapperTestUtils",
- "VtsHalHidlTargetTestBase",
+ "libnativehelper",
],
- cflags: [
- "-Wall",
- "-Wextra",
- "-Werror",
- "-O0",
- "-g",
- ]
}
diff --git a/health/1.0/Android.bp b/health/1.0/Android.bp
index 4fb2d7b..d8ebc20 100644
--- a/health/1.0/Android.bp
+++ b/health/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.health@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.health@1.0_genc++"],
generated_headers: ["android.hardware.health@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.health@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/health/1.0/default/Android.bp b/health/1.0/default/Android.bp
index c57152f..cb2e87d 100644
--- a/health/1.0/default/Android.bp
+++ b/health/1.0/default/Android.bp
@@ -1,7 +1,3 @@
-subdirs = [
- "libhealthd",
-]
-
cc_library_static {
name: "android.hardware.health@1.0-convert",
vendor_available: true,
diff --git a/health/1.0/vts/functional/Android.bp b/health/1.0/vts/functional/Android.bp
index 1a4c8c8..8742651 100644
--- a/health/1.0/vts/functional/Android.bp
+++ b/health/1.0/vts/functional/Android.bp
@@ -16,17 +16,7 @@
cc_test {
name: "VtsHalHealthV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalHealthV1_0TargetTest.cpp"],
- shared_libs: [
- "libhidlbase",
- "liblog",
- "libutils",
- "android.hardware.health@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.health@1.0"],
}
diff --git a/health/Android.bp b/health/Android.bp
index ed19a37..a6f6017 100644
--- a/health/Android.bp
+++ b/health/Android.bp
@@ -2,5 +2,6 @@
subdirs = [
"1.0",
"1.0/default",
+ "1.0/default/libhealthd",
"1.0/vts/functional",
]
diff --git a/ir/1.0/Android.bp b/ir/1.0/Android.bp
index 12e62c0..489f61f 100644
--- a/ir/1.0/Android.bp
+++ b/ir/1.0/Android.bp
@@ -46,6 +46,9 @@
generated_headers: ["android.hardware.ir@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.ir@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/ir/1.0/vts/functional/Android.bp b/ir/1.0/vts/functional/Android.bp
index 4aac297..2a86f8e 100644
--- a/ir/1.0/vts/functional/Android.bp
+++ b/ir/1.0/vts/functional/Android.bp
@@ -16,20 +16,9 @@
cc_test {
name: "VtsHalIrV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalIrV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libutils",
+ static_libs: [
"android.hardware.ir@1.0",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
}
diff --git a/keymaster/3.0/Android.bp b/keymaster/3.0/Android.bp
index 1846200..14cfab2 100644
--- a/keymaster/3.0/Android.bp
+++ b/keymaster/3.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.keymaster@3.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.keymaster@3.0_genc++"],
generated_headers: ["android.hardware.keymaster@3.0_genc++_headers"],
export_generated_headers: ["android.hardware.keymaster@3.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/keymaster/3.0/vts/functional/Android.bp b/keymaster/3.0/vts/functional/Android.bp
new file mode 100644
index 0000000..7d96704
--- /dev/null
+++ b/keymaster/3.0/vts/functional/Android.bp
@@ -0,0 +1,32 @@
+//
+// 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.
+//
+
+cc_test {
+ name: "VtsHalKeymasterV3_0TargetTest",
+ defaults: ["VtsHalTargetTestDefaults"],
+ srcs: [
+ "authorization_set.cpp",
+ "attestation_record.cpp",
+ "key_param_output.cpp",
+ "keymaster_hidl_hal_test.cpp",
+ "keystore_tags_utils.cpp",
+ ],
+ static_libs: [
+ "android.hardware.keymaster@3.0",
+ "libcrypto",
+ "libsoftkeymasterdevice",
+ ],
+}
diff --git a/keymaster/3.0/vts/functional/Android.mk b/keymaster/3.0/vts/functional/Android.mk
deleted file mode 100644
index 4098664..0000000
--- a/keymaster/3.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := VtsHalKeymasterV3_0TargetTest
-LOCAL_SRC_FILES := \
- authorization_set.cpp \
- attestation_record.cpp \
- key_param_output.cpp \
- keymaster_hidl_hal_test.cpp \
- keystore_tags_utils.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
- android.hardware.keymaster@3.0 \
- libcrypto \
- libhidlbase \
- liblog \
- libsoftkeymasterdevice \
- libutils \
-
-LOCAL_STATIC_LIBRARIES := \
- VtsHalHidlTargetTestBase \
-
-LOCAL_CFLAGS := -Wall -Werror
-
-include $(BUILD_NATIVE_TEST)
diff --git a/keymaster/Android.bp b/keymaster/Android.bp
index 09b8cb2..90a0195 100644
--- a/keymaster/Android.bp
+++ b/keymaster/Android.bp
@@ -1,4 +1,5 @@
// This is an autogenerated file, do not edit.
subdirs = [
"3.0",
+ "3.0/vts/functional",
]
diff --git a/light/2.0/Android.bp b/light/2.0/Android.bp
index cffdbe0..7cc7f84 100644
--- a/light/2.0/Android.bp
+++ b/light/2.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.light@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.light@2.0_genc++"],
generated_headers: ["android.hardware.light@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.light@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/light/2.0/vts/functional/Android.bp b/light/2.0/vts/functional/Android.bp
index 0558ff2..e0ec4cf 100644
--- a/light/2.0/vts/functional/Android.bp
+++ b/light/2.0/vts/functional/Android.bp
@@ -16,19 +16,8 @@
cc_test {
name: "VtsHalLightV2_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalLightV2_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "libhidlbase",
- "liblog",
- "libutils",
- "android.hardware.light@2.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.light@2.0"],
}
diff --git a/media/1.0/Android.bp b/media/1.0/Android.bp
index 61eeb3f..de2187e 100644
--- a/media/1.0/Android.bp
+++ b/media/1.0/Android.bp
@@ -32,13 +32,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.media@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.media@1.0_genc++"],
generated_headers: ["android.hardware.media@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.media@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/media/omx/1.0/Android.bp b/media/omx/1.0/Android.bp
index 8e5527e..f8bed6e 100644
--- a/media/omx/1.0/Android.bp
+++ b/media/omx/1.0/Android.bp
@@ -74,13 +74,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.media.omx@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.media.omx@1.0_genc++"],
generated_headers: ["android.hardware.media.omx@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.media.omx@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/media/omx/1.0/vts/functional/audio/Android.bp b/media/omx/1.0/vts/functional/audio/Android.bp
index 66fd20b..f517fa1 100644
--- a/media/omx/1.0/vts/functional/audio/Android.bp
+++ b/media/omx/1.0/vts/functional/audio/Android.bp
@@ -16,65 +16,19 @@
cc_test {
name: "VtsHalMediaOmxV1_0TargetAudioEncTest",
- defaults: ["hidl_defaults"],
- srcs: ["VtsHalMediaOmxV1_0TargetAudioEncTest.cpp",
- "media_audio_hidl_test_common.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidlmemory",
- "libhidltransport",
- "libhwbinder",
- "libnativehelper",
- "libutils",
- "libstagefright_foundation",
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "android.hardware.media.omx@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase",
- "VtsHalMediaOmxV1_0CommonUtil"],
- cflags: [
- "-O0",
- "-g",
- ],
- include_dirs: [
- "frameworks/native/include/media/openmax/",
- "hardware/interfaces/media/omx/1.0/vts/functional/common",
+ defaults: ["VtsHalMediaOmxV1_0Defaults"],
+ srcs: [
+ "VtsHalMediaOmxV1_0TargetAudioEncTest.cpp",
+ "media_audio_hidl_test_common.cpp"
],
}
cc_test {
name: "VtsHalMediaOmxV1_0TargetAudioDecTest",
- defaults: ["hidl_defaults"],
- srcs: ["VtsHalMediaOmxV1_0TargetAudioDecTest.cpp",
- "media_audio_hidl_test_common.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidlmemory",
- "libhidltransport",
- "libhwbinder",
- "libnativehelper",
- "libutils",
- "libstagefright_foundation",
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "android.hardware.media.omx@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase",
- "VtsHalMediaOmxV1_0CommonUtil"],
- cflags: [
- "-O0",
- "-g",
- ],
- include_dirs: [
- "frameworks/native/include/media/openmax/",
- "hardware/interfaces/media/omx/1.0/vts/functional/common",
+ defaults: ["VtsHalMediaOmxV1_0Defaults"],
+ srcs: [
+ "VtsHalMediaOmxV1_0TargetAudioDecTest.cpp",
+ "media_audio_hidl_test_common.cpp"
],
}
diff --git a/media/omx/1.0/vts/functional/common/Android.bp b/media/omx/1.0/vts/functional/common/Android.bp
old mode 100755
new mode 100644
index 93251fe..af55e3a
--- a/media/omx/1.0/vts/functional/common/Android.bp
+++ b/media/omx/1.0/vts/functional/common/Android.bp
@@ -16,18 +16,40 @@
cc_library_static {
name: "VtsHalMediaOmxV1_0CommonUtil",
- defaults: ["hidl_defaults"],
srcs: ["media_hidl_test_common.cpp"],
- shared_libs: [
- "liblog",
+
+ header_libs: ["media_plugin_headers"],
+ export_header_lib_headers: ["media_plugin_headers"],
+ export_include_dirs: ["."],
+
+ static_libs: [
+ "VtsHalHidlTargetTestBase",
"libhidlmemory",
"android.hidl.allocator@1.0",
"android.hidl.memory@1.0",
"android.hardware.media.omx@1.0",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [ "-O0", "-g", ],
- include_dirs: [
- "frameworks/native/include/media/openmax/",
+}
+
+cc_defaults {
+ name: "VtsHalMediaOmxV1_0Defaults",
+ defaults: ["VtsHalTargetTestDefaults"],
+
+ // Link to these statically as they are not guaranteed to be on the device.
+ static_libs: [
+ "VtsHalMediaOmxV1_0CommonUtil",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.media.omx@1.0",
+ "android.hardware.media@1.0",
+ "android.hidl.allocator@1.0",
+ "android.hidl.memory@1.0",
+ "libhidlmemory",
+ "libnativehelper",
+ ],
+
+ // TODO(b/64437680): Assume these libs are always available on the device.
+ shared_libs: [
+ "libstagefright_foundation",
],
}
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
old mode 100755
new mode 100644
index 863731a..b7d53ed
--- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp
@@ -60,6 +60,25 @@
return setParam(omxNode, OMX_IndexParamStandardComponentRole, ¶ms);
}
+Return<android::hardware::media::omx::V1_0::Status> setPortBufferSize(
+ sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_U32 size) {
+ android::hardware::media::omx::V1_0::Status status;
+ OMX_PARAM_PORTDEFINITIONTYPE portDef;
+
+ status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
+ &portDef);
+ if (status != ::android::hardware::media::omx::V1_0::Status::OK)
+ return status;
+ if (portDef.nBufferSize < size) {
+ portDef.nBufferSize = size;
+ status = setPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
+ &portDef);
+ if (status != ::android::hardware::media::omx::V1_0::Status::OK)
+ return status;
+ }
+ return status;
+}
+
// get/set video component port format
Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
sp<IOmxNode> omxNode, OMX_U32 portIndex,
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
index b3ca92c..d3ecc59 100644
--- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
+++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h
@@ -54,6 +54,9 @@
*/
#define RANDOM_INDEX 1729
+#define ALIGN_POWER_OF_TWO(value, n) \
+ (((value) + ((1 << (n)) - 1)) & ~((1 << (n)) - 1))
+
enum bufferOwner {
client,
component,
@@ -123,20 +126,21 @@
android::Vector<BufferInfo>* iBuffers = nullptr,
android::Vector<BufferInfo>* oBuffers = nullptr) {
int64_t finishBy = android::ALooper::GetNowUs() + timeoutUs;
+ android::Mutex::Autolock autoLock(msgLock);
for (;;) {
- android::Mutex::Autolock autoLock(msgLock);
android::List<Message>::iterator it = msgQueue.begin();
while (it != msgQueue.end()) {
if (it->type ==
android::hardware::media::omx::V1_0::Message::Type::EVENT) {
*msg = *it;
- msgQueue.erase(it);
+ it = msgQueue.erase(it);
// OMX_EventBufferFlag event is sent when the component has
// processed a buffer with its EOS flag set. This event is
// not sent by soft omx components. Vendor components can
// send this. From IOMX point of view, we will ignore this
// event.
- if (msg->data.eventData.event == OMX_EventBufferFlag) break;
+ if (msg->data.eventData.event == OMX_EventBufferFlag)
+ continue;
return ::android::hardware::media::omx::V1_0::Status::OK;
} else if (it->type == android::hardware::media::omx::V1_0::
Message::Type::FILL_BUFFER_DONE) {
@@ -147,7 +151,7 @@
it->data.bufferData.buffer) {
if (callBack) callBack(*it, &(*oBuffers)[i]);
oBuffers->editItemAt(i).owner = client;
- msgQueue.erase(it);
+ it = msgQueue.erase(it);
break;
}
}
@@ -162,24 +166,22 @@
it->data.bufferData.buffer) {
if (callBack) callBack(*it, &(*iBuffers)[i]);
iBuffers->editItemAt(i).owner = client;
- msgQueue.erase(it);
+ it = msgQueue.erase(it);
break;
}
}
EXPECT_LE(i, iBuffers->size());
}
+ } else {
+ EXPECT_TRUE(false) << "Received unexpected message";
+ ++it;
}
- ++it;
}
- if (finishBy - android::ALooper::GetNowUs() < 0)
- return toStatus(android::TIMED_OUT);
- android::status_t err =
- (timeoutUs < 0)
- ? msgCondition.wait(msgLock)
- : msgCondition.waitRelative(
- msgLock,
- (finishBy - android::ALooper::GetNowUs()) * 1000ll);
- if (err == android::TIMED_OUT) return toStatus(err);
+ int64_t delayUs = finishBy - android::ALooper::GetNowUs();
+ if (delayUs < 0) return toStatus(android::TIMED_OUT);
+ (timeoutUs < 0)
+ ? msgCondition.wait(msgLock)
+ : msgCondition.waitRelative(msgLock, delayUs * 1000ll);
}
}
@@ -283,6 +285,9 @@
Return<android::hardware::media::omx::V1_0::Status> setRole(
sp<IOmxNode> omxNode, const char* role);
+Return<android::hardware::media::omx::V1_0::Status> setPortBufferSize(
+ sp<IOmxNode> omxNode, OMX_U32 portIndex, OMX_U32 size);
+
Return<android::hardware::media::omx::V1_0::Status> setVideoPortFormat(
sp<IOmxNode> omxNode, OMX_U32 portIndex,
OMX_VIDEO_CODINGTYPE eCompressionFormat, OMX_COLOR_FORMATTYPE eColorFormat,
diff --git a/media/omx/1.0/vts/functional/component/Android.bp b/media/omx/1.0/vts/functional/component/Android.bp
index fd3210f..f76b6e9 100644
--- a/media/omx/1.0/vts/functional/component/Android.bp
+++ b/media/omx/1.0/vts/functional/component/Android.bp
@@ -16,32 +16,7 @@
cc_test {
name: "VtsHalMediaOmxV1_0TargetComponentTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalMediaOmxV1_0Defaults"],
srcs: ["VtsHalMediaOmxV1_0TargetComponentTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidlmemory",
- "libhidltransport",
- "libhwbinder",
- "libnativehelper",
- "libutils",
- "libstagefright_foundation",
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "android.hardware.media.omx@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase",
- "VtsHalMediaOmxV1_0CommonUtil"],
- cflags: [
- "-O0",
- "-g",
- ],
- include_dirs: [
- "frameworks/native/include/media/openmax/",
- "hardware/interfaces/media/omx/1.0/vts/functional/common",
- ],
}
diff --git a/media/omx/1.0/vts/functional/master/Android.bp b/media/omx/1.0/vts/functional/master/Android.bp
index e24b79b..4a45e69 100644
--- a/media/omx/1.0/vts/functional/master/Android.bp
+++ b/media/omx/1.0/vts/functional/master/Android.bp
@@ -16,29 +16,7 @@
cc_test {
name: "VtsHalMediaOmxV1_0TargetMasterTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalMediaOmxV1_0Defaults"],
srcs: ["VtsHalMediaOmxV1_0TargetMasterTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libhwbinder",
- "libnativehelper",
- "libutils",
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "android.hardware.media.omx@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
- include_dirs: [
- "frameworks/native/include/media/openmax/",
- "hardware/interfaces/media/omx/1.0/vts/functional/common",
- ],
}
diff --git a/media/omx/1.0/vts/functional/video/Android.bp b/media/omx/1.0/vts/functional/video/Android.bp
index 4e94f3b..e251a15 100644
--- a/media/omx/1.0/vts/functional/video/Android.bp
+++ b/media/omx/1.0/vts/functional/video/Android.bp
@@ -16,70 +16,26 @@
cc_test {
name: "VtsHalMediaOmxV1_0TargetVideoDecTest",
- defaults: ["hidl_defaults"],
- srcs: ["VtsHalMediaOmxV1_0TargetVideoDecTest.cpp",
- "media_video_hidl_test_common.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidlmemory",
- "libhidltransport",
- "libhwbinder",
- "libnativehelper",
- "libutils",
- "libstagefright_foundation",
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "android.hardware.media.omx@1.0",
+ defaults: ["VtsHalMediaOmxV1_0Defaults"],
+ srcs: [
+ "VtsHalMediaOmxV1_0TargetVideoDecTest.cpp",
+ "media_video_hidl_test_common.cpp"
+ ],
+ static_libs: [
"android.hardware.graphics.allocator@2.0",
"android.hardware.graphics.mapper@2.0",
- "android.hardware.graphics.common@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase",
- "VtsHalMediaOmxV1_0CommonUtil"],
- cflags: [
- "-O0",
- "-g",
- ],
- include_dirs: [
- "frameworks/native/include/media/openmax/",
- "hardware/interfaces/media/omx/1.0/vts/functional/common",
],
}
cc_test {
name: "VtsHalMediaOmxV1_0TargetVideoEncTest",
- defaults: ["hidl_defaults"],
- srcs: ["VtsHalMediaOmxV1_0TargetVideoEncTest.cpp",
- "media_video_hidl_test_common.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidlmemory",
- "libhidltransport",
- "libhwbinder",
- "libnativehelper",
+ defaults: ["VtsHalMediaOmxV1_0Defaults"],
+ srcs: [
+ "VtsHalMediaOmxV1_0TargetVideoEncTest.cpp",
+ "media_video_hidl_test_common.cpp"
+ ],
+ static_libs: [
"libnativewindow",
- "libutils",
- "libstagefright_foundation",
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "android.hardware.media.omx@1.0",
- "android.hardware.graphics.bufferqueue@1.0",
"android.hardware.graphics.mapper@2.0",
],
- static_libs: ["VtsHalHidlTargetTestBase",
- "VtsHalMediaOmxV1_0CommonUtil"],
- cflags: [
- "-O0",
- "-g",
- ],
- include_dirs: [
- "frameworks/native/include/media/openmax/",
- "hardware/interfaces/media/omx/1.0/vts/functional/common",
- ],
}
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
index 16ba745..c75bd7c 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
@@ -27,6 +27,7 @@
#include <android/hidl/allocator/1.0/IAllocator.h>
#include <android/hidl/memory/1.0/IMapper.h>
#include <android/hidl/memory/1.0/IMemory.h>
+#include <cutils/atomic.h>
using ::android::hardware::graphics::common::V1_0::BufferUsage;
using ::android::hardware::graphics::common::V1_0::PixelFormat;
@@ -47,6 +48,7 @@
#include <VtsHalHidlTargetTestBase.h>
#include <getopt.h>
+#include <media/hardware/HardwareAPI.h>
#include <media_hidl_test_common.h>
#include <media_video_hidl_test_common.h>
#include <fstream>
@@ -410,7 +412,7 @@
void allocateGraphicBuffers(sp<IOmxNode> omxNode, OMX_U32 portIndex,
android::Vector<BufferInfo>* buffArray,
uint32_t nFrameWidth, uint32_t nFrameHeight,
- int32_t* nStride, uint32_t count) {
+ int32_t* nStride, int format, uint32_t count) {
android::hardware::media::omx::V1_0::Status status;
sp<android::hardware::graphics::allocator::V2_0::IAllocator> allocator =
android::hardware::graphics::allocator::V2_0::IAllocator::getService();
@@ -427,7 +429,7 @@
descriptorInfo.width = nFrameWidth;
descriptorInfo.height = nFrameHeight;
descriptorInfo.layerCount = 1;
- descriptorInfo.format = PixelFormat::RGBA_8888;
+ descriptorInfo.format = static_cast<PixelFormat>(format);
descriptorInfo.usage = static_cast<uint64_t>(BufferUsage::CPU_READ_OFTEN);
omxNode->getGraphicBufferUsage(
portIndex,
@@ -452,6 +454,9 @@
EXPECT_EQ(error, android::hardware::graphics::mapper::V2_0::Error::NONE);
EXPECT_EQ(buffArray->size(), count);
+
+ static volatile int32_t nextId = 0;
+ uint64_t id = static_cast<uint64_t>(getpid()) << 32;
allocator->allocate(
descriptor, count,
[&](android::hardware::graphics::mapper::V2_0::Error _s, uint32_t _n1,
@@ -475,7 +480,7 @@
buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.layerCount =
descriptorInfo.layerCount;
buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.id =
- (*buffArray)[i].id;
+ id | static_cast<uint32_t>(android_atomic_inc(&nextId));
}
});
}
@@ -521,12 +526,15 @@
// set Port Params
uint32_t nFrameWidth, nFrameHeight, xFramerate;
- OMX_COLOR_FORMATTYPE eColorFormat =
- OMX_COLOR_FormatYUV420Planar;
getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth,
&nFrameHeight, &xFramerate);
+ // get configured color format
+ OMX_PARAM_PORTDEFINITIONTYPE portDef;
+ status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
+ kPortIndexOutput, &portDef);
setDefaultPortParam(omxNode, kPortIndexOutput,
- OMX_VIDEO_CodingUnused, eColorFormat,
+ OMX_VIDEO_CodingUnused,
+ portDef.format.video.eColorFormat,
nFrameWidth, nFrameHeight, 0, xFramerate);
// If you can disable a port, then you should be able to
@@ -558,6 +566,7 @@
portDef.format.video.nFrameWidth,
portDef.format.video.nFrameHeight,
&portDef.format.video.nStride,
+ portDef.format.video.eColorFormat,
portDef.nBufferCountActual);
}
status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
@@ -717,6 +726,116 @@
}
}
+// DescribeColorFormatParams Copy Constructor (Borrowed from OMXUtils.cpp)
+android::DescribeColorFormatParams::DescribeColorFormatParams(
+ const android::DescribeColorFormat2Params& params) {
+ eColorFormat = params.eColorFormat;
+ nFrameWidth = params.nFrameWidth;
+ nFrameHeight = params.nFrameHeight;
+ nStride = params.nStride;
+ nSliceHeight = params.nSliceHeight;
+ bUsingNativeBuffers = params.bUsingNativeBuffers;
+};
+
+bool isColorFormatFlexibleYUV(sp<IOmxNode> omxNode,
+ OMX_COLOR_FORMATTYPE eColorFormat) {
+ android::hardware::media::omx::V1_0::Status status;
+ unsigned int index = OMX_IndexMax, index2 = OMX_IndexMax;
+ omxNode->getExtensionIndex(
+ "OMX.google.android.index.describeColorFormat",
+ [&index](android::hardware::media::omx::V1_0::Status _s,
+ unsigned int _nl) {
+ if (_s == ::android::hardware::media::omx::V1_0::Status::OK)
+ index = _nl;
+ });
+ omxNode->getExtensionIndex(
+ "OMX.google.android.index.describeColorFormat2",
+ [&index2](android::hardware::media::omx::V1_0::Status _s,
+ unsigned int _nl) {
+ if (_s == ::android::hardware::media::omx::V1_0::Status::OK)
+ index2 = _nl;
+ });
+
+ android::DescribeColorFormat2Params describeParams;
+ describeParams.eColorFormat = eColorFormat;
+ describeParams.nFrameWidth = 128;
+ describeParams.nFrameHeight = 128;
+ describeParams.nStride = 128;
+ describeParams.nSliceHeight = 128;
+ describeParams.bUsingNativeBuffers = OMX_FALSE;
+ if (index != OMX_IndexMax) {
+ android::DescribeColorFormatParams describeParamsV1(describeParams);
+ status = getParam(omxNode, static_cast<OMX_INDEXTYPE>(index),
+ &describeParamsV1);
+ if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+ android::MediaImage& img = describeParamsV1.sMediaImage;
+ if (img.mType == android::MediaImage::MEDIA_IMAGE_TYPE_YUV) {
+ if (img.mNumPlanes == 3 &&
+ img.mPlane[img.Y].mHorizSubsampling == 1 &&
+ img.mPlane[img.Y].mVertSubsampling == 1) {
+ if (img.mPlane[img.U].mHorizSubsampling == 2 &&
+ img.mPlane[img.U].mVertSubsampling == 2 &&
+ img.mPlane[img.V].mHorizSubsampling == 2 &&
+ img.mPlane[img.V].mVertSubsampling == 2) {
+ if (img.mBitDepth <= 8) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ } else if (index2 != OMX_IndexMax) {
+ status = getParam(omxNode, static_cast<OMX_INDEXTYPE>(index2),
+ &describeParams);
+ android::MediaImage2& img = describeParams.sMediaImage;
+ if (img.mType == android::MediaImage2::MEDIA_IMAGE_TYPE_YUV) {
+ if (img.mNumPlanes == 3 &&
+ img.mPlane[img.Y].mHorizSubsampling == 1 &&
+ img.mPlane[img.Y].mVertSubsampling == 1) {
+ if (img.mPlane[img.U].mHorizSubsampling == 2 &&
+ img.mPlane[img.U].mVertSubsampling == 2 &&
+ img.mPlane[img.V].mHorizSubsampling == 2 &&
+ img.mPlane[img.V].mVertSubsampling == 2) {
+ if (img.mBitDepth <= 8) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+}
+
+// get default color format for output port
+void getDefaultColorFormat(sp<IOmxNode> omxNode, OMX_U32 kPortIndexOutput,
+ PortMode oPortMode,
+ OMX_COLOR_FORMATTYPE* eColorFormat) {
+ android::hardware::media::omx::V1_0::Status status;
+ OMX_VIDEO_PARAM_PORTFORMATTYPE portFormat;
+ *eColorFormat = OMX_COLOR_FormatUnused;
+ portFormat.nIndex = 0;
+ while (1) {
+ status = getPortParam(omxNode, OMX_IndexParamVideoPortFormat,
+ kPortIndexOutput, &portFormat);
+ if (status != ::android::hardware::media::omx::V1_0::Status::OK) break;
+ EXPECT_EQ(portFormat.eCompressionFormat, OMX_VIDEO_CodingUnused);
+ if (oPortMode != PortMode::PRESET_BYTE_BUFFER) {
+ *eColorFormat = portFormat.eColorFormat;
+ break;
+ }
+ if (isColorFormatFlexibleYUV(omxNode, portFormat.eColorFormat)) {
+ *eColorFormat = portFormat.eColorFormat;
+ break;
+ }
+ if (OMX_COLOR_FormatYUV420SemiPlanar == portFormat.eColorFormat ||
+ OMX_COLOR_FormatYUV420Planar == portFormat.eColorFormat) {
+ *eColorFormat = portFormat.eColorFormat;
+ break;
+ }
+ portFormat.nIndex++;
+ }
+}
+
// set component role
TEST_F(VideoDecHidlTest, SetRole) {
description("Test Set Component Role");
@@ -778,7 +897,7 @@
eleInfo.open(info);
ASSERT_EQ(eleInfo.is_open(), true);
android::Vector<FrameData> Info;
- int bytesCount = 0;
+ int bytesCount = 0, maxBytesCount = 0;
uint32_t flags = 0;
uint32_t timestamp = 0;
timestampDevTest = true;
@@ -789,9 +908,15 @@
Info.push_back({bytesCount, flags, timestamp});
if (flags != OMX_BUFFERFLAG_CODECCONFIG)
timestampUslist.push_back(timestamp);
+ if (maxBytesCount < bytesCount) maxBytesCount = bytesCount;
}
eleInfo.close();
+ // As the frame sizes are known ahead, use it to configure i/p buffer size
+ maxBytesCount = ALIGN_POWER_OF_TWO(maxBytesCount, 10);
+ status = setPortBufferSize(omxNode, kPortIndexInput, maxBytesCount);
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
// set port mode
portMode[0] = PortMode::PRESET_BYTE_BUFFER;
portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
@@ -806,11 +931,21 @@
// set Port Params
uint32_t nFrameWidth, nFrameHeight, xFramerate;
- OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
&xFramerate);
+ // get default color format
+ OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatUnused;
+ getDefaultColorFormat(omxNode, kPortIndexOutput, portMode[1],
+ &eColorFormat);
+ ASSERT_NE(eColorFormat, OMX_COLOR_FormatUnused);
+ status =
+ setVideoPortFormat(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, xFramerate);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+
+ // disabling adaptive playback.
omxNode->prepareForAdaptivePlayback(kPortIndexOutput, false, 1920, 1080);
android::Vector<BufferInfo> iBuffer, oBuffer;
@@ -830,7 +965,8 @@
allocateGraphicBuffers(
omxNode, kPortIndexOutput, &oBuffer,
portDef.format.video.nFrameWidth, portDef.format.video.nFrameHeight,
- &portDef.format.video.nStride, portDef.nBufferCountActual);
+ &portDef.format.video.nStride, portDef.format.video.eColorFormat,
+ portDef.nBufferCountActual);
}
// Port Reconfiguration
@@ -868,22 +1004,28 @@
kPortIndexOutput = kPortIndexInput + 1;
}
- // set Port Params
- uint32_t nFrameWidth, nFrameHeight, xFramerate;
- OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
- getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
- &xFramerate);
- setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
- eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
-
// set port mode
- PortMode portMode[2];
- portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ // set Port Params
+ uint32_t nFrameWidth, nFrameHeight, xFramerate;
+ getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
+ &xFramerate);
+ // get default color format
+ OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatUnused;
+ getDefaultColorFormat(omxNode, kPortIndexOutput, portMode[1],
+ &eColorFormat);
+ ASSERT_NE(eColorFormat, OMX_COLOR_FormatUnused);
+ status =
+ setVideoPortFormat(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, xFramerate);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+
android::Vector<BufferInfo> iBuffer, oBuffer;
// set state to idle
@@ -933,7 +1075,7 @@
eleInfo.open(info);
ASSERT_EQ(eleInfo.is_open(), true);
android::Vector<FrameData> Info;
- int bytesCount = 0;
+ int bytesCount = 0, maxBytesCount = 0;
uint32_t flags = 0;
uint32_t timestamp = 0;
while (1) {
@@ -941,25 +1083,37 @@
eleInfo >> flags;
eleInfo >> timestamp;
Info.push_back({bytesCount, flags, timestamp});
+ if (maxBytesCount < bytesCount) maxBytesCount = bytesCount;
}
eleInfo.close();
- // set Port Params
- uint32_t nFrameWidth, nFrameHeight, xFramerate;
- OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
- getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
- &xFramerate);
- setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
- eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+ // As the frame sizes are known ahead, use it to configure i/p buffer size
+ maxBytesCount = ALIGN_POWER_OF_TWO(maxBytesCount, 10);
+ status = setPortBufferSize(omxNode, kPortIndexInput, maxBytesCount);
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
// set port mode
- PortMode portMode[2];
- portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ // set Port Params
+ uint32_t nFrameWidth, nFrameHeight, xFramerate;
+ getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
+ &xFramerate);
+ // get default color format
+ OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatUnused;
+ getDefaultColorFormat(omxNode, kPortIndexOutput, portMode[1],
+ &eColorFormat);
+ ASSERT_NE(eColorFormat, OMX_COLOR_FormatUnused);
+ status =
+ setVideoPortFormat(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, xFramerate);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+
android::Vector<BufferInfo> iBuffer, oBuffer;
// set state to idle
@@ -1034,7 +1188,7 @@
eleInfo.open(info);
ASSERT_EQ(eleInfo.is_open(), true);
android::Vector<FrameData> Info;
- int bytesCount = 0;
+ int bytesCount = 0, maxBytesCount = 0;
uint32_t flags = 0;
uint32_t timestamp = 0;
while (1) {
@@ -1042,25 +1196,37 @@
eleInfo >> flags;
eleInfo >> timestamp;
Info.push_back({bytesCount, flags, timestamp});
+ if (maxBytesCount < bytesCount) maxBytesCount = bytesCount;
}
eleInfo.close();
- // set Port Params
- uint32_t nFrameWidth, nFrameHeight, xFramerate;
- OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
- getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
- &xFramerate);
- setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
- eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+ // As the frame sizes are known ahead, use it to configure i/p buffer size
+ maxBytesCount = ALIGN_POWER_OF_TWO(maxBytesCount, 10);
+ status = setPortBufferSize(omxNode, kPortIndexInput, maxBytesCount);
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
// set port mode
- PortMode portMode[2];
- portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ // set Port Params
+ uint32_t nFrameWidth, nFrameHeight, xFramerate;
+ getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
+ &xFramerate);
+ // get default color format
+ OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatUnused;
+ getDefaultColorFormat(omxNode, kPortIndexOutput, portMode[1],
+ &eColorFormat);
+ ASSERT_NE(eColorFormat, OMX_COLOR_FormatUnused);
+ status =
+ setVideoPortFormat(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, xFramerate);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+
android::Vector<BufferInfo> iBuffer, oBuffer;
// set state to idle
@@ -1117,7 +1283,7 @@
eleInfo.open(info);
ASSERT_EQ(eleInfo.is_open(), true);
android::Vector<FrameData> Info;
- int bytesCount = 0;
+ int bytesCount = 0, maxBytesCount = 0;
uint32_t flags = 0;
uint32_t timestamp = 0;
while (1) {
@@ -1125,25 +1291,37 @@
eleInfo >> flags;
eleInfo >> timestamp;
Info.push_back({bytesCount, flags, timestamp});
+ if (maxBytesCount < bytesCount) maxBytesCount = bytesCount;
}
eleInfo.close();
- // set Port Params
- uint32_t nFrameWidth, nFrameHeight, xFramerate;
- OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatYUV420Planar;
- getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
- &xFramerate);
- setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
- eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+ // As the frame sizes are known ahead, use it to configure i/p buffer size
+ maxBytesCount = ALIGN_POWER_OF_TWO(maxBytesCount, 10);
+ status = setPortBufferSize(omxNode, kPortIndexInput, maxBytesCount);
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
// set port mode
- PortMode portMode[2];
- portMode[0] = portMode[1] = PortMode::PRESET_BYTE_BUFFER;
status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ // set Port Params
+ uint32_t nFrameWidth, nFrameHeight, xFramerate;
+ getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, &nFrameHeight,
+ &xFramerate);
+ // get default color format
+ OMX_COLOR_FORMATTYPE eColorFormat = OMX_COLOR_FormatUnused;
+ getDefaultColorFormat(omxNode, kPortIndexOutput, portMode[1],
+ &eColorFormat);
+ ASSERT_NE(eColorFormat, OMX_COLOR_FormatUnused);
+ status =
+ setVideoPortFormat(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, xFramerate);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ setDefaultPortParam(omxNode, kPortIndexOutput, OMX_VIDEO_CodingUnused,
+ eColorFormat, nFrameWidth, nFrameHeight, 0, xFramerate);
+
android::Vector<BufferInfo> iBuffer, oBuffer;
// set state to idle
@@ -1183,6 +1361,7 @@
kPortIndexOutput, eleStream, &Info, index,
Info.size() - index, portMode[1], false);
}
+ eleStream.close();
flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
kPortIndexOutput);
framesReceived = 0;
diff --git a/media/res/bbb_aac_stereo_128kbps_48000hz.aac b/media/res/bbb_aac_stereo_128kbps_48000hz.aac
old mode 100755
new mode 100644
Binary files differ
diff --git a/media/res/bbb_aac_stereo_128kbps_48000hz.info b/media/res/bbb_aac_stereo_128kbps_48000hz.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_amrwb_1ch_14kbps_16000hz.amrwb b/media/res/bbb_amrwb_1ch_14kbps_16000hz.amrwb
old mode 100755
new mode 100644
Binary files differ
diff --git a/media/res/bbb_amrwb_1ch_14kbps_16000hz.info b/media/res/bbb_amrwb_1ch_14kbps_16000hz.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_g711alaw_1ch_8khz.info b/media/res/bbb_g711alaw_1ch_8khz.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_g711alaw_1ch_8khz.raw b/media/res/bbb_g711alaw_1ch_8khz.raw
old mode 100755
new mode 100644
diff --git a/media/res/bbb_g711mulaw_1ch_8khz.info b/media/res/bbb_g711mulaw_1ch_8khz.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_g711mulaw_1ch_8khz.raw b/media/res/bbb_g711mulaw_1ch_8khz.raw
old mode 100755
new mode 100644
diff --git a/media/res/bbb_gsm_1ch_8khz_13kbps.info b/media/res/bbb_gsm_1ch_8khz_13kbps.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_gsm_1ch_8khz_13kbps.raw b/media/res/bbb_gsm_1ch_8khz_13kbps.raw
old mode 100755
new mode 100644
Binary files differ
diff --git a/media/res/bbb_opus_stereo_128kbps_48000hz.info b/media/res/bbb_opus_stereo_128kbps_48000hz.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_opus_stereo_128kbps_48000hz.opus b/media/res/bbb_opus_stereo_128kbps_48000hz.opus
old mode 100755
new mode 100644
Binary files differ
diff --git a/media/res/bbb_raw_1ch_8khz_s32le.info b/media/res/bbb_raw_1ch_8khz_s32le.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_raw_1ch_8khz_s32le.raw b/media/res/bbb_raw_1ch_8khz_s32le.raw
old mode 100755
new mode 100644
Binary files differ
diff --git a/media/res/bbb_vorbis_stereo_128kbps_48000hz.info b/media/res/bbb_vorbis_stereo_128kbps_48000hz.info
old mode 100755
new mode 100644
diff --git a/media/res/bbb_vorbis_stereo_128kbps_48000hz.vorbis b/media/res/bbb_vorbis_stereo_128kbps_48000hz.vorbis
old mode 100755
new mode 100644
Binary files differ
diff --git a/memtrack/1.0/Android.bp b/memtrack/1.0/Android.bp
index 6f6e16d..4df2c1d 100644
--- a/memtrack/1.0/Android.bp
+++ b/memtrack/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.memtrack@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.memtrack@1.0_genc++"],
generated_headers: ["android.hardware.memtrack@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.memtrack@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/memtrack/1.0/vts/functional/Android.bp b/memtrack/1.0/vts/functional/Android.bp
index 71e6111..2d833e7 100644
--- a/memtrack/1.0/vts/functional/Android.bp
+++ b/memtrack/1.0/vts/functional/Android.bp
@@ -16,20 +16,7 @@
cc_test {
name: "VtsHalMemtrackV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalMemtrackV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhardware",
- "libhidlbase",
- "libutils",
- "android.hardware.memtrack@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.memtrack@1.0"],
}
diff --git a/minijail/Android.mk b/minijail/Android.mk
new file mode 100644
index 0000000..272bb0e
--- /dev/null
+++ b/minijail/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libhwminijail
+LOCAL_PROPRIETARY_MODULE := true
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
+LOCAL_SRC_FILES := HardwareMinijail.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+ libbase \
+ libminijail_vendor
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/minijail/HardwareMinijail.cpp b/minijail/HardwareMinijail.cpp
new file mode 100644
index 0000000..e6b1144
--- /dev/null
+++ b/minijail/HardwareMinijail.cpp
@@ -0,0 +1,45 @@
+//
+// 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.
+//
+
+#include <android-base/logging.h>
+#include <libminijail.h>
+
+#include <hwminijail/HardwareMinijail.h>
+
+namespace android {
+namespace hardware {
+
+void SetupMinijail(const std::string& seccomp_policy_path) {
+ if (access(seccomp_policy_path.c_str(), R_OK) == -1) {
+ LOG(WARNING) << "Could not find seccomp policy file at: " << seccomp_policy_path;
+ return;
+ }
+
+ struct minijail* jail = minijail_new();
+ if (jail == NULL) {
+ LOG(FATAL) << "Failed to create minijail.";
+ }
+
+ minijail_no_new_privs(jail);
+ minijail_log_seccomp_filter_failures(jail);
+ minijail_use_seccomp_filter(jail);
+ minijail_parse_seccomp_filters(jail, seccomp_policy_path.c_str());
+ minijail_enter(jail);
+ minijail_destroy(jail);
+}
+
+} // namespace hardware
+} // namespace android
diff --git a/minijail/include/hwminijail/HardwareMinijail.h b/minijail/include/hwminijail/HardwareMinijail.h
new file mode 100644
index 0000000..8fcf007
--- /dev/null
+++ b/minijail/include/hwminijail/HardwareMinijail.h
@@ -0,0 +1,30 @@
+//
+// 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.
+//
+
+#ifndef ANDROID_HARDWARE_CONFIGSTORE_MINIJAIL_H
+#define ANDROID_HARDWARE_CONFIGSTORE_MINIJAIL_H
+
+#include <string>
+
+namespace android {
+namespace hardware {
+
+void SetupMinijail(const std::string& seccomp_policy_path);
+
+} // namespace hardware
+} // namespace android
+
+#endif // ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
diff --git a/neuralnetworks/1.0/Android.bp b/neuralnetworks/1.0/Android.bp
index 1356d33..b5603a2 100644
--- a/neuralnetworks/1.0/Android.bp
+++ b/neuralnetworks/1.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.neuralnetworks@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.neuralnetworks@1.0_genc++"],
generated_headers: ["android.hardware.neuralnetworks@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.neuralnetworks@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/neuralnetworks/1.0/vts/functional/Android.bp b/neuralnetworks/1.0/vts/functional/Android.bp
index 96eb4cb..d76b2c3 100644
--- a/neuralnetworks/1.0/vts/functional/Android.bp
+++ b/neuralnetworks/1.0/vts/functional/Android.bp
@@ -17,21 +17,11 @@
cc_test {
name: "VtsHalNeuralnetworksV1_0TargetTest",
srcs: ["VtsHalNeuralnetworksV1_0TargetTest.cpp"],
- defaults: ["hidl_defaults"],
- shared_libs: [
- "libbase",
- "libhidlbase",
- "libhidlmemory",
- "libhidltransport",
- "liblog",
- "libutils",
+ defaults: ["VtsHalTargetTestDefaults"],
+ static_libs: [
"android.hardware.neuralnetworks@1.0",
"android.hidl.allocator@1.0",
"android.hidl.memory@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
+ "libhidlmemory",
],
}
diff --git a/nfc/1.0/Android.bp b/nfc/1.0/Android.bp
index 9e055d0..4adb32c 100644
--- a/nfc/1.0/Android.bp
+++ b/nfc/1.0/Android.bp
@@ -53,6 +53,9 @@
generated_headers: ["android.hardware.nfc@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.nfc@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/nfc/1.0/default/OWNERS b/nfc/1.0/default/OWNERS
new file mode 100644
index 0000000..984e5f9
--- /dev/null
+++ b/nfc/1.0/default/OWNERS
@@ -0,0 +1,2 @@
+eisenbach@google.com
+kandoiruchi@google.com
diff --git a/nfc/1.0/vts/functional/Android.bp b/nfc/1.0/vts/functional/Android.bp
index d9ba702..3861bd4 100644
--- a/nfc/1.0/vts/functional/Android.bp
+++ b/nfc/1.0/vts/functional/Android.bp
@@ -16,21 +16,9 @@
cc_test {
name: "VtsHalNfcV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalNfcV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
+ static_libs: [
"android.hardware.nfc@1.0",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
}
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index e67f94f..2f00fbb 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -44,6 +44,8 @@
{ 0x20, 0x04, 0x02, 0x01, 0x00 }
#define CORE_INIT_CMD \
{ 0x20, 0x01, 0x00 }
+#define CORE_INIT_CMD_NCI20 \
+ { 0x20, 0x01, 0x02, 0x00, 0x00 }
#define INVALID_COMMAND \
{ 0x20, 0x00, 0x00 }
@@ -290,16 +292,23 @@
// Wait for CORE_RESET_NTF
res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
EXPECT_TRUE(res.no_timeout);
+ cmd = CORE_INIT_CMD_NCI20;
+ } else {
+ cmd = CORE_INIT_CMD;
}
-
- cmd = CORE_INIT_CMD;
data = cmd;
+
EXPECT_EQ(data.size(), nfc_->write(data));
// Wait for CORE_INIT_RSP
res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
EXPECT_TRUE(res.no_timeout);
EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
-
+ if (nci_version == NCI_VERSION_2 && res.args->last_data_.size() > 13 &&
+ res.args->last_data_[13] == 0x00) {
+ // Wait for CORE_CONN_CREDITS_NTF
+ res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+ EXPECT_TRUE(res.no_timeout);
+ }
// Send an Error Data Packet
cmd = INVALID_COMMAND;
data = cmd;
@@ -347,15 +356,23 @@
// Wait for CORE_RESET_NTF
res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
EXPECT_TRUE(res.no_timeout);
+ cmd = CORE_INIT_CMD_NCI20;
+ } else {
+ cmd = CORE_INIT_CMD;
}
-
- cmd = CORE_INIT_CMD;
data = cmd;
+
EXPECT_EQ(data.size(), nfc_->write(data));
// Wait for CORE_INIT_RSP
res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
EXPECT_TRUE(res.no_timeout);
EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+ if (nci_version == NCI_VERSION_2 && res.args->last_data_.size() > 13 &&
+ res.args->last_data_[13] == 0x00) {
+ // Wait for CORE_CONN_CREDITS_NTF
+ res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+ EXPECT_TRUE(res.no_timeout);
+ }
cmd = CORE_CONN_CREATE_CMD;
data = cmd;
diff --git a/oemlock/1.0/Android.bp b/oemlock/1.0/Android.bp
index 21e7271..742061d 100644
--- a/oemlock/1.0/Android.bp
+++ b/oemlock/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.oemlock@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.oemlock@1.0_genc++"],
generated_headers: ["android.hardware.oemlock@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.oemlock@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/oemlock/1.0/vts/functional/Android.bp b/oemlock/1.0/vts/functional/Android.bp
index a13b3dc..20737a1 100644
--- a/oemlock/1.0/vts/functional/Android.bp
+++ b/oemlock/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalOemLockV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalOemLockV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.oemlock@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.oemlock@1.0"],
}
diff --git a/power/1.0/Android.bp b/power/1.0/Android.bp
index 1d967fd..bc886cb 100644
--- a/power/1.0/Android.bp
+++ b/power/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.power@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.power@1.0_genc++"],
generated_headers: ["android.hardware.power@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.power@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/power/1.0/vts/functional/Android.bp b/power/1.0/vts/functional/Android.bp
index 5ab1eb4..45f74fc 100644
--- a/power/1.0/vts/functional/Android.bp
+++ b/power/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalPowerV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalPowerV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.power@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.power@1.0"],
}
diff --git a/power/1.1/Android.bp b/power/1.1/Android.bp
index bfc140f..fb10aba 100644
--- a/power/1.1/Android.bp
+++ b/power/1.1/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.power@1.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.power@1.1_genc++"],
generated_headers: ["android.hardware.power@1.1_genc++_headers"],
export_generated_headers: ["android.hardware.power@1.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/power/1.1/vts/functional/Android.bp b/power/1.1/vts/functional/Android.bp
index f886bd2..604cd36 100644
--- a/power/1.1/vts/functional/Android.bp
+++ b/power/1.1/vts/functional/Android.bp
@@ -16,19 +16,10 @@
cc_test {
name: "VtsHalPowerV1_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalPowerV1_1TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libhidlbase",
- "libhidltransport",
- "libutils",
+ static_libs: [
+ "android.hardware.power@1.0",
"android.hardware.power@1.1",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
}
diff --git a/radio/1.0/Android.bp b/radio/1.0/Android.bp
index 8af2675..093ceac 100644
--- a/radio/1.0/Android.bp
+++ b/radio/1.0/Android.bp
@@ -74,6 +74,9 @@
generated_headers: ["android.hardware.radio@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.radio@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/radio/1.0/IRadioResponse.hal b/radio/1.0/IRadioResponse.hal
index a94aac3..94b304a 100644
--- a/radio/1.0/IRadioResponse.hal
+++ b/radio/1.0/IRadioResponse.hal
@@ -161,6 +161,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:REQUEST_NOT_SUPPORTED
+ * RadioError:SIM_ABSENT
*/
oneway supplyNetworkDepersonalizationResponse(RadioResponseInfo info, int32_t remainingRetries);
@@ -544,6 +545,7 @@
* RadioError:OPERATION_NOT_ALLOWED
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway sendSmsResponse(RadioResponseInfo info, SendSmsResult sms);
@@ -574,6 +576,7 @@
* RadioError:OPERATION_NOT_ALLOWED
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway sendSMSExpectMoreResponse(RadioResponseInfo info, SendSmsResult sms);
@@ -594,6 +597,7 @@
* RadioError:NO_MEMORY
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway setupDataCallResponse(RadioResponseInfo info, SetupDataCallResult dcResponse);
@@ -860,6 +864,7 @@
* RadioError:NO_MEMORY
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway deactivateDataCallResponse(RadioResponseInfo info);
@@ -1166,6 +1171,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:REQUEST_NOT_SUPPORTED
+ * RadioError:SIM_ABSENT
*/
oneway getDataCallListResponse(RadioResponseInfo info, vec<SetupDataCallResult> dcResponse);
@@ -1210,6 +1216,7 @@
* RadioError:REQUEST_NOT_SUPPORTED
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
+ * RadioError:SIM_ABSENT
*/
oneway writeSmsToSimResponse(RadioResponseInfo info, int32_t index);
@@ -1231,6 +1238,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
+ * RadioError:SIM_ABSENT
*/
oneway deleteSmsOnSimResponse(RadioResponseInfo info);
@@ -1615,6 +1623,7 @@
* RadioError:ENCODING_ERR
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway sendCdmaSmsResponse(RadioResponseInfo info, SendSmsResult sms);
@@ -1819,6 +1828,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
+ * RadioError:SIM_ABSENT
*/
oneway writeSmsToRuimResponse(RadioResponseInfo info, uint32_t index);
@@ -1839,6 +1849,8 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
+ * RadioError:OPERATION_NOT_ALLOWED
+ * RadioError:SIM_ABSENT
*/
oneway deleteSmsOnRuimResponse(RadioResponseInfo info);
@@ -1906,6 +1918,7 @@
* RadioError:OPERATION_NOT_ALLOWED
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway getSmscAddressResponse(RadioResponseInfo info, string smsc);
@@ -1927,6 +1940,7 @@
* RadioError:OPERATION_NOT_ALLOWED
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway setSmscAddressResponse(RadioResponseInfo info);
@@ -1946,6 +1960,7 @@
* RadioError:REQUEST_NOT_SUPPORTED
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * RadioError:SIM_ABSENT
*/
oneway reportSmsMemoryStatusResponse(RadioResponseInfo info);
@@ -2024,6 +2039,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:REQUEST_NOT_SUPPORTED
+ * RadioError:SIM_ABSENT
*/
oneway sendEnvelopeWithStatusResponse(RadioResponseInfo info, IccIoResult iccIo);
@@ -2328,6 +2344,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:REQUEST_NOT_SUPPORTED
+ * RadioError:SIM_ABSENT
*/
oneway setDataProfileResponse(RadioResponseInfo info);
@@ -2414,6 +2431,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:REQUEST_NOT_SUPPORTED
+ * RadioError:SIM_ABSENT
*/
oneway stopLceServiceResponse(RadioResponseInfo info, LceStatusInfo statusInfo);
@@ -2430,6 +2448,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:REQUEST_NOT_SUPPORTED
+ * RadioError:SIM_ABSENT
*/
oneway pullLceDataResponse(RadioResponseInfo info, LceDataInfo lceInfo);
diff --git a/radio/1.0/vts/OWNERS b/radio/1.0/vts/OWNERS
index 8236e94..2384317 100644
--- a/radio/1.0/vts/OWNERS
+++ b/radio/1.0/vts/OWNERS
@@ -1,6 +1,7 @@
# Telephony team
amitmahajan@google.com
sanketpadawe@google.com
+shuoq@google.com
# VTS team
yuexima@google.com
diff --git a/radio/1.0/vts/functional/Android.bp b/radio/1.0/vts/functional/Android.bp
index eb11b54..82a8a72 100644
--- a/radio/1.0/vts/functional/Android.bp
+++ b/radio/1.0/vts/functional/Android.bp
@@ -16,7 +16,7 @@
cc_test {
name: "VtsHalRadioV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["radio_hidl_hal_cell_broadcast.cpp",
"radio_hidl_hal_data.cpp",
"radio_hidl_hal_icc.cpp",
@@ -30,46 +30,22 @@
"radio_response.cpp",
"VtsHalRadioV1_0TargetTest.cpp",
"vts_test_util.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
+ static_libs: [
"android.hardware.radio@1.0",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
}
cc_test {
name: "VtsHalSapV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["sap_callback.cpp",
"sap_hidl_hal_api.cpp",
"sap_hidl_hal_test.cpp",
"VtsHalSapV1_0TargetTest.cpp",
"vts_test_util.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
+ static_libs: [
"android.hardware.radio@1.0",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
}
cc_library_static {
@@ -82,4 +58,4 @@
cc_library_headers {
name: "radio.util.header@1.0",
export_include_dirs: ["."],
-}
\ No newline at end of file
+}
diff --git a/radio/1.1/Android.bp b/radio/1.1/Android.bp
index 32de319..156cf99 100644
--- a/radio/1.1/Android.bp
+++ b/radio/1.1/Android.bp
@@ -67,6 +67,9 @@
generated_headers: ["android.hardware.radio@1.1_genc++_headers"],
export_generated_headers: ["android.hardware.radio@1.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/radio/1.1/vts/OWNERS b/radio/1.1/vts/OWNERS
index 8236e94..2384317 100644
--- a/radio/1.1/vts/OWNERS
+++ b/radio/1.1/vts/OWNERS
@@ -1,6 +1,7 @@
# Telephony team
amitmahajan@google.com
sanketpadawe@google.com
+shuoq@google.com
# VTS team
yuexima@google.com
diff --git a/radio/1.1/vts/functional/Android.bp b/radio/1.1/vts/functional/Android.bp
index 9000eb2..e7195ee 100644
--- a/radio/1.1/vts/functional/Android.bp
+++ b/radio/1.1/vts/functional/Android.bp
@@ -16,30 +16,18 @@
cc_test {
name: "VtsHalRadioV1_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["radio_hidl_hal_api.cpp",
"radio_hidl_hal_test.cpp",
"radio_indication.cpp",
"radio_response.cpp",
"VtsHalRadioV1_1TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
+ static_libs: [
+ "RadioVtsTestUtilBase",
"android.hardware.radio@1.1",
"android.hardware.radio@1.0",
],
- static_libs: ["VtsHalHidlTargetTestBase",
- "RadioVtsTestUtilBase"],
header_libs: [
"radio.util.header@1.0",
],
- cflags: [
- "-O0",
- "-g",
- ],
}
diff --git a/radio/1.1/vts/functional/radio_hidl_hal_api.cpp b/radio/1.1/vts/functional/radio_hidl_hal_api.cpp
index 36fd7c2..10f8f62 100644
--- a/radio/1.1/vts/functional/radio_hidl_hal_api.cpp
+++ b/radio/1.1/vts/functional/radio_hidl_hal_api.cpp
@@ -62,10 +62,12 @@
EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial);
if (cardStatus.cardState == CardState::ABSENT) {
+ ALOGI("startNetworkScan, rspInfo.error = %d\n", (int32_t)radioRsp_v1_1->rspInfo.error);
ASSERT_TRUE(radioRsp_v1_1->rspInfo.error == RadioError::NONE ||
radioRsp_v1_1->rspInfo.error == RadioError::SIM_ABSENT ||
radioRsp_v1_1->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
- radioRsp_v1_1->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED);
+ radioRsp_v1_1->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED ||
+ radioRsp_v1_1->rspInfo.error == RadioError::OPERATION_NOT_ALLOWED);
}
}
@@ -85,6 +87,8 @@
EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial);
if (cardStatus.cardState == CardState::ABSENT) {
+ ALOGI("startNetworkScan_InvalidArgument, rspInfo.error = %d\n",
+ (int32_t)radioRsp_v1_1->rspInfo.error);
ASSERT_TRUE(radioRsp_v1_1->rspInfo.error == RadioError::INVALID_ARGUMENTS ||
radioRsp_v1_1->rspInfo.error == RadioError::SIM_ABSENT ||
radioRsp_v1_1->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED);
@@ -103,6 +107,7 @@
EXPECT_EQ(serial, radioRsp_v1_1->rspInfo.serial);
if (cardStatus.cardState == CardState::ABSENT) {
+ ALOGI("stopNetworkScan rspInfo.error = %d\n", (int32_t)radioRsp_v1_1->rspInfo.error);
ASSERT_TRUE(radioRsp_v1_1->rspInfo.error == RadioError::NONE ||
radioRsp_v1_1->rspInfo.error == RadioError::SIM_ABSENT ||
radioRsp_v1_1->rspInfo.error == RadioError::REQUEST_NOT_SUPPORTED);
diff --git a/radio/deprecated/1.0/Android.bp b/radio/deprecated/1.0/Android.bp
index f4a6666..e63ed28 100644
--- a/radio/deprecated/1.0/Android.bp
+++ b/radio/deprecated/1.0/Android.bp
@@ -56,6 +56,9 @@
generated_headers: ["android.hardware.radio.deprecated@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.radio.deprecated@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/renderscript/1.0/Android.bp b/renderscript/1.0/Android.bp
index 2632505..0f62652 100644
--- a/renderscript/1.0/Android.bp
+++ b/renderscript/1.0/Android.bp
@@ -53,6 +53,10 @@
generated_headers: ["android.hardware.renderscript@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.renderscript@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ support_system_process: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/renderscript/1.0/vts/functional/Android.bp b/renderscript/1.0/vts/functional/Android.bp
index 5256c1f..bf011e6 100644
--- a/renderscript/1.0/vts/functional/Android.bp
+++ b/renderscript/1.0/vts/functional/Android.bp
@@ -23,21 +23,9 @@
"VtsScriptTests.cpp",
"bitcode.cpp",
],
- defaults: ["hidl_defaults"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "libnativewindow",
+ defaults: ["VtsHalTargetTestDefaults"],
+ static_libs: [
"android.hardware.renderscript@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
+ "libnativewindow",
],
}
diff --git a/sensors/1.0/Android.bp b/sensors/1.0/Android.bp
index f6cf4a7..b2cda05 100644
--- a/sensors/1.0/Android.bp
+++ b/sensors/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.sensors@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.sensors@1.0_genc++"],
generated_headers: ["android.hardware.sensors@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.sensors@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/sensors/1.0/vts/functional/Android.bp b/sensors/1.0/vts/functional/Android.bp
index af149ba..a49307d 100644
--- a/sensors/1.0/vts/functional/Android.bp
+++ b/sensors/1.0/vts/functional/Android.bp
@@ -16,19 +16,8 @@
cc_test {
name: "VtsHalSensorsV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalSensorsV1_0TargetTest.cpp"],
- shared_libs: [
- "android.hardware.sensors@1.0",
- "libcutils",
- "libhidlbase",
- "liblog",
- "libutils",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.sensors@1.0"],
}
diff --git a/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp b/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp
index 3006508..357270f 100644
--- a/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp
+++ b/sensors/1.0/vts/functional/VtsHalSensorsV1_0TargetTest.cpp
@@ -1235,6 +1235,11 @@
SensorInfo sensor = defaultSensorByType(type);
+ if (!isValidType(sensor.type)) {
+ // no default sensor of this type
+ return;
+ }
+
if (!isDirectReportRateSupported(sensor, rate)) {
return;
}
diff --git a/soundtrigger/2.0/Android.bp b/soundtrigger/2.0/Android.bp
index 8259776..f45c4e2 100644
--- a/soundtrigger/2.0/Android.bp
+++ b/soundtrigger/2.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.soundtrigger@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.soundtrigger@2.0_genc++"],
generated_headers: ["android.hardware.soundtrigger@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.soundtrigger@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/soundtrigger/2.0/vts/functional/Android.bp b/soundtrigger/2.0/vts/functional/Android.bp
index 8f0cc4e..be6b3a8 100644
--- a/soundtrigger/2.0/vts/functional/Android.bp
+++ b/soundtrigger/2.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalSoundtriggerV2_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalSoundtriggerV2_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.soundtrigger@2.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.soundtrigger@2.0"],
}
diff --git a/tests/bar/1.0/Android.bp b/tests/bar/1.0/Android.bp
index b6ee042..2dbfb0f 100644
--- a/tests/bar/1.0/Android.bp
+++ b/tests/bar/1.0/Android.bp
@@ -74,6 +74,9 @@
generated_headers: ["android.hardware.tests.bar@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.bar@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/baz/1.0/Android.bp b/tests/baz/1.0/Android.bp
index ef68149..cec3039 100644
--- a/tests/baz/1.0/Android.bp
+++ b/tests/baz/1.0/Android.bp
@@ -67,6 +67,9 @@
generated_headers: ["android.hardware.tests.baz@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.baz@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/expression/1.0/Android.bp b/tests/expression/1.0/Android.bp
index bc389b0..093b660 100644
--- a/tests/expression/1.0/Android.bp
+++ b/tests/expression/1.0/Android.bp
@@ -49,6 +49,9 @@
generated_headers: ["android.hardware.tests.expression@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.expression@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/extension/light/2.0/Android.bp b/tests/extension/light/2.0/Android.bp
index 6469b45..52117b4 100644
--- a/tests/extension/light/2.0/Android.bp
+++ b/tests/extension/light/2.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.tests.extension.light@2.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.extension.light@2.0_genc++"],
generated_headers: ["android.hardware.tests.extension.light@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.extension.light@2.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/foo/1.0/Android.bp b/tests/foo/1.0/Android.bp
index 6387950..d0038ab 100644
--- a/tests/foo/1.0/Android.bp
+++ b/tests/foo/1.0/Android.bp
@@ -74,6 +74,9 @@
generated_headers: ["android.hardware.tests.foo@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.foo@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/hash/1.0/Android.bp b/tests/hash/1.0/Android.bp
index 505a4ad..336963e 100644
--- a/tests/hash/1.0/Android.bp
+++ b/tests/hash/1.0/Android.bp
@@ -42,6 +42,9 @@
generated_headers: ["android.hardware.tests.hash@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.hash@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/inheritance/1.0/Android.bp b/tests/inheritance/1.0/Android.bp
index 5d8d53d..a8c0e6c 100644
--- a/tests/inheritance/1.0/Android.bp
+++ b/tests/inheritance/1.0/Android.bp
@@ -63,6 +63,9 @@
generated_headers: ["android.hardware.tests.inheritance@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.inheritance@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/libhwbinder/1.0/Android.bp b/tests/libhwbinder/1.0/Android.bp
index 338a72b..6132628 100644
--- a/tests/libhwbinder/1.0/Android.bp
+++ b/tests/libhwbinder/1.0/Android.bp
@@ -49,6 +49,9 @@
generated_headers: ["android.hardware.tests.libhwbinder@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.libhwbinder@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/memory/1.0/Android.bp b/tests/memory/1.0/Android.bp
index a753824..c5cc4a0 100644
--- a/tests/memory/1.0/Android.bp
+++ b/tests/memory/1.0/Android.bp
@@ -42,6 +42,9 @@
generated_headers: ["android.hardware.tests.memory@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.memory@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/msgq/1.0/Android.bp b/tests/msgq/1.0/Android.bp
index 0937545..017e0d4 100644
--- a/tests/msgq/1.0/Android.bp
+++ b/tests/msgq/1.0/Android.bp
@@ -49,6 +49,9 @@
generated_headers: ["android.hardware.tests.msgq@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.msgq@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/multithread/1.0/Android.bp b/tests/multithread/1.0/Android.bp
index 5f4c44c..68c19aa 100644
--- a/tests/multithread/1.0/Android.bp
+++ b/tests/multithread/1.0/Android.bp
@@ -42,6 +42,9 @@
generated_headers: ["android.hardware.tests.multithread@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.multithread@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tests/pointer/1.0/Android.bp b/tests/pointer/1.0/Android.bp
index a765ae7..55598ca 100644
--- a/tests/pointer/1.0/Android.bp
+++ b/tests/pointer/1.0/Android.bp
@@ -49,6 +49,9 @@
generated_headers: ["android.hardware.tests.pointer@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.pointer@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tetheroffload/Android.bp b/tetheroffload/Android.bp
index 4b50f11..f3c7021 100644
--- a/tetheroffload/Android.bp
+++ b/tetheroffload/Android.bp
@@ -1,5 +1,7 @@
// This is an autogenerated file, do not edit.
subdirs = [
"config/1.0",
+ "config/1.0/vts/functional",
"control/1.0",
+ "control/1.0/vts/functional",
]
diff --git a/tetheroffload/config/1.0/Android.bp b/tetheroffload/config/1.0/Android.bp
index 4a92829..2d62f16 100644
--- a/tetheroffload/config/1.0/Android.bp
+++ b/tetheroffload/config/1.0/Android.bp
@@ -42,6 +42,9 @@
generated_headers: ["android.hardware.tetheroffload.config@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tetheroffload.config@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tetheroffload/config/1.0/vts/functional/Android.bp b/tetheroffload/config/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..dc95eaa
--- /dev/null
+++ b/tetheroffload/config/1.0/vts/functional/Android.bp
@@ -0,0 +1,20 @@
+// 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.
+
+cc_test {
+ name: "VtsHalTetheroffloadConfigV1_0TargetTest",
+ defaults: ["VtsHalTargetTestDefaults"],
+ srcs: ["VtsHalTetheroffloadConfigV1_0TargetTest.cpp"],
+ static_libs: ["android.hardware.tetheroffload.config@1.0"],
+}
diff --git a/tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp b/tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp
new file mode 100644
index 0000000..fc61e1c
--- /dev/null
+++ b/tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp
@@ -0,0 +1,171 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "VtsOffloadConfigV1_0TargetTest"
+
+#include <VtsHalHidlTargetTestBase.h>
+#include <android-base/stringprintf.h>
+#include <android-base/unique_fd.h>
+#include <android/hardware/tetheroffload/config/1.0/IOffloadConfig.h>
+#include <linux/netfilter/nfnetlink.h>
+#include <linux/netlink.h>
+#include <linux/rtnetlink.h>
+#include <log/log.h>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <set>
+
+using android::base::StringPrintf;
+using android::base::unique_fd;
+using android::hardware::hidl_handle;
+using android::hardware::hidl_string;
+using android::hardware::Return;
+using android::hardware::tetheroffload::config::V1_0::IOffloadConfig;
+using android::hardware::Void;
+using android::sp;
+
+#define ASSERT_TRUE_CALLBACK \
+ [&](bool success, const hidl_string& errMsg) { ASSERT_TRUE(success) << errMsg.c_str(); }
+
+#define ASSERT_FALSE_CALLBACK \
+ [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); }
+
+const unsigned kFd1Groups = NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY;
+const unsigned kFd2Groups = NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY;
+
+inline const sockaddr* asSockaddr(const sockaddr_nl* nladdr) {
+ return reinterpret_cast<const sockaddr*>(nladdr);
+}
+
+int netlinkSocket(int protocol, unsigned groups) {
+ unique_fd s(socket(AF_NETLINK, SOCK_DGRAM, protocol));
+ if (s.get() < 0) {
+ return -errno;
+ }
+
+ const struct sockaddr_nl bind_addr = {
+ .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups,
+ };
+ if (::bind(s.get(), asSockaddr(&bind_addr), sizeof(bind_addr)) != 0) {
+ return -errno;
+ }
+
+ const struct sockaddr_nl kernel_addr = {
+ .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups,
+ };
+ if (::connect(s.get(), asSockaddr(&kernel_addr), sizeof(kernel_addr)) != 0) {
+ return -errno;
+ }
+
+ return s.release();
+}
+
+int netlinkSocket(unsigned groups) {
+ return netlinkSocket(NETLINK_NETFILTER, groups);
+}
+
+class OffloadConfigHidlTest : public testing::VtsHalHidlTargetTestBase {
+ public:
+ virtual void SetUp() override {
+ config = testing::VtsHalHidlTargetTestBase::getService<IOffloadConfig>();
+ ASSERT_NE(nullptr, config.get()) << "Could not get HIDL instance";
+ }
+
+ virtual void TearDown() override {}
+
+ sp<IOffloadConfig> config;
+};
+
+// Ensure handles can be set with correct socket options.
+TEST_F(OffloadConfigHidlTest, TestSetHandles) {
+ unique_fd fd1(netlinkSocket(kFd1Groups));
+ if (fd1.get() < 0) {
+ ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno));
+ FAIL();
+ }
+ native_handle_t* const nativeHandle1 = native_handle_create(1, 0);
+ nativeHandle1->data[0] = fd1.release();
+ const hidl_handle h1 = hidl_handle(nativeHandle1);
+
+ unique_fd fd2(netlinkSocket(kFd2Groups));
+ if (fd2.get() < 0) {
+ ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno));
+ FAIL();
+ }
+ native_handle_t* const nativeHandle2 = native_handle_create(1, 0);
+ nativeHandle2->data[0] = fd2.release();
+ const hidl_handle h2 = hidl_handle(nativeHandle2);
+
+ const Return<void> ret = config->setHandles(h1, h2, ASSERT_TRUE_CALLBACK);
+ ASSERT_TRUE(ret.isOk());
+}
+
+// Passing a handle without an associated file descriptor should return an error
+// (e.g. "Failed Input Checks"). Check that this occurs when both FDs are empty.
+TEST_F(OffloadConfigHidlTest, TestSetHandleNone) {
+ native_handle_t* const nativeHandle1 = native_handle_create(0, 0);
+ const hidl_handle h1 = hidl_handle(nativeHandle1);
+ native_handle_t* const nativeHandle2 = native_handle_create(0, 0);
+ const hidl_handle h2 = hidl_handle(nativeHandle2);
+
+ const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK);
+ ASSERT_TRUE(ret.isOk());
+}
+
+// Passing a handle without an associated file descriptor should return an error
+// (e.g. "Failed Input Checks"). Check that this occurs when FD2 is empty.
+TEST_F(OffloadConfigHidlTest, TestSetHandle1Only) {
+ unique_fd fd1(netlinkSocket(kFd1Groups));
+ if (fd1.get() < 0) {
+ ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno));
+ FAIL();
+ }
+ native_handle_t* const nativeHandle1 = native_handle_create(1, 0);
+ nativeHandle1->data[0] = fd1.release();
+ const hidl_handle h1 = hidl_handle(nativeHandle1);
+
+ native_handle_t* const nativeHandle2 = native_handle_create(0, 0);
+ const hidl_handle h2 = hidl_handle(nativeHandle2);
+
+ const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK);
+ ASSERT_TRUE(ret.isOk());
+}
+
+// Passing a handle without an associated file descriptor should return an error
+// (e.g. "Failed Input Checks"). Check that this occurs when FD1 is empty.
+TEST_F(OffloadConfigHidlTest, TestSetHandle2OnlyNotOk) {
+ native_handle_t* const nativeHandle1 = native_handle_create(0, 0);
+ const hidl_handle h1 = hidl_handle(nativeHandle1);
+
+ unique_fd fd2(netlinkSocket(kFd2Groups));
+ if (fd2.get() < 0) {
+ ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno));
+ FAIL();
+ }
+ native_handle_t* const nativeHandle2 = native_handle_create(1, 0);
+ nativeHandle2->data[0] = fd2.release();
+ const hidl_handle h2 = hidl_handle(nativeHandle2);
+
+ const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK);
+ ASSERT_TRUE(ret.isOk());
+}
+
+int main(int argc, char** argv) {
+ testing::InitGoogleTest(&argc, argv);
+ int status = RUN_ALL_TESTS();
+ ALOGE("Test result with status=%d", status);
+ return status;
+}
diff --git a/tetheroffload/control/1.0/Android.bp b/tetheroffload/control/1.0/Android.bp
index 707ec3a..72f410e 100644
--- a/tetheroffload/control/1.0/Android.bp
+++ b/tetheroffload/control/1.0/Android.bp
@@ -53,6 +53,9 @@
generated_headers: ["android.hardware.tetheroffload.control@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tetheroffload.control@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tetheroffload/control/1.0/vts/functional/Android.bp b/tetheroffload/control/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..c6216a2
--- /dev/null
+++ b/tetheroffload/control/1.0/vts/functional/Android.bp
@@ -0,0 +1,23 @@
+// 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.
+
+cc_test {
+ name: "VtsHalTetheroffloadControlV1_0TargetTest",
+ defaults: ["VtsHalTargetTestDefaults"],
+ srcs: ["VtsHalTetheroffloadControlV1_0TargetTest.cpp"],
+ static_libs: [
+ "android.hardware.tetheroffload.config@1.0",
+ "android.hardware.tetheroffload.control@1.0",
+ ],
+}
diff --git a/tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp b/tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp
new file mode 100644
index 0000000..3059eac
--- /dev/null
+++ b/tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp
@@ -0,0 +1,625 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "VtsOffloadControlV1_0TargetTest"
+
+#include <VtsHalHidlTargetCallbackBase.h>
+#include <VtsHalHidlTargetTestBase.h>
+#include <android-base/stringprintf.h>
+#include <android-base/unique_fd.h>
+#include <android/hardware/tetheroffload/config/1.0/IOffloadConfig.h>
+#include <android/hardware/tetheroffload/control/1.0/IOffloadControl.h>
+#include <android/hardware/tetheroffload/control/1.0/types.h>
+#include <linux/netfilter/nfnetlink.h>
+#include <linux/netlink.h>
+#include <log/log.h>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <set>
+
+using android::base::StringPrintf;
+using android::base::unique_fd;
+using android::hardware::hidl_handle;
+using android::hardware::hidl_string;
+using android::hardware::hidl_vec;
+using android::hardware::Return;
+using android::hardware::tetheroffload::config::V1_0::IOffloadConfig;
+using android::hardware::tetheroffload::control::V1_0::IOffloadControl;
+using android::hardware::tetheroffload::control::V1_0::IPv4AddrPortPair;
+using android::hardware::tetheroffload::control::V1_0::ITetheringOffloadCallback;
+using android::hardware::tetheroffload::control::V1_0::OffloadCallbackEvent;
+using android::hardware::tetheroffload::control::V1_0::NatTimeoutUpdate;
+using android::hardware::tetheroffload::control::V1_0::NetworkProtocol;
+using android::hardware::Void;
+using android::sp;
+
+// We use #defines here so as to get local lamba captures and error message line numbers
+#define ASSERT_TRUE_CALLBACK \
+ [&](bool success, std::string errMsg) { \
+ if (!success) { \
+ ALOGI("Error message: %s", errMsg.c_str()); \
+ } \
+ ASSERT_TRUE(success); \
+ }
+
+#define ASSERT_FALSE_CALLBACK \
+ [&](bool success, std::string errMsg) { \
+ if (!success) { \
+ ALOGI("Error message: %s", errMsg.c_str()); \
+ } \
+ ASSERT_FALSE(success); \
+ }
+
+#define ASSERT_ZERO_BYTES_CALLBACK \
+ [&](uint64_t rxBytes, uint64_t txBytes) { \
+ EXPECT_EQ(0ULL, rxBytes); \
+ EXPECT_EQ(0ULL, txBytes); \
+ }
+
+inline const sockaddr* asSockaddr(const sockaddr_nl* nladdr) {
+ return reinterpret_cast<const sockaddr*>(nladdr);
+}
+
+int conntrackSocket(unsigned groups) {
+ unique_fd s(socket(AF_NETLINK, SOCK_DGRAM, NETLINK_NETFILTER));
+ if (s.get() < 0) {
+ return -errno;
+ }
+
+ const struct sockaddr_nl bind_addr = {
+ .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups,
+ };
+ if (::bind(s.get(), asSockaddr(&bind_addr), sizeof(bind_addr)) < 0) {
+ return -errno;
+ }
+
+ const struct sockaddr_nl kernel_addr = {
+ .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups,
+ };
+ if (connect(s.get(), asSockaddr(&kernel_addr), sizeof(kernel_addr)) != 0) {
+ return -errno;
+ }
+
+ return s.release();
+}
+
+constexpr char kCallbackOnEvent[] = "onEvent";
+constexpr char kCallbackUpdateTimeout[] = "updateTimeout";
+
+class TetheringOffloadCallbackArgs {
+ public:
+ OffloadCallbackEvent last_event;
+ NatTimeoutUpdate last_params;
+};
+
+class OffloadControlHidlTestBase : public testing::VtsHalHidlTargetTestBase {
+ public:
+ virtual void SetUp() override {
+ setupConfigHal();
+ prepareControlHal();
+ }
+
+ virtual void TearDown() override { stopOffload(false); }
+
+ // The IOffloadConfig HAL is tested more thoroughly elsewhere. He we just
+ // setup everything correctly and verify basic readiness.
+ void setupConfigHal() {
+ config = testing::VtsHalHidlTargetTestBase::getService<IOffloadConfig>();
+ ASSERT_NE(nullptr, config.get()) << "Could not get HIDL instance";
+
+ unique_fd fd1(conntrackSocket(NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY));
+ if (fd1.get() < 0) {
+ ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno));
+ FAIL();
+ }
+ native_handle_t* const nativeHandle1 = native_handle_create(1, 0);
+ nativeHandle1->data[0] = fd1.release();
+ hidl_handle h1 = hidl_handle(nativeHandle1);
+
+ unique_fd fd2(conntrackSocket(NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY));
+ if (fd2.get() < 0) {
+ ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno));
+ FAIL();
+ }
+ native_handle_t* const nativeHandle2 = native_handle_create(1, 0);
+ nativeHandle2->data[0] = fd2.release();
+ hidl_handle h2 = hidl_handle(nativeHandle2);
+
+ const Return<void> ret = config->setHandles(h1, h2, ASSERT_TRUE_CALLBACK);
+ ASSERT_TRUE(ret.isOk());
+ }
+
+ void prepareControlHal() {
+ control = testing::VtsHalHidlTargetTestBase::getService<IOffloadControl>();
+ ASSERT_NE(nullptr, control.get()) << "Could not get HIDL instance";
+
+ control_cb = new TetheringOffloadCallback();
+ ASSERT_NE(nullptr, control_cb.get()) << "Could not get get offload callback";
+ }
+
+ void initOffload(const bool expected_result) {
+ auto init_cb = [&](bool success, std::string errMsg) {
+ if (!success) {
+ ALOGI("Error message: %s", errMsg.c_str());
+ }
+ ASSERT_EQ(expected_result, success);
+ };
+ const Return<void> ret = control->initOffload(control_cb, init_cb);
+ ASSERT_TRUE(ret.isOk());
+ }
+
+ void setupControlHal() {
+ prepareControlHal();
+ initOffload(true);
+ }
+
+ void stopOffload(const bool expected_result) {
+ auto cb = [&](bool success, const hidl_string& errMsg) {
+ if (!success) {
+ ALOGI("Error message: %s", errMsg.c_str());
+ }
+ ASSERT_EQ(expected_result, success);
+ };
+ const Return<void> ret = control->stopOffload(cb);
+ ASSERT_TRUE(ret.isOk());
+ }
+
+ // Callback class for both events and NAT timeout updates.
+ class TetheringOffloadCallback
+ : public testing::VtsHalHidlTargetCallbackBase<TetheringOffloadCallbackArgs>,
+ public ITetheringOffloadCallback {
+ public:
+ TetheringOffloadCallback() = default;
+ virtual ~TetheringOffloadCallback() = default;
+
+ Return<void> onEvent(OffloadCallbackEvent event) override {
+ const TetheringOffloadCallbackArgs args{.last_event = event};
+ NotifyFromCallback(kCallbackOnEvent, args);
+ return Void();
+ };
+
+ Return<void> updateTimeout(const NatTimeoutUpdate& params) override {
+ const TetheringOffloadCallbackArgs args{.last_params = params};
+ NotifyFromCallback(kCallbackUpdateTimeout, args);
+ return Void();
+ };
+ };
+
+ sp<IOffloadConfig> config;
+ sp<IOffloadControl> control;
+ sp<TetheringOffloadCallback> control_cb;
+};
+
+// Call initOffload() multiple times. Check that non-first initOffload() calls return false.
+TEST_F(OffloadControlHidlTestBase, AdditionalInitsWithoutStopReturnFalse) {
+ initOffload(true);
+ initOffload(false);
+ initOffload(false);
+ initOffload(false);
+ stopOffload(true); // balance out initOffload(true)
+}
+
+// Check that calling stopOffload() without first having called initOffload() returns false.
+TEST_F(OffloadControlHidlTestBase, MultipleStopsWithoutInitReturnFalse) {
+ stopOffload(false);
+ stopOffload(false);
+ stopOffload(false);
+}
+
+// Check that calling stopOffload() after a complete init/stop cycle returns false.
+TEST_F(OffloadControlHidlTestBase, AdditionalStopsWithInitReturnFalse) {
+ initOffload(true);
+ stopOffload(true); // balance out initOffload(true)
+ stopOffload(false);
+ stopOffload(false);
+}
+
+// Check that calling setLocalPrefixes() without first having called initOffload() returns false.
+TEST_F(OffloadControlHidlTestBase, SetLocalPrefixesWithoutInitReturnsFalse) {
+ const vector<hidl_string> prefixes{hidl_string("2001:db8::/64")};
+ const Return<void> ret = control->setLocalPrefixes(prefixes, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Check that calling getForwardedStats() without first having called initOffload()
+// returns zero bytes statistics.
+TEST_F(OffloadControlHidlTestBase, GetForwardedStatsWithoutInitReturnsZeroValues) {
+ const hidl_string upstream("rmnet_data0");
+ const Return<void> ret = control->getForwardedStats(upstream, ASSERT_ZERO_BYTES_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Check that calling setDataLimit() without first having called initOffload() returns false.
+TEST_F(OffloadControlHidlTestBase, SetDataLimitWithoutInitReturnsFalse) {
+ const hidl_string upstream("rmnet_data0");
+ const uint64_t limit = 5000ULL;
+ const Return<void> ret = control->setDataLimit(upstream, limit, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Check that calling setUpstreamParameters() without first having called initOffload()
+// returns false.
+TEST_F(OffloadControlHidlTestBase, SetUpstreamParametersWithoutInitReturnsFalse) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Addr("192.0.2.0/24");
+ const hidl_string v4Gw("192.0.2.1");
+ const vector<hidl_string> v6Gws{hidl_string("fe80::db8:1")};
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Check that calling addDownstream() with an IPv4 prefix without first having called
+// initOffload() returns false.
+TEST_F(OffloadControlHidlTestBase, AddIPv4DownstreamWithoutInitReturnsFalse) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string prefix("192.0.2.0/24");
+ const Return<void> ret = control->addDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Check that calling addDownstream() with an IPv6 prefix without first having called
+// initOffload() returns false.
+TEST_F(OffloadControlHidlTestBase, AddIPv6DownstreamWithoutInitReturnsFalse) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string prefix("2001:db8::/64");
+ const Return<void> ret = control->addDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Check that calling removeDownstream() with an IPv4 prefix without first having called
+// initOffload() returns false.
+TEST_F(OffloadControlHidlTestBase, RemoveIPv4DownstreamWithoutInitReturnsFalse) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string prefix("192.0.2.0/24");
+ const Return<void> ret = control->removeDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Check that calling removeDownstream() with an IPv6 prefix without first having called
+// initOffload() returns false.
+TEST_F(OffloadControlHidlTestBase, RemoveIPv6DownstreamWithoutInitReturnsFalse) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string prefix("2001:db8::/64");
+ const Return<void> ret = control->removeDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+class OffloadControlHidlTest : public OffloadControlHidlTestBase {
+ public:
+ virtual void SetUp() override {
+ setupConfigHal();
+ setupControlHal();
+ }
+
+ virtual void TearDown() override { stopOffload(true); }
+};
+
+/*
+ * Tests for IOffloadControl::setLocalPrefixes().
+ */
+
+// Test setLocalPrefixes() accepts an IPv4 address.
+TEST_F(OffloadControlHidlTest, SetLocalPrefixesIPv4AddressOk) {
+ const vector<hidl_string> prefixes{hidl_string("192.0.2.1")};
+ const Return<void> ret = control->setLocalPrefixes(prefixes, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test setLocalPrefixes() accepts an IPv6 address.
+TEST_F(OffloadControlHidlTest, SetLocalPrefixesIPv6AddressOk) {
+ const vector<hidl_string> prefixes{hidl_string("fe80::1")};
+ const Return<void> ret = control->setLocalPrefixes(prefixes, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test setLocalPrefixes() accepts both IPv4 and IPv6 prefixes.
+TEST_F(OffloadControlHidlTest, SetLocalPrefixesIPv4v6PrefixesOk) {
+ const vector<hidl_string> prefixes{hidl_string("192.0.2.0/24"), hidl_string("fe80::/64")};
+ const Return<void> ret = control->setLocalPrefixes(prefixes, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test that setLocalPrefixes() fails given empty input. There is always
+// a non-empty set of local prefixes; when all networking interfaces are down
+// we still apply {127.0.0.0/8, ::1/128, fe80::/64} here.
+TEST_F(OffloadControlHidlTest, SetLocalPrefixesEmptyFails) {
+ const vector<hidl_string> prefixes{};
+ const Return<void> ret = control->setLocalPrefixes(prefixes, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test setLocalPrefixes() fails on incorrectly formed input strings.
+TEST_F(OffloadControlHidlTest, SetLocalPrefixesInvalidFails) {
+ const vector<hidl_string> prefixes{hidl_string("192.0.2.0/24"), hidl_string("invalid")};
+ const Return<void> ret = control->setLocalPrefixes(prefixes, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+/*
+ * Tests for IOffloadControl::getForwardedStats().
+ */
+
+// Test that getForwardedStats() for a non-existent upstream yields zero bytes statistics.
+TEST_F(OffloadControlHidlTest, GetForwardedStatsInvalidUpstreamIface) {
+ const hidl_string upstream("invalid");
+ const Return<void> ret = control->getForwardedStats(upstream, ASSERT_ZERO_BYTES_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// The "rmnet_data0" is presumed to exist on the device and be up. No packets
+// are ever actually caused to be forwarded.
+TEST_F(OffloadControlHidlTest, GetForwardedStatsDummyIface) {
+ const hidl_string upstream("rmnet_data0");
+ const Return<void> ret = control->getForwardedStats(upstream, ASSERT_ZERO_BYTES_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+/*
+ * Tests for IOffloadControl::setDataLimit().
+ */
+
+// Test that setDataLimit() for an empty interface name fails.
+TEST_F(OffloadControlHidlTest, SetDataLimitEmptyUpstreamIfaceFails) {
+ const hidl_string upstream("");
+ const uint64_t limit = 5000ULL;
+ const Return<void> ret = control->setDataLimit(upstream, limit, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// The "rmnet_data0" is presumed to exist on the device and be up. No packets
+// are ever actually caused to be forwarded.
+TEST_F(OffloadControlHidlTest, SetDataLimitNonZeroOk) {
+ const hidl_string upstream("rmnet_data0");
+ const uint64_t limit = 5000ULL;
+ const Return<void> ret = control->setDataLimit(upstream, limit, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// The "rmnet_data0" is presumed to exist on the device and be up. No packets
+// are ever actually caused to be forwarded.
+TEST_F(OffloadControlHidlTest, SetDataLimitZeroOk) {
+ const hidl_string upstream("rmnet_data0");
+ const uint64_t limit = 0ULL;
+ const Return<void> ret = control->setDataLimit(upstream, limit, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+/*
+ * Tests for IOffloadControl::setUpstreamParameters().
+ */
+
+// The "rmnet_data0" is presumed to exist on the device and be up. No packets
+// are ever actually caused to be forwarded.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersIPv6OnlyOk) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Addr("");
+ const hidl_string v4Gw("");
+ const vector<hidl_string> v6Gws{hidl_string("fe80::db8:1"), hidl_string("fe80::db8:2")};
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// The "rmnet_data0" is presumed to exist on the device and be up. No packets
+// are ever actually caused to be forwarded.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersAlternateIPv6OnlyOk) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Addr;
+ const hidl_string v4Gw;
+ const vector<hidl_string> v6Gws{hidl_string("fe80::db8:1"), hidl_string("fe80::db8:3")};
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// The "rmnet_data0" is presumed to exist on the device and be up. No packets
+// are ever actually caused to be forwarded.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersIPv4OnlyOk) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Addr("192.0.2.2");
+ const hidl_string v4Gw("192.0.2.1");
+ const vector<hidl_string> v6Gws{};
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// The "rmnet_data0" is presumed to exist on the device and be up. No packets
+// are ever actually caused to be forwarded.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersIPv4v6Ok) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Addr("192.0.2.2");
+ const hidl_string v4Gw("192.0.2.1");
+ const vector<hidl_string> v6Gws{hidl_string("fe80::db8:1"), hidl_string("fe80::db8:2")};
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test that setUpstreamParameters() fails when all parameters are empty.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersEmptyFails) {
+ const hidl_string iface("");
+ const hidl_string v4Addr("");
+ const hidl_string v4Gw("");
+ const vector<hidl_string> v6Gws{};
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test that setUpstreamParameters() fails when given empty or non-existent interface names.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersBogusIfaceFails) {
+ const hidl_string v4Addr("192.0.2.2");
+ const hidl_string v4Gw("192.0.2.1");
+ const vector<hidl_string> v6Gws{hidl_string("fe80::db8:1")};
+ for (const auto& bogus : {"", "invalid"}) {
+ SCOPED_TRACE(StringPrintf("iface='%s'", bogus));
+ const hidl_string iface(bogus);
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+// Test that setUpstreamParameters() fails when given unparseable IPv4 addresses.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersInvalidIPv4AddrFails) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Gw("192.0.2.1");
+ const vector<hidl_string> v6Gws{hidl_string("fe80::db8:1")};
+ for (const auto& bogus : {"invalid", "192.0.2"}) {
+ SCOPED_TRACE(StringPrintf("v4addr='%s'", bogus));
+ const hidl_string v4Addr(bogus);
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+// Test that setUpstreamParameters() fails when given unparseable IPv4 gateways.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersInvalidIPv4GatewayFails) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Addr("192.0.2.2");
+ const vector<hidl_string> v6Gws{hidl_string("fe80::db8:1")};
+ for (const auto& bogus : {"invalid", "192.0.2"}) {
+ SCOPED_TRACE(StringPrintf("v4gateway='%s'", bogus));
+ const hidl_string v4Gw(bogus);
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+// Test that setUpstreamParameters() fails when given unparseable IPv6 gateways.
+TEST_F(OffloadControlHidlTest, SetUpstreamParametersBadIPv6GatewaysFail) {
+ const hidl_string iface("rmnet_data0");
+ const hidl_string v4Addr("192.0.2.2");
+ const hidl_string v4Gw("192.0.2.1");
+ for (const auto& bogus : {"", "invalid", "fe80::bogus", "192.0.2.66"}) {
+ SCOPED_TRACE(StringPrintf("v6gateway='%s'", bogus));
+ const vector<hidl_string> v6Gws{hidl_string("fe80::1"), hidl_string(bogus)};
+ const Return<void> ret =
+ control->setUpstreamParameters(iface, v4Addr, v4Gw, v6Gws, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+/*
+ * Tests for IOffloadControl::addDownstream().
+ */
+
+// Test addDownstream() works given an IPv4 prefix.
+TEST_F(OffloadControlHidlTest, AddDownstreamIPv4) {
+ const hidl_string iface("dummy0");
+ const hidl_string prefix("192.0.2.0/24");
+ const Return<void> ret = control->addDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test addDownstream() works given an IPv6 prefix.
+TEST_F(OffloadControlHidlTest, AddDownstreamIPv6) {
+ const hidl_string iface("dummy0");
+ const hidl_string prefix("2001:db8::/64");
+ const Return<void> ret = control->addDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test addDownstream() fails given all empty parameters.
+TEST_F(OffloadControlHidlTest, AddDownstreamEmptyFails) {
+ const hidl_string iface("");
+ const hidl_string prefix("");
+ const Return<void> ret = control->addDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test addDownstream() fails given empty or non-existent interface names.
+TEST_F(OffloadControlHidlTest, AddDownstreamInvalidIfaceFails) {
+ const hidl_string prefix("192.0.2.0/24");
+ for (const auto& bogus : {"", "invalid"}) {
+ SCOPED_TRACE(StringPrintf("iface='%s'", bogus));
+ const hidl_string iface(bogus);
+ const Return<void> ret = control->addDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+// Test addDownstream() fails given unparseable prefix arguments.
+TEST_F(OffloadControlHidlTest, AddDownstreamBogusPrefixFails) {
+ const hidl_string iface("dummy0");
+ for (const auto& bogus : {"", "192.0.2/24", "2001:db8/64"}) {
+ SCOPED_TRACE(StringPrintf("prefix='%s'", bogus));
+ const hidl_string prefix(bogus);
+ const Return<void> ret = control->addDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+/*
+ * Tests for IOffloadControl::removeDownstream().
+ */
+
+// Test removeDownstream() works given an IPv4 prefix.
+TEST_F(OffloadControlHidlTest, RemoveDownstreamIPv4) {
+ const hidl_string iface("dummy0");
+ const hidl_string prefix("192.0.2.0/24");
+ const Return<void> ret = control->removeDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test removeDownstream() works given an IPv6 prefix.
+TEST_F(OffloadControlHidlTest, RemoveDownstreamIPv6) {
+ const hidl_string iface("dummy0");
+ const hidl_string prefix("2001:db8::/64");
+ const Return<void> ret = control->removeDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test removeDownstream() fails given all empty parameters.
+TEST_F(OffloadControlHidlTest, RemoveDownstreamEmptyFails) {
+ const hidl_string iface("");
+ const hidl_string prefix("");
+ const Return<void> ret = control->removeDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+}
+
+// Test removeDownstream() fails given empty or non-existent interface names.
+TEST_F(OffloadControlHidlTest, RemoveDownstreamBogusIfaceFails) {
+ const hidl_string prefix("192.0.2.0/24");
+ for (const auto& bogus : {"", "invalid"}) {
+ SCOPED_TRACE(StringPrintf("iface='%s'", bogus));
+ const hidl_string iface(bogus);
+ const Return<void> ret = control->removeDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+// Test removeDownstream() fails given unparseable prefix arguments.
+TEST_F(OffloadControlHidlTest, RemoveDownstreamBogusPrefixFails) {
+ const hidl_string iface("dummy0");
+ for (const auto& bogus : {"", "192.0.2/24", "2001:db8/64"}) {
+ SCOPED_TRACE(StringPrintf("prefix='%s'", bogus));
+ const hidl_string prefix(bogus);
+ const Return<void> ret = control->removeDownstream(iface, prefix, ASSERT_FALSE_CALLBACK);
+ EXPECT_TRUE(ret.isOk());
+ }
+}
+
+int main(int argc, char** argv) {
+ testing::InitGoogleTest(&argc, argv);
+ int status = RUN_ALL_TESTS();
+ ALOGE("Test result with status=%d", status);
+ return status;
+}
diff --git a/thermal/1.0/Android.bp b/thermal/1.0/Android.bp
index 6a9f9c7..aa97175 100644
--- a/thermal/1.0/Android.bp
+++ b/thermal/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.thermal@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.thermal@1.0_genc++"],
generated_headers: ["android.hardware.thermal@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.thermal@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/thermal/1.0/vts/functional/Android.bp b/thermal/1.0/vts/functional/Android.bp
index 9046882..f661f1e 100644
--- a/thermal/1.0/vts/functional/Android.bp
+++ b/thermal/1.0/vts/functional/Android.bp
@@ -16,22 +16,8 @@
cc_test {
name: "VtsHalThermalV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalThermalV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.thermal@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.thermal@1.0"],
}
diff --git a/thermal/1.1/Android.bp b/thermal/1.1/Android.bp
new file mode 100644
index 0000000..833f219
--- /dev/null
+++ b/thermal/1.1/Android.bp
@@ -0,0 +1,68 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+ name: "android.hardware.thermal@1.1_hal",
+ srcs: [
+ "IThermal.hal",
+ "IThermalCallback.hal",
+ ],
+}
+
+genrule {
+ name: "android.hardware.thermal@1.1_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.1",
+ srcs: [
+ ":android.hardware.thermal@1.1_hal",
+ ],
+ out: [
+ "android/hardware/thermal/1.1/ThermalAll.cpp",
+ "android/hardware/thermal/1.1/ThermalCallbackAll.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.thermal@1.1_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.1",
+ srcs: [
+ ":android.hardware.thermal@1.1_hal",
+ ],
+ out: [
+ "android/hardware/thermal/1.1/IThermal.h",
+ "android/hardware/thermal/1.1/IHwThermal.h",
+ "android/hardware/thermal/1.1/BnHwThermal.h",
+ "android/hardware/thermal/1.1/BpHwThermal.h",
+ "android/hardware/thermal/1.1/BsThermal.h",
+ "android/hardware/thermal/1.1/IThermalCallback.h",
+ "android/hardware/thermal/1.1/IHwThermalCallback.h",
+ "android/hardware/thermal/1.1/BnHwThermalCallback.h",
+ "android/hardware/thermal/1.1/BpHwThermalCallback.h",
+ "android/hardware/thermal/1.1/BsThermalCallback.h",
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.thermal@1.1",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.thermal@1.1_genc++"],
+ generated_headers: ["android.hardware.thermal@1.1_genc++_headers"],
+ export_generated_headers: ["android.hardware.thermal@1.1_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "android.hardware.thermal@1.0",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hardware.thermal@1.0",
+ ],
+}
diff --git a/thermal/1.1/Android.mk b/thermal/1.1/Android.mk
new file mode 100644
index 0000000..082d65b
--- /dev/null
+++ b/thermal/1.1/Android.mk
@@ -0,0 +1,120 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.thermal-V1.1-java
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_JAVA_LIBRARIES := \
+ android.hardware.thermal-V1.0-java \
+ android.hidl.base-V1.0-java \
+
+
+#
+# Build IThermal.hal
+#
+GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermal.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermal.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IThermalCallback.hal
+$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.thermal@1.1::IThermal
+
+$(GEN): $(LOCAL_PATH)/IThermal.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IThermalCallback.hal
+#
+GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermalCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermalCallback.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.thermal@1.1::IThermalCallback
+
+$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.thermal-V1.1-java-static
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir, COMMON)
+
+HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ android.hardware.thermal-V1.0-java-static \
+ android.hidl.base-V1.0-java-static \
+
+
+#
+# Build IThermal.hal
+#
+GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermal.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermal.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IThermalCallback.hal
+$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.thermal@1.1::IThermal
+
+$(GEN): $(LOCAL_PATH)/IThermal.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IThermalCallback.hal
+#
+GEN := $(intermediates)/android/hardware/thermal/V1_1/IThermalCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IThermalCallback.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava \
+ -randroid.hardware:hardware/interfaces \
+ -randroid.hidl:system/libhidl/transport \
+ android.hardware.thermal@1.1::IThermalCallback
+
+$(GEN): $(LOCAL_PATH)/IThermalCallback.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/thermal/1.1/IThermal.hal b/thermal/1.1/IThermal.hal
new file mode 100644
index 0000000..14f35ba
--- /dev/null
+++ b/thermal/1.1/IThermal.hal
@@ -0,0 +1,31 @@
+/*
+ * 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 android.hardware.thermal@1.1;
+
+import android.hardware.thermal@1.0::IThermal;
+import IThermalCallback;
+
+interface IThermal extends @1.0::IThermal {
+ /**
+ * Register an IThermalCallback, used by the Thermal HAL
+ * to send thermal events to the framework thermal service.
+ *
+ * @param callback the IThermalCallback to use for sending
+ * thermal events, or nullptr to set no callback
+ */
+ registerThermalCallback(IThermalCallback callback);
+};
diff --git a/thermal/1.1/IThermalCallback.hal b/thermal/1.1/IThermalCallback.hal
new file mode 100644
index 0000000..f418ec3
--- /dev/null
+++ b/thermal/1.1/IThermalCallback.hal
@@ -0,0 +1,33 @@
+/*
+ * 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 android.hardware.thermal@1.1;
+
+import android.hardware.thermal@1.0::Temperature;
+
+/**
+ * IThermalCallback connects vendor code to the framework binder ThermalService.
+ */
+interface IThermalCallback {
+ /**
+ * Send a thermal throttling start/stop event to all ThermalService
+ * thermal event listeners.
+ * @param isThrottling true if device is currently throttling
+ * @param temperature The temperature associated with the throttling
+ * start/stop event
+ */
+ oneway notifyThrottling(bool isThrottling, Temperature temperature);
+};
diff --git a/thermal/1.1/vts/functional/Android.bp b/thermal/1.1/vts/functional/Android.bp
new file mode 100644
index 0000000..cea5bf8
--- /dev/null
+++ b/thermal/1.1/vts/functional/Android.bp
@@ -0,0 +1,35 @@
+//
+// 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.
+//
+
+cc_test {
+ name: "VtsHalThermalV1_1TargetTest",
+ defaults: ["hidl_defaults"],
+ srcs: ["VtsHalThermalV1_1TargetTest.cpp"],
+ shared_libs: [
+ "liblog",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.thermal@1.0",
+ "android.hardware.thermal@1.1",
+ ],
+ static_libs: ["VtsHalHidlTargetTestBase"],
+ cflags: [
+ "-O0",
+ "-g",
+ ],
+}
+
diff --git a/thermal/1.1/vts/functional/VtsHalThermalV1_1TargetTest.cpp b/thermal/1.1/vts/functional/VtsHalThermalV1_1TargetTest.cpp
new file mode 100644
index 0000000..6c1599b
--- /dev/null
+++ b/thermal/1.1/vts/functional/VtsHalThermalV1_1TargetTest.cpp
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ */
+
+#include <android/hardware/thermal/1.1/IThermal.h>
+#include <android/hardware/thermal/1.1/IThermalCallback.h>
+#include <android/hardware/thermal/1.0/types.h>
+
+#include <VtsHalHidlTargetCallbackBase.h>
+#include <VtsHalHidlTargetTestBase.h>
+
+using ::android::hardware::thermal::V1_0::Temperature;
+using ::android::hardware::thermal::V1_0::TemperatureType;
+using ::android::hardware::thermal::V1_1::IThermal;
+using ::android::hardware::thermal::V1_1::IThermalCallback;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+constexpr char kCallbackNameNotifyThrottling[] = "notifyThrottling";
+static const Temperature kThrottleTemp = {
+ .type = TemperatureType::CPU,
+ .name = "test temperature sensor",
+ .currentValue = 98.6,
+ .throttlingThreshold = 58,
+ .shutdownThreshold = 60,
+ .vrThrottlingThreshold = 59,
+};
+
+class ThermalCallbackArgs {
+ public:
+ bool isThrottling;
+ Temperature temperature;
+};
+
+// Callback class for receiving thermal event notifications from main class
+class ThermalCallback
+ : public ::testing::VtsHalHidlTargetCallbackBase<ThermalCallbackArgs>,
+ public IThermalCallback {
+ public:
+ virtual ~ThermalCallback() = default;
+
+ Return<void> notifyThrottling(bool isThrottling,
+ const Temperature& temperature) override {
+ ThermalCallbackArgs args;
+ args.isThrottling = isThrottling;
+ args.temperature = temperature;
+ NotifyFromCallback(kCallbackNameNotifyThrottling, args);
+ return Void();
+ }
+};
+
+// The main test class for THERMAL HIDL HAL 1.1.
+class ThermalHidlTest : public ::testing::VtsHalHidlTargetTestBase {
+ public:
+ virtual void SetUp() override {
+ mThermal = ::testing::VtsHalHidlTargetTestBase::getService<IThermal>();
+ ASSERT_NE(mThermal, nullptr);
+ mThermalCallback = new(std::nothrow) ThermalCallback();
+ ASSERT_NE(mThermalCallback, nullptr);
+ auto ret = mThermal->registerThermalCallback(mThermalCallback);
+ ASSERT_TRUE(ret.isOk());
+ }
+
+ virtual void TearDown() override {
+ auto ret = mThermal->registerThermalCallback(nullptr);
+ ASSERT_TRUE(ret.isOk());
+ }
+
+ protected:
+ sp<IThermal> mThermal;
+ sp<ThermalCallback> mThermalCallback;
+}; // class ThermalHidlTest
+
+// Test ThermalCallback::notifyThrottling().
+// This just calls into and back from our local ThermalCallback impl.
+// Note: a real thermal throttling event from the Thermal HAL could be
+// inadvertently received here.
+TEST_F(ThermalHidlTest, NotifyThrottlingTest) {
+ auto ret = mThermalCallback->notifyThrottling(true, kThrottleTemp);
+ ASSERT_TRUE(ret.isOk());
+ auto res = mThermalCallback->WaitForCallback(kCallbackNameNotifyThrottling);
+ EXPECT_TRUE(res.no_timeout);
+ ASSERT_TRUE(res.args);
+ EXPECT_EQ(true, res.args->isThrottling);
+ EXPECT_EQ(kThrottleTemp, res.args->temperature);
+}
+
+int main(int argc, char** argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ int status = RUN_ALL_TESTS();
+ cout << "Test result = " << status << std::endl;
+ return status;
+}
diff --git a/thermal/Android.bp b/thermal/Android.bp
index ed19a37..a5415df 100644
--- a/thermal/Android.bp
+++ b/thermal/Android.bp
@@ -3,4 +3,6 @@
"1.0",
"1.0/default",
"1.0/vts/functional",
+ "1.1",
+ "1.1/vts/functional",
]
diff --git a/tv/cec/1.0/Android.bp b/tv/cec/1.0/Android.bp
index bf3ffe2..c9da737 100644
--- a/tv/cec/1.0/Android.bp
+++ b/tv/cec/1.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.tv.cec@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tv.cec@1.0_genc++"],
generated_headers: ["android.hardware.tv.cec@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tv.cec@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tv/input/1.0/Android.bp b/tv/input/1.0/Android.bp
index a3f8c94..22ea1d8 100644
--- a/tv/input/1.0/Android.bp
+++ b/tv/input/1.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.tv.input@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tv.input@1.0_genc++"],
generated_headers: ["android.hardware.tv.input@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tv.input@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/tv/input/1.0/vts/functional/Android.bp b/tv/input/1.0/vts/functional/Android.bp
index c862429..978830c 100644
--- a/tv/input/1.0/vts/functional/Android.bp
+++ b/tv/input/1.0/vts/functional/Android.bp
@@ -16,22 +16,8 @@
cc_test {
name: "VtsHalTvInputV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalTvInputV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.tv.input@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.tv.input@1.0"],
}
diff --git a/usb/1.0/Android.bp b/usb/1.0/Android.bp
index b03f75b..afe1931 100644
--- a/usb/1.0/Android.bp
+++ b/usb/1.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.usb@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.usb@1.0_genc++"],
generated_headers: ["android.hardware.usb@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.usb@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/usb/1.0/vts/functional/Android.bp b/usb/1.0/vts/functional/Android.bp
index 7438bc7..96d3c0e 100644
--- a/usb/1.0/vts/functional/Android.bp
+++ b/usb/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalUsbV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalUsbV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.usb@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.usb@1.0"],
}
diff --git a/usb/1.1/Android.bp b/usb/1.1/Android.bp
index f067606..5466001 100644
--- a/usb/1.1/Android.bp
+++ b/usb/1.1/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.usb@1.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.usb@1.1_genc++"],
generated_headers: ["android.hardware.usb@1.1_genc++_headers"],
export_generated_headers: ["android.hardware.usb@1.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/usb/1.1/vts/functional/Android.bp b/usb/1.1/vts/functional/Android.bp
index 820f794..4bb3203 100644
--- a/usb/1.1/vts/functional/Android.bp
+++ b/usb/1.1/vts/functional/Android.bp
@@ -16,23 +16,11 @@
cc_test {
name: "VtsHalUsbV1_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalUsbV1_1TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
+ static_libs: [
"android.hardware.usb@1.0",
"android.hardware.usb@1.1",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
}
diff --git a/vibrator/1.0/Android.bp b/vibrator/1.0/Android.bp
index 0beff68..354b83f 100644
--- a/vibrator/1.0/Android.bp
+++ b/vibrator/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.vibrator@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.vibrator@1.0_genc++"],
generated_headers: ["android.hardware.vibrator@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.vibrator@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/vibrator/1.0/vts/functional/Android.bp b/vibrator/1.0/vts/functional/Android.bp
index 9e25def..016d627 100644
--- a/vibrator/1.0/vts/functional/Android.bp
+++ b/vibrator/1.0/vts/functional/Android.bp
@@ -16,19 +16,8 @@
cc_test {
name: "VtsHalVibratorV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalVibratorV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "libhidlbase",
- "liblog",
- "libutils",
- "android.hardware.vibrator@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.vibrator@1.0"],
}
diff --git a/vibrator/1.1/Android.bp b/vibrator/1.1/Android.bp
index ee81d83..a47f37c 100644
--- a/vibrator/1.1/Android.bp
+++ b/vibrator/1.1/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.vibrator@1.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.vibrator@1.1_genc++"],
generated_headers: ["android.hardware.vibrator@1.1_genc++_headers"],
export_generated_headers: ["android.hardware.vibrator@1.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/vibrator/1.1/vts/functional/Android.bp b/vibrator/1.1/vts/functional/Android.bp
index 5baa8ed..4f6454b 100644
--- a/vibrator/1.1/vts/functional/Android.bp
+++ b/vibrator/1.1/vts/functional/Android.bp
@@ -16,19 +16,11 @@
cc_test {
name: "VtsHalVibratorV1_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalVibratorV1_1TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "libhidlbase",
- "liblog",
- "libutils",
+ static_libs: [
+ "android.hardware.vibrator@1.0",
"android.hardware.vibrator@1.1",
],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
}
diff --git a/vr/1.0/Android.bp b/vr/1.0/Android.bp
index d6949c5..cb9e2af 100644
--- a/vr/1.0/Android.bp
+++ b/vr/1.0/Android.bp
@@ -35,13 +35,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.vr@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.vr@1.0_genc++"],
generated_headers: ["android.hardware.vr@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.vr@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/vr/1.0/vts/functional/Android.bp b/vr/1.0/vts/functional/Android.bp
index 5d5a99a..4029137 100644
--- a/vr/1.0/vts/functional/Android.bp
+++ b/vr/1.0/vts/functional/Android.bp
@@ -16,17 +16,7 @@
cc_test {
name: "VtsHalVrV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalVrV1_0TargetTest.cpp"],
- shared_libs: [
- "liblog",
- "libhidlbase",
- "libutils",
- "android.hardware.vr@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ]
+ static_libs: ["android.hardware.vr@1.0"],
}
diff --git a/weaver/1.0/Android.bp b/weaver/1.0/Android.bp
index b64391c..cdc59c9 100644
--- a/weaver/1.0/Android.bp
+++ b/weaver/1.0/Android.bp
@@ -39,13 +39,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.weaver@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.weaver@1.0_genc++"],
generated_headers: ["android.hardware.weaver@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.weaver@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/weaver/1.0/vts/functional/Android.bp b/weaver/1.0/vts/functional/Android.bp
index 9b0ff6d..0089d89 100644
--- a/weaver/1.0/vts/functional/Android.bp
+++ b/weaver/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalWeaverV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalWeaverV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.weaver@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.weaver@1.0"],
}
diff --git a/wifi/1.0/Android.bp b/wifi/1.0/Android.bp
index 2e954ee..d7db770 100644
--- a/wifi/1.0/Android.bp
+++ b/wifi/1.0/Android.bp
@@ -130,6 +130,9 @@
generated_headers: ["android.hardware.wifi@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.wifi@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/wifi/1.0/types.hal b/wifi/1.0/types.hal
index 1b5f8f7..b9fb0bd 100644
--- a/wifi/1.0/types.hal
+++ b/wifi/1.0/types.hal
@@ -1355,8 +1355,8 @@
*/
uint32_t maxNdiInterfaces;
/**
- * Maximum number of data paths (NDP) which can be created concurrently on each individual
- * data interface (NDI).
+ * Maximum number of data paths (NDP) which can be created concurrently on the device, across all
+ * data interfaces (NDI).
*/
uint32_t maxNdpSessions;
/**
diff --git a/wifi/1.0/vts/functional/Android.bp b/wifi/1.0/vts/functional/Android.bp
index 2d6679f..0cebbfc 100644
--- a/wifi/1.0/vts/functional/Android.bp
+++ b/wifi/1.0/vts/functional/Android.bp
@@ -38,50 +38,30 @@
cc_test {
name: "VtsHalWifiV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: [
"VtsHalWifiV1_0TargetTest.cpp",
"wifi_ap_iface_hidl_test.cpp",
"wifi_chip_hidl_test.cpp",
"wifi_p2p_iface_hidl_test.cpp",
"wifi_rtt_controller_hidl_test.cpp",
- "wifi_sta_iface_hidl_test.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.wifi@1.0",
+ "wifi_sta_iface_hidl_test.cpp",
],
- static_libs: ["VtsHalWifiV1_0TargetTestUtil", "VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
+ static_libs: [
+ "VtsHalWifiV1_0TargetTestUtil",
+ "android.hardware.wifi@1.0",
],
}
cc_test {
name: "VtsHalWifiNanV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: [
"VtsHalWifiV1_0TargetTest.cpp",
- "wifi_nan_iface_hidl_test.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.wifi@1.0",
+ "wifi_nan_iface_hidl_test.cpp",
],
- static_libs: ["VtsHalWifiV1_0TargetTestUtil", "VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
+ static_libs: [
+ "VtsHalWifiV1_0TargetTestUtil",
+ "android.hardware.wifi@1.0",
],
}
diff --git a/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
index 06e21ff..3c23135 100644
--- a/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
@@ -182,6 +182,8 @@
EXPECT_EQ(WifiStatusCode::SUCCESS,
HIDL_INVOKE(wifi_chip_, configureChip, mode.id).code);
stopWifi();
+ // Sleep for 5 milliseconds between each wifi state toggle.
+ usleep(5000);
}
}
diff --git a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
index e4382bc..0851cb2 100644
--- a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
+++ b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
@@ -206,5 +206,7 @@
void stopWifi() {
sp<IWifi> wifi = getWifi();
ASSERT_NE(wifi, nullptr);
- ASSERT_EQ(HIDL_INVOKE(wifi, stop).code, WifiStatusCode::SUCCESS);
+ const auto status = HIDL_INVOKE(wifi, stop);
+ ASSERT_TRUE((status.code == WifiStatusCode::SUCCESS) ||
+ (status.code == WifiStatusCode::ERROR_NOT_AVAILABLE));
}
diff --git a/wifi/1.1/Android.bp b/wifi/1.1/Android.bp
index f991fa5..aa6e937 100644
--- a/wifi/1.1/Android.bp
+++ b/wifi/1.1/Android.bp
@@ -42,13 +42,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.wifi@1.1",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.wifi@1.1_genc++"],
generated_headers: ["android.hardware.wifi@1.1_genc++_headers"],
export_generated_headers: ["android.hardware.wifi@1.1_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/wifi/1.1/default/service.cpp b/wifi/1.1/default/service.cpp
index b3fcd50..b4aed6c 100644
--- a/wifi/1.1/default/service.cpp
+++ b/wifi/1.1/default/service.cpp
@@ -27,7 +27,7 @@
int main(int /*argc*/, char** argv) {
android::base::InitLogging(argv,
android::base::LogdLogger(android::base::SYSTEM));
- LOG(INFO) << "Wifi Hal is starting up...";
+ LOG(INFO) << "Wifi Hal is booting up...";
configureRpcThreadpool(1, true /* callerWillJoin */);
diff --git a/wifi/1.1/default/wifi.cpp b/wifi/1.1/default/wifi.cpp
index fe4f642..8456b90 100644
--- a/wifi/1.1/default/wifi.cpp
+++ b/wifi/1.1/default/wifi.cpp
@@ -108,14 +108,15 @@
LOG(ERROR) << "Failed to invoke onStart callback";
};
}
+ LOG(INFO) << "Wifi HAL started";
} else {
for (const auto& callback : event_cb_handler_.getCallbacks()) {
if (!callback->onFailure(wifi_status).isOk()) {
LOG(ERROR) << "Failed to invoke onFailure callback";
}
}
+ LOG(ERROR) << "Wifi HAL start failed";
}
- LOG(INFO) << "Wifi HAL started";
return wifi_status;
}
@@ -139,14 +140,15 @@
LOG(ERROR) << "Failed to invoke onStop callback";
};
}
+ LOG(INFO) << "Wifi HAL stopped";
} else {
for (const auto& callback : event_cb_handler_.getCallbacks()) {
if (!callback->onFailure(wifi_status).isOk()) {
LOG(ERROR) << "Failed to invoke onFailure callback";
}
}
+ LOG(ERROR) << "Wifi HAL stop failed";
}
- LOG(INFO) << "Wifi HAL stopped";
return wifi_status;
}
diff --git a/wifi/1.1/default/wifi_legacy_hal.cpp b/wifi/1.1/default/wifi_legacy_hal.cpp
index 7d683d3..151a600 100644
--- a/wifi/1.1/default/wifi_legacy_hal.cpp
+++ b/wifi/1.1/default/wifi_legacy_hal.cpp
@@ -1284,7 +1284,7 @@
for (int i = 0; i < num_scan_results; i++) {
auto& scan_result = cached_scan_result.results[i];
if (scan_result.ie_length > 0) {
- LOG(ERROR) << "Cached scan result has non-zero IE length "
+ LOG(DEBUG) << "Cached scan result has non-zero IE length "
<< scan_result.ie_length;
scan_result.ie_length = 0;
}
diff --git a/wifi/1.1/vts/functional/Android.bp b/wifi/1.1/vts/functional/Android.bp
index 6b0baf7..1b0c12d 100644
--- a/wifi/1.1/vts/functional/Android.bp
+++ b/wifi/1.1/vts/functional/Android.bp
@@ -16,24 +16,13 @@
cc_test {
name: "VtsHalWifiV1_1TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: [
"VtsHalWifiV1_1TargetTest.cpp",
"wifi_chip_hidl_test.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
+ static_libs: [
+ "VtsHalWifiV1_0TargetTestUtil",
"android.hardware.wifi@1.0",
"android.hardware.wifi@1.1",
],
- static_libs: ["VtsHalWifiV1_0TargetTestUtil", "VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
}
diff --git a/wifi/Android.bp b/wifi/Android.bp
index b4ab98f..1153b0c 100644
--- a/wifi/Android.bp
+++ b/wifi/Android.bp
@@ -7,4 +7,5 @@
"offload/1.0",
"offload/1.0/vts/functional",
"supplicant/1.0",
+ "supplicant/1.0/vts/functional",
]
diff --git a/wifi/offload/1.0/Android.bp b/wifi/offload/1.0/Android.bp
index 28e8e6a..5b7fcad 100644
--- a/wifi/offload/1.0/Android.bp
+++ b/wifi/offload/1.0/Android.bp
@@ -46,13 +46,16 @@
],
}
-cc_library_shared {
+cc_library {
name: "android.hardware.wifi.offload@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.wifi.offload@1.0_genc++"],
generated_headers: ["android.hardware.wifi.offload@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.wifi.offload@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/wifi/offload/1.0/vts/functional/Android.bp b/wifi/offload/1.0/vts/functional/Android.bp
index f907a89..140e45e 100644
--- a/wifi/offload/1.0/vts/functional/Android.bp
+++ b/wifi/offload/1.0/vts/functional/Android.bp
@@ -16,21 +16,7 @@
cc_test {
name: "VtsHalWifiOffloadV1_0TargetTest",
- defaults: ["hidl_defaults"],
+ defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalWifiOffloadV1_0TargetTest.cpp"],
- shared_libs: [
- "libbase",
- "liblog",
- "libcutils",
- "libhidlbase",
- "libhidltransport",
- "libnativehelper",
- "libutils",
- "android.hardware.wifi.offload@1.0",
- ],
- static_libs: ["VtsHalHidlTargetTestBase"],
- cflags: [
- "-O0",
- "-g",
- ],
+ static_libs: ["android.hardware.wifi.offload@1.0"],
}
diff --git a/wifi/supplicant/1.0/Android.bp b/wifi/supplicant/1.0/Android.bp
index 3c83d12..978192d 100644
--- a/wifi/supplicant/1.0/Android.bp
+++ b/wifi/supplicant/1.0/Android.bp
@@ -123,6 +123,9 @@
generated_headers: ["android.hardware.wifi.supplicant@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.wifi.supplicant@1.0_genc++_headers"],
vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
shared_libs: [
"libhidlbase",
"libhidltransport",
diff --git a/wifi/supplicant/1.0/vts/functional/Android.bp b/wifi/supplicant/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..24b9f6f
--- /dev/null
+++ b/wifi/supplicant/1.0/vts/functional/Android.bp
@@ -0,0 +1,37 @@
+//
+// 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.
+//
+
+cc_test {
+ name: "VtsHalWifiSupplicantV1_0TargetTest",
+ defaults: ["VtsHalTargetTestDefaults"],
+ srcs: [
+ "VtsHalWifiSupplicantV1_0TargetTest.cpp",
+ "supplicant_hidl_test.cpp",
+ "supplicant_hidl_test_utils.cpp",
+ "supplicant_p2p_iface_hidl_test.cpp",
+ "supplicant_sta_iface_hidl_test.cpp",
+ "supplicant_sta_network_hidl_test.cpp",
+ ],
+ static_libs: [
+ "VtsHalWifiV1_0TargetTestUtil",
+ "android.hardware.wifi.supplicant@1.0",
+ "android.hardware.wifi@1.0",
+ "libcrypto",
+ "libgmock",
+ "libwifi-system",
+ "libwifi-system-iface",
+ ],
+}
diff --git a/wifi/supplicant/1.0/vts/functional/Android.mk b/wifi/supplicant/1.0/vts/functional/Android.mk
deleted file mode 100644
index c6e3950..0000000
--- a/wifi/supplicant/1.0/vts/functional/Android.mk
+++ /dev/null
@@ -1,44 +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.
-#
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := VtsHalWifiSupplicantV1_0TargetTest
-LOCAL_CPPFLAGS := -Wall -Werror -Wextra
-LOCAL_SRC_FILES := \
- VtsHalWifiSupplicantV1_0TargetTest.cpp \
- supplicant_hidl_test.cpp \
- supplicant_hidl_test_utils.cpp \
- supplicant_p2p_iface_hidl_test.cpp \
- supplicant_sta_iface_hidl_test.cpp \
- supplicant_sta_network_hidl_test.cpp
-LOCAL_SHARED_LIBRARIES := \
- android.hardware.wifi.supplicant@1.0 \
- android.hardware.wifi@1.0 \
- libbase \
- libcutils \
- libhidlbase \
- libhidltransport \
- liblog \
- libutils \
- libwifi-system \
- libwifi-system-iface
-LOCAL_STATIC_LIBRARIES := \
- libgmock \
- VtsHalHidlTargetTestBase \
- VtsHalWifiV1_0TargetTestUtil
-include $(BUILD_NATIVE_TEST)
-