Merge changes from topics "radio-vendor-kvp", "radio-1.2"
* changes:
Implement VTS tests for new radio interfaces.
Implement generic vendor-specific parameters.
Branch out Broadcast Radio 1.2 HAL.
diff --git a/audio/2.0/Android.bp b/audio/2.0/Android.bp
index cdaaa15..06299b6 100644
--- a/audio/2.0/Android.bp
+++ b/audio/2.0/Android.bp
@@ -108,3 +108,93 @@
"android.hardware.audio.common@2.0",
],
}
+
+genrule {
+ name: "android.hardware.audio@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio@2.0",
+ srcs: [
+ ":android.hardware.audio@2.0_hal",
+ ],
+ out: [
+ "android/hardware/audio/2.0/ADevice.cpp",
+ "android/hardware/audio/2.0/ADevicesFactory.cpp",
+ "android/hardware/audio/2.0/APrimaryDevice.cpp",
+ "android/hardware/audio/2.0/AStream.cpp",
+ "android/hardware/audio/2.0/AStreamIn.cpp",
+ "android/hardware/audio/2.0/AStreamOut.cpp",
+ "android/hardware/audio/2.0/AStreamOutCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.audio@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio@2.0",
+ srcs: [
+ ":android.hardware.audio@2.0_hal",
+ ],
+ out: [
+ "android/hardware/audio/2.0/ADevice.h",
+ "android/hardware/audio/2.0/ADevicesFactory.h",
+ "android/hardware/audio/2.0/APrimaryDevice.h",
+ "android/hardware/audio/2.0/AStream.h",
+ "android/hardware/audio/2.0/AStreamIn.h",
+ "android/hardware/audio/2.0/AStreamOut.h",
+ "android/hardware/audio/2.0/AStreamOutCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.audio@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.audio@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.audio@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.audio@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.audio@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.audio@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.audio@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.audio@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.audio@2.0",
+ "android.hardware.audio@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.audio@2.0-adapter_genc++"],
+}
diff --git a/audio/common/2.0/default/Android.bp b/audio/common/2.0/default/Android.bp
index 104bbac..82b38c0 100644
--- a/audio/common/2.0/default/Android.bp
+++ b/audio/common/2.0/default/Android.bp
@@ -15,6 +15,7 @@
cc_library_shared {
name: "android.hardware.audio.common@2.0-util",
+ defaults: ["hidl_defaults"],
vendor_available: true,
vndk: {
enabled: true,
diff --git a/audio/effect/2.0/Android.bp b/audio/effect/2.0/Android.bp
index fd667f0..e939ece 100644
--- a/audio/effect/2.0/Android.bp
+++ b/audio/effect/2.0/Android.bp
@@ -157,3 +157,107 @@
"android.hardware.audio.common@2.0",
],
}
+
+genrule {
+ name: "android.hardware.audio.effect@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.effect@2.0",
+ srcs: [
+ ":android.hardware.audio.effect@2.0_hal",
+ ],
+ out: [
+ "android/hardware/audio/effect/2.0/AAcousticEchoCancelerEffect.cpp",
+ "android/hardware/audio/effect/2.0/AAutomaticGainControlEffect.cpp",
+ "android/hardware/audio/effect/2.0/ABassBoostEffect.cpp",
+ "android/hardware/audio/effect/2.0/ADownmixEffect.cpp",
+ "android/hardware/audio/effect/2.0/AEffect.cpp",
+ "android/hardware/audio/effect/2.0/AEffectBufferProviderCallback.cpp",
+ "android/hardware/audio/effect/2.0/AEffectsFactory.cpp",
+ "android/hardware/audio/effect/2.0/AEnvironmentalReverbEffect.cpp",
+ "android/hardware/audio/effect/2.0/AEqualizerEffect.cpp",
+ "android/hardware/audio/effect/2.0/ALoudnessEnhancerEffect.cpp",
+ "android/hardware/audio/effect/2.0/ANoiseSuppressionEffect.cpp",
+ "android/hardware/audio/effect/2.0/APresetReverbEffect.cpp",
+ "android/hardware/audio/effect/2.0/AVirtualizerEffect.cpp",
+ "android/hardware/audio/effect/2.0/AVisualizerEffect.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.audio.effect@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.effect@2.0",
+ srcs: [
+ ":android.hardware.audio.effect@2.0_hal",
+ ],
+ out: [
+ "android/hardware/audio/effect/2.0/AAcousticEchoCancelerEffect.h",
+ "android/hardware/audio/effect/2.0/AAutomaticGainControlEffect.h",
+ "android/hardware/audio/effect/2.0/ABassBoostEffect.h",
+ "android/hardware/audio/effect/2.0/ADownmixEffect.h",
+ "android/hardware/audio/effect/2.0/AEffect.h",
+ "android/hardware/audio/effect/2.0/AEffectBufferProviderCallback.h",
+ "android/hardware/audio/effect/2.0/AEffectsFactory.h",
+ "android/hardware/audio/effect/2.0/AEnvironmentalReverbEffect.h",
+ "android/hardware/audio/effect/2.0/AEqualizerEffect.h",
+ "android/hardware/audio/effect/2.0/ALoudnessEnhancerEffect.h",
+ "android/hardware/audio/effect/2.0/ANoiseSuppressionEffect.h",
+ "android/hardware/audio/effect/2.0/APresetReverbEffect.h",
+ "android/hardware/audio/effect/2.0/AVirtualizerEffect.h",
+ "android/hardware/audio/effect/2.0/AVisualizerEffect.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.audio.effect@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.audio.effect@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.audio.effect@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.audio.effect@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.audio.effect@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.audio.effect@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.audio.effect@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.audio.effect@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.audio.effect@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.audio.effect@2.0",
+ "android.hardware.audio.effect@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.audio.effect@2.0-adapter_genc++"],
+}
diff --git a/automotive/evs/1.0/Android.bp b/automotive/evs/1.0/Android.bp
index 7ae2231..da68c2a 100644
--- a/automotive/evs/1.0/Android.bp
+++ b/automotive/evs/1.0/Android.bp
@@ -85,3 +85,84 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.automotive.evs@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.evs@1.0",
+ srcs: [
+ ":android.hardware.automotive.evs@1.0_hal",
+ ],
+ out: [
+ "android/hardware/automotive/evs/1.0/AEvsCamera.cpp",
+ "android/hardware/automotive/evs/1.0/AEvsCameraStream.cpp",
+ "android/hardware/automotive/evs/1.0/AEvsDisplay.cpp",
+ "android/hardware/automotive/evs/1.0/AEvsEnumerator.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.automotive.evs@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.evs@1.0",
+ srcs: [
+ ":android.hardware.automotive.evs@1.0_hal",
+ ],
+ out: [
+ "android/hardware/automotive/evs/1.0/AEvsCamera.h",
+ "android/hardware/automotive/evs/1.0/AEvsCameraStream.h",
+ "android/hardware/automotive/evs/1.0/AEvsDisplay.h",
+ "android/hardware/automotive/evs/1.0/AEvsEnumerator.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.automotive.evs@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.automotive.evs@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.automotive.evs@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.automotive.evs@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.automotive.evs@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.automotive.evs@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.automotive.evs@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.evs@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.automotive.evs@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.automotive.evs@1.0",
+ "android.hardware.automotive.evs@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.automotive.evs@1.0-adapter_genc++"],
+}
diff --git a/automotive/evs/1.0/default/ServiceNames.h b/automotive/evs/1.0/default/ServiceNames.h
index d20a37f..1178da5 100644
--- a/automotive/evs/1.0/default/ServiceNames.h
+++ b/automotive/evs/1.0/default/ServiceNames.h
@@ -14,4 +14,4 @@
* limitations under the License.
*/
-const static char kEnumeratorServiceName[] = "EvsEnumeratorHw-Mock";
+const static char kEnumeratorServiceName[] = "EvsEnumeratorHw";
diff --git a/automotive/vehicle/2.0/Android.bp b/automotive/vehicle/2.0/Android.bp
index 879fe0d..0d0d28f 100644
--- a/automotive/vehicle/2.0/Android.bp
+++ b/automotive/vehicle/2.0/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.automotive.vehicle@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.vehicle@2.0",
+ srcs: [
+ ":android.hardware.automotive.vehicle@2.0_hal",
+ ],
+ out: [
+ "android/hardware/automotive/vehicle/2.0/AVehicle.cpp",
+ "android/hardware/automotive/vehicle/2.0/AVehicleCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.automotive.vehicle@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.vehicle@2.0",
+ srcs: [
+ ":android.hardware.automotive.vehicle@2.0_hal",
+ ],
+ out: [
+ "android/hardware/automotive/vehicle/2.0/AVehicle.h",
+ "android/hardware/automotive/vehicle/2.0/AVehicleCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.automotive.vehicle@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.automotive.vehicle@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.automotive.vehicle@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.automotive.vehicle@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.automotive.vehicle@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.automotive.vehicle@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.automotive.vehicle@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.automotive.vehicle@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.automotive.vehicle@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.automotive.vehicle@2.0",
+ "android.hardware.automotive.vehicle@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.automotive.vehicle@2.0-adapter_genc++"],
+}
diff --git a/automotive/vehicle/2.0/Android.mk b/automotive/vehicle/2.0/Android.mk
index 697d333..ec18766 100644
--- a/automotive/vehicle/2.0/Android.mk
+++ b/automotive/vehicle/2.0/Android.mk
@@ -1280,1283 +1280,5 @@
include $(BUILD_JAVA_LIBRARY)
-################################################################################
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.automotive.vehicle-V2.0-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.hidl.base-V1.0-java-static \
-
-LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVA_LIBRARIES := core-oj hwbinder
-
-#
-# Build types.hal (DiagnosticFloatSensorIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/DiagnosticFloatSensorIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.DiagnosticFloatSensorIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (DiagnosticIntegerSensorIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/DiagnosticIntegerSensorIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.DiagnosticIntegerSensorIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Obd2CommonIgnitionMonitors)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2CommonIgnitionMonitors.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Obd2CommonIgnitionMonitors
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Obd2CompressionIgnitionMonitors)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2CompressionIgnitionMonitors.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Obd2CompressionIgnitionMonitors
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Obd2FuelSystemStatus)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2FuelSystemStatus.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Obd2FuelSystemStatus
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Obd2FuelType)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2FuelType.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Obd2FuelType
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Obd2IgnitionMonitorKind)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2IgnitionMonitorKind.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Obd2IgnitionMonitorKind
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Obd2SecondaryAirStatus)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2SecondaryAirStatus.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Obd2SecondaryAirStatus
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Obd2SparkIgnitionMonitors)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Obd2SparkIgnitionMonitors.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Obd2SparkIgnitionMonitors
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (StatusCode)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/StatusCode.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.StatusCode
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (SubscribeFlags)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SubscribeFlags.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.SubscribeFlags
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (SubscribeOptions)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/SubscribeOptions.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.SubscribeOptions
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleApPowerBootupReason)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerBootupReason.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleApPowerBootupReason
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleApPowerSetState)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerSetState.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleApPowerSetState
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleApPowerState)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerState.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleApPowerState
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleApPowerStateConfigFlag)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateConfigFlag.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleApPowerStateConfigFlag
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleApPowerStateIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleApPowerStateIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleApPowerStateShutdownParam)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleApPowerStateShutdownParam.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleApPowerStateShutdownParam
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleArea)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleArea.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleArea
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAreaConfig)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaConfig.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAreaConfig
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAreaDoor)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaDoor.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAreaDoor
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAreaMirror)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaMirror.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAreaMirror
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAreaSeat)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaSeat.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAreaSeat
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAreaWindow)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaWindow.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAreaWindow
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAreaZone)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAreaZone.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAreaZone
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioContextFlag)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioContextFlag.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioContextFlag
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioExtFocusFlag)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioExtFocusFlag.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioExtFocusFlag
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioFocusIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioFocusIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioFocusRequest)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusRequest.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioFocusRequest
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioFocusState)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioFocusState.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioFocusState
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioHwVariantConfigFlag)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioHwVariantConfigFlag.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioHwVariantConfigFlag
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioRoutingPolicyIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioRoutingPolicyIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioRoutingPolicyIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioStream)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioStream.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioStream
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioStreamFlag)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioStreamFlag.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioStreamFlag
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioVolumeCapabilityFlag)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeCapabilityFlag.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioVolumeCapabilityFlag
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioVolumeIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioVolumeIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioVolumeLimitIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeLimitIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioVolumeLimitIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleAudioVolumeState)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleAudioVolumeState.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleAudioVolumeState
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleDisplay)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleDisplay.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleDisplay
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleDrivingStatus)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleDrivingStatus.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleDrivingStatus
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleGear)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleGear.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleGear
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleHvacFanDirection)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleHvacFanDirection.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleHvacFanDirection
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleHwKeyInputAction)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleHwKeyInputAction.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleHwKeyInputAction
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleIgnitionState)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleIgnitionState.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleIgnitionState
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleInstrumentClusterType)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleInstrumentClusterType.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleInstrumentClusterType
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehiclePropConfig)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropConfig.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehiclePropConfig
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehiclePropValue)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropValue.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehiclePropValue
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleProperty)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleProperty.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleProperty
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehiclePropertyAccess)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyAccess.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehiclePropertyAccess
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehiclePropertyChangeMode)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyChangeMode.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehiclePropertyChangeMode
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehiclePropertyGroup)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyGroup.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehiclePropertyGroup
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehiclePropertyOperation)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyOperation.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehiclePropertyOperation
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehiclePropertyType)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehiclePropertyType.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehiclePropertyType
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleRadioConstants)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleRadioConstants.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleRadioConstants
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleTurnSignal)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleTurnSignal.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleTurnSignal
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VehicleUnit)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VehicleUnit.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VehicleUnit
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VmsAvailabilityStateIntegerValuesIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsAvailabilityStateIntegerValuesIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VmsAvailabilityStateIntegerValuesIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VmsBaseMessageIntegerValuesIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsBaseMessageIntegerValuesIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VmsBaseMessageIntegerValuesIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VmsMessageType)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsMessageType.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VmsMessageType
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VmsMessageWithLayerAndPublisherIdIntegerValuesIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsMessageWithLayerAndPublisherIdIntegerValuesIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VmsMessageWithLayerAndPublisherIdIntegerValuesIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VmsMessageWithLayerIntegerValuesIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsMessageWithLayerIntegerValuesIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VmsMessageWithLayerIntegerValuesIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VmsOfferingMessageIntegerValuesIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsOfferingMessageIntegerValuesIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VmsOfferingMessageIntegerValuesIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (VmsSubscriptionsStateIntegerValuesIndex)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/VmsSubscriptionsStateIntegerValuesIndex.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.VmsSubscriptionsStateIntegerValuesIndex
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build types.hal (Wheel)
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/Wheel.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::types.Wheel
-
-$(GEN): $(LOCAL_PATH)/types.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IVehicle.hal
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IVehicle.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicle.hal
-$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IVehicleCallback.hal
-$(GEN): $(LOCAL_PATH)/IVehicleCallback.hal
-$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
-$(GEN): $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::IVehicle
-
-$(GEN): $(LOCAL_PATH)/IVehicle.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-
-#
-# Build IVehicleCallback.hal
-#
-GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_0/IVehicleCallback.java
-$(GEN): $(HIDL)
-$(GEN): PRIVATE_HIDL := $(HIDL)
-$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IVehicleCallback.hal
-$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
-$(GEN): $(LOCAL_PATH)/types.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.automotive.vehicle@2.0::IVehicleCallback
-
-$(GEN): $(LOCAL_PATH)/IVehicleCallback.hal
- $(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(GEN)
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/biometrics/fingerprint/2.1/Android.bp b/biometrics/fingerprint/2.1/Android.bp
index 3898da5..e6e4827 100644
--- a/biometrics/fingerprint/2.1/Android.bp
+++ b/biometrics/fingerprint/2.1/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.biometrics.fingerprint@2.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.biometrics.fingerprint@2.1",
+ srcs: [
+ ":android.hardware.biometrics.fingerprint@2.1_hal",
+ ],
+ out: [
+ "android/hardware/biometrics/fingerprint/2.1/ABiometricsFingerprint.cpp",
+ "android/hardware/biometrics/fingerprint/2.1/ABiometricsFingerprintClientCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.biometrics.fingerprint@2.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.biometrics.fingerprint@2.1",
+ srcs: [
+ ":android.hardware.biometrics.fingerprint@2.1_hal",
+ ],
+ out: [
+ "android/hardware/biometrics/fingerprint/2.1/ABiometricsFingerprint.h",
+ "android/hardware/biometrics/fingerprint/2.1/ABiometricsFingerprintClientCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.biometrics.fingerprint@2.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.biometrics.fingerprint@2.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.biometrics.fingerprint@2.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.biometrics.fingerprint@2.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.biometrics.fingerprint@2.1",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.biometrics.fingerprint@2.1",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.biometrics.fingerprint@2.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.biometrics.fingerprint@2.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.biometrics.fingerprint@2.1-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.biometrics.fingerprint@2.1",
+ "android.hardware.biometrics.fingerprint@2.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.biometrics.fingerprint@2.1-adapter_genc++"],
+}
diff --git a/bluetooth/1.0/Android.bp b/bluetooth/1.0/Android.bp
index c883c59..9d2cf6e 100644
--- a/bluetooth/1.0/Android.bp
+++ b/bluetooth/1.0/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.bluetooth@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.bluetooth@1.0",
+ srcs: [
+ ":android.hardware.bluetooth@1.0_hal",
+ ],
+ out: [
+ "android/hardware/bluetooth/1.0/ABluetoothHci.cpp",
+ "android/hardware/bluetooth/1.0/ABluetoothHciCallbacks.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.bluetooth@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.bluetooth@1.0",
+ srcs: [
+ ":android.hardware.bluetooth@1.0_hal",
+ ],
+ out: [
+ "android/hardware/bluetooth/1.0/ABluetoothHci.h",
+ "android/hardware/bluetooth/1.0/ABluetoothHciCallbacks.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.bluetooth@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.bluetooth@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.bluetooth@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.bluetooth@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.bluetooth@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.bluetooth@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.bluetooth@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.bluetooth@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.bluetooth@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.bluetooth@1.0",
+ "android.hardware.bluetooth@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.bluetooth@1.0-adapter_genc++"],
+}
diff --git a/boot/1.0/Android.bp b/boot/1.0/Android.bp
index 4e4efa3..e15b2d0 100644
--- a/boot/1.0/Android.bp
+++ b/boot/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.boot@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0",
+ srcs: [
+ ":android.hardware.boot@1.0_hal",
+ ],
+ out: [
+ "android/hardware/boot/1.0/ABootControl.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.boot@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0",
+ srcs: [
+ ":android.hardware.boot@1.0_hal",
+ ],
+ out: [
+ "android/hardware/boot/1.0/ABootControl.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.boot@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.boot@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.boot@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.boot@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.boot@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.boot@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.boot@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.boot@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.boot@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.boot@1.0",
+ "android.hardware.boot@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.boot@1.0-adapter_genc++"],
+}
diff --git a/broadcastradio/1.0/Android.bp b/broadcastradio/1.0/Android.bp
index 5b8e239..b394fdc 100644
--- a/broadcastradio/1.0/Android.bp
+++ b/broadcastradio/1.0/Android.bp
@@ -85,3 +85,84 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.broadcastradio@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.0",
+ srcs: [
+ ":android.hardware.broadcastradio@1.0_hal",
+ ],
+ out: [
+ "android/hardware/broadcastradio/1.0/ABroadcastRadio.cpp",
+ "android/hardware/broadcastradio/1.0/ABroadcastRadioFactory.cpp",
+ "android/hardware/broadcastradio/1.0/ATuner.cpp",
+ "android/hardware/broadcastradio/1.0/ATunerCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.broadcastradio@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.0",
+ srcs: [
+ ":android.hardware.broadcastradio@1.0_hal",
+ ],
+ out: [
+ "android/hardware/broadcastradio/1.0/ABroadcastRadio.h",
+ "android/hardware/broadcastradio/1.0/ABroadcastRadioFactory.h",
+ "android/hardware/broadcastradio/1.0/ATuner.h",
+ "android/hardware/broadcastradio/1.0/ATunerCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.broadcastradio@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.broadcastradio@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.broadcastradio@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.broadcastradio@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.broadcastradio@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.broadcastradio@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.broadcastradio@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.broadcastradio@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.broadcastradio@1.0",
+ "android.hardware.broadcastradio@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.broadcastradio@1.0-adapter_genc++"],
+}
diff --git a/broadcastradio/1.1/Android.bp b/broadcastradio/1.1/Android.bp
index 12e23d6..fa1c3e9 100644
--- a/broadcastradio/1.1/Android.bp
+++ b/broadcastradio/1.1/Android.bp
@@ -87,3 +87,89 @@
"android.hardware.broadcastradio@1.0",
],
}
+
+genrule {
+ name: "android.hardware.broadcastradio@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.1",
+ srcs: [
+ ":android.hardware.broadcastradio@1.1_hal",
+ ],
+ out: [
+ "android/hardware/broadcastradio/1.1/ABroadcastRadio.cpp",
+ "android/hardware/broadcastradio/1.1/ABroadcastRadioFactory.cpp",
+ "android/hardware/broadcastradio/1.1/ATuner.cpp",
+ "android/hardware/broadcastradio/1.1/ATunerCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.broadcastradio@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.1",
+ srcs: [
+ ":android.hardware.broadcastradio@1.1_hal",
+ ],
+ out: [
+ "android/hardware/broadcastradio/1.1/ABroadcastRadio.h",
+ "android/hardware/broadcastradio/1.1/ABroadcastRadioFactory.h",
+ "android/hardware/broadcastradio/1.1/ATuner.h",
+ "android/hardware/broadcastradio/1.1/ATunerCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.broadcastradio@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.broadcastradio@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.broadcastradio@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.broadcastradio@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.broadcastradio@1.0",
+ "android.hardware.broadcastradio@1.1",
+ "android.hardware.broadcastradio@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.broadcastradio@1.0",
+ "android.hardware.broadcastradio@1.1",
+ "android.hardware.broadcastradio@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.broadcastradio@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.broadcastradio@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.broadcastradio@1.1-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.broadcastradio@1.0",
+ "android.hardware.broadcastradio@1.1",
+ "android.hardware.broadcastradio@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.broadcastradio@1.1-adapter_genc++"],
+}
diff --git a/camera/Android.bp b/camera/Android.bp
index 83a2803..0240751 100644
--- a/camera/Android.bp
+++ b/camera/Android.bp
@@ -7,6 +7,7 @@
"device/3.2",
"device/3.2/default",
"device/3.3",
+ "device/3.3/default",
"metadata/3.2",
"provider/2.4",
"provider/2.4/default",
diff --git a/camera/device/1.0/Android.bp b/camera/device/1.0/Android.bp
index b8335f9..5b2d4c0 100644
--- a/camera/device/1.0/Android.bp
+++ b/camera/device/1.0/Android.bp
@@ -82,3 +82,88 @@
"android.hardware.graphics.common@1.0",
],
}
+
+genrule {
+ name: "android.hardware.camera.device@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@1.0",
+ srcs: [
+ ":android.hardware.camera.device@1.0_hal",
+ ],
+ out: [
+ "android/hardware/camera/device/1.0/ACameraDevice.cpp",
+ "android/hardware/camera/device/1.0/ACameraDeviceCallback.cpp",
+ "android/hardware/camera/device/1.0/ACameraDevicePreviewCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.device@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@1.0",
+ srcs: [
+ ":android.hardware.camera.device@1.0_hal",
+ ],
+ out: [
+ "android/hardware/camera/device/1.0/ACameraDevice.h",
+ "android/hardware/camera/device/1.0/ACameraDeviceCallback.h",
+ "android/hardware/camera/device/1.0/ACameraDevicePreviewCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.camera.device@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.camera.device@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.camera.device@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.camera.device@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.device@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.camera.device@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.camera.device@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.camera.device@1.0-adapter_genc++"],
+}
diff --git a/camera/device/1.0/default/CameraDevice.cpp b/camera/device/1.0/default/CameraDevice.cpp
index c53c0d8..a03bbc8 100644
--- a/camera/device/1.0/default/CameraDevice.cpp
+++ b/camera/device/1.0/default/CameraDevice.cpp
@@ -377,10 +377,14 @@
hidl_handle hidlHandle = mem->mHidlHandle;
MemoryId id = object->mDeviceCallback->registerMemory(hidlHandle, buf_size, num_bufs);
mem->handle.mId = id;
- if (object->mMemoryMap.count(id) != 0) {
- ALOGE("%s: duplicate MemoryId %d returned by client!", __FUNCTION__, id);
+
+ {
+ Mutex::Autolock _l(object->mMemoryMapLock);
+ if (object->mMemoryMap.count(id) != 0) {
+ ALOGE("%s: duplicate MemoryId %d returned by client!", __FUNCTION__, id);
+ }
+ object->mMemoryMap[id] = mem;
}
- object->mMemoryMap[id] = mem;
mem->handle.mDevice = object;
return &mem->handle;
}
@@ -398,7 +402,10 @@
ALOGE("%s: camera HAL return memory while camera is not opened!", __FUNCTION__);
}
device->mDeviceCallback->unregisterMemory(mem->handle.mId);
- device->mMemoryMap.erase(mem->handle.mId);
+ {
+ Mutex::Autolock _l(device->mMemoryMapLock);
+ device->mMemoryMap.erase(mem->handle.mId);
+ }
mem->decStrong(mem);
}
@@ -826,7 +833,16 @@
return;
}
if (mDevice->ops->release_recording_frame) {
- CameraHeapMemory* camMemory = mMemoryMap.at(memId);
+ CameraHeapMemory* camMemory;
+ {
+ Mutex::Autolock _l(mMemoryMapLock);
+ auto it = mMemoryMap.find(memId);
+ if (it == mMemoryMap.end() || it->second == nullptr) {
+ ALOGE("%s unknown memoryId %d", __FUNCTION__, memId);
+ return;
+ }
+ camMemory = it->second;
+ }
if (bufferIndex >= camMemory->mNumBufs) {
ALOGE("%s: bufferIndex %d exceeds number of buffers %d",
__FUNCTION__, bufferIndex, camMemory->mNumBufs);
diff --git a/camera/device/1.0/default/CameraDevice_1_0.h b/camera/device/1.0/default/CameraDevice_1_0.h
index c078596..2c980f0 100644
--- a/camera/device/1.0/default/CameraDevice_1_0.h
+++ b/camera/device/1.0/default/CameraDevice_1_0.h
@@ -165,6 +165,8 @@
sp<ICameraDeviceCallback> mDeviceCallback = nullptr;
+ mutable Mutex mMemoryMapLock; // gating access to mMemoryMap
+ // must not hold mLock after this lock is acquired
std::unordered_map<MemoryId, CameraHeapMemory*> mMemoryMap;
bool mMetadataMode = false;
diff --git a/camera/device/3.2/Android.bp b/camera/device/3.2/Android.bp
index 24c2151..15a7dcd 100644
--- a/camera/device/3.2/Android.bp
+++ b/camera/device/3.2/Android.bp
@@ -82,3 +82,88 @@
"android.hardware.graphics.common@1.0",
],
}
+
+genrule {
+ name: "android.hardware.camera.device@3.2-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2",
+ srcs: [
+ ":android.hardware.camera.device@3.2_hal",
+ ],
+ out: [
+ "android/hardware/camera/device/3.2/ACameraDevice.cpp",
+ "android/hardware/camera/device/3.2/ACameraDeviceCallback.cpp",
+ "android/hardware/camera/device/3.2/ACameraDeviceSession.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.device@3.2-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2",
+ srcs: [
+ ":android.hardware.camera.device@3.2_hal",
+ ],
+ out: [
+ "android/hardware/camera/device/3.2/ACameraDevice.h",
+ "android/hardware/camera/device/3.2/ACameraDeviceCallback.h",
+ "android/hardware/camera/device/3.2/ACameraDeviceSession.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.camera.device@3.2-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.camera.device@3.2-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.camera.device@3.2-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.camera.device@3.2-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.graphics.common@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.graphics.common@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.device@3.2-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.2",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.camera.device@3.2-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.camera.device@3.2-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.camera.device@3.2-adapter_genc++"],
+}
diff --git a/camera/device/3.2/default/CameraDevice.cpp b/camera/device/3.2/default/CameraDevice.cpp
index 637a1e6..295ee32 100644
--- a/camera/device/3.2/default/CameraDevice.cpp
+++ b/camera/device/3.2/default/CameraDevice.cpp
@@ -177,7 +177,7 @@
if (callback == nullptr) {
ALOGE("%s: cannot open camera %s. callback is null!",
__FUNCTION__, mCameraId.c_str());
- _hidl_cb(Status::ILLEGAL_ARGUMENT, session);
+ _hidl_cb(Status::ILLEGAL_ARGUMENT, nullptr);
return Void();
}
@@ -186,7 +186,7 @@
// this must be a disconnected camera
ALOGE("%s: cannot open camera %s. camera is disconnected!",
__FUNCTION__, mCameraId.c_str());
- _hidl_cb(Status::CAMERA_DISCONNECTED, session);
+ _hidl_cb(Status::CAMERA_DISCONNECTED, nullptr);
return Void();
} else {
mLock.lock();
@@ -239,7 +239,7 @@
return Void();
}
- session = new CameraDeviceSession(
+ session = createSession(
device, info.static_camera_characteristics, callback);
if (session == nullptr) {
ALOGE("%s: camera device session allocation failed", __FUNCTION__);
@@ -255,9 +255,19 @@
return Void();
}
mSession = session;
+
+ IF_ALOGV() {
+ session->getInterface()->interfaceChain([](
+ ::android::hardware::hidl_vec<::android::hardware::hidl_string> interfaceChain) {
+ ALOGV("Session interface chain:");
+ for (auto iface : interfaceChain) {
+ ALOGV(" %s", iface.c_str());
+ }
+ });
+ }
mLock.unlock();
}
- _hidl_cb(status, session);
+ _hidl_cb(status, session->getInterface());
return Void();
}
@@ -286,6 +296,13 @@
session->dumpState(handle);
return Void();
}
+
+sp<CameraDeviceSession> CameraDevice::createSession(camera3_device_t* device,
+ const camera_metadata_t* deviceInfo,
+ const sp<ICameraDeviceCallback>& callback) {
+ return new CameraDeviceSession(device, deviceInfo, callback);
+}
+
// End of methods from ::android::hardware::camera::device::V3_2::ICameraDevice.
} // namespace implementation
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp
index fcd134f..d6a04bc 100644
--- a/camera/device/3.2/default/CameraDeviceSession.cpp
+++ b/camera/device/3.2/default/CameraDeviceSession.cpp
@@ -49,7 +49,6 @@
mDerivePostRawSensKey(false),
mNumPartialResults(1),
mResultBatcher(callback) {
-
mDeviceInfo = deviceInfo;
camera_metadata_entry partialResultsCount =
mDeviceInfo.find(ANDROID_REQUEST_PARTIAL_RESULT_COUNT);
@@ -328,7 +327,8 @@
mStreamsToBatch = streamsToBatch;
}
-void CameraDeviceSession::ResultBatcher::setResultMetadataQueue(std::shared_ptr<ResultMetadataQueue> q) {
+void CameraDeviceSession::ResultBatcher::setResultMetadataQueue(
+ std::shared_ptr<ResultMetadataQueue> q) {
Mutex::Autolock _l(mLock);
mResultMetadataQueue = q;
}
@@ -387,7 +387,8 @@
}
}
-void CameraDeviceSession::ResultBatcher::sendBatchShutterCbsLocked(std::shared_ptr<InflightBatch> batch) {
+void CameraDeviceSession::ResultBatcher::sendBatchShutterCbsLocked(
+ std::shared_ptr<InflightBatch> batch) {
if (batch->mShutterDelivered) {
ALOGW("%s: batch shutter callback already sent!", __FUNCTION__);
return;
@@ -441,7 +442,8 @@
}
}
-void CameraDeviceSession::ResultBatcher::sendBatchBuffersLocked(std::shared_ptr<InflightBatch> batch) {
+void CameraDeviceSession::ResultBatcher::sendBatchBuffersLocked(
+ std::shared_ptr<InflightBatch> batch) {
sendBatchBuffersLocked(batch, mStreamsToBatch);
}
@@ -736,7 +738,7 @@
// Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow.
Return<void> CameraDeviceSession::constructDefaultRequestSettings(
- RequestTemplate type, constructDefaultRequestSettings_cb _hidl_cb) {
+ RequestTemplate type, ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) {
Status status = initStatus();
CameraMetadata outMetadata;
const camera_metadata_t *rawRequest;
@@ -802,7 +804,8 @@
}
Return<void> CameraDeviceSession::configureStreams(
- const StreamConfiguration& requestedConfiguration, configureStreams_cb _hidl_cb) {
+ const StreamConfiguration& requestedConfiguration,
+ ICameraDeviceSession::configureStreams_cb _hidl_cb) {
Status status = initStatus();
HalStreamConfiguration outStreams;
@@ -960,13 +963,13 @@
}
Return<void> CameraDeviceSession::getCaptureRequestMetadataQueue(
- getCaptureRequestMetadataQueue_cb _hidl_cb) {
+ ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) {
_hidl_cb(*mRequestMetadataQueue->getDesc());
return Void();
}
Return<void> CameraDeviceSession::getCaptureResultMetadataQueue(
- getCaptureResultMetadataQueue_cb _hidl_cb) {
+ ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) {
_hidl_cb(*mResultMetadataQueue->getDesc());
return Void();
}
@@ -974,7 +977,7 @@
Return<void> CameraDeviceSession::processCaptureRequest(
const hidl_vec<CaptureRequest>& requests,
const hidl_vec<BufferCache>& cachesToRemove,
- processCaptureRequest_cb _hidl_cb) {
+ ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) {
updateBufferCaches(cachesToRemove);
uint32_t numRequestProcessed = 0;
diff --git a/camera/device/3.2/default/CameraDeviceSession.h b/camera/device/3.2/default/CameraDeviceSession.h
index 2fe189f..69e2e2c 100644
--- a/camera/device/3.2/default/CameraDeviceSession.h
+++ b/camera/device/3.2/default/CameraDeviceSession.h
@@ -55,6 +55,8 @@
using ::android::sp;
using ::android::Mutex;
+struct Camera3Stream;
+
/**
* Function pointer types with C calling convention to
* use for HAL callback functions.
@@ -69,12 +71,12 @@
const camera3_notify_msg_t *);
}
-struct CameraDeviceSession : public ICameraDeviceSession, private camera3_callback_ops {
+struct CameraDeviceSession : public virtual RefBase, protected camera3_callback_ops {
CameraDeviceSession(camera3_device_t*,
const camera_metadata_t* deviceInfo,
const sp<ICameraDeviceCallback>&);
- ~CameraDeviceSession();
+ virtual ~CameraDeviceSession();
// Call by CameraDevice to dump active device states
void dumpState(const native_handle_t* fd);
// Caller must use this method to check if CameraDeviceSession ctor failed
@@ -83,23 +85,35 @@
void disconnect();
bool isClosed();
- // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow.
+ // Retrieve the HIDL interface, split into its own class to avoid inheritance issues when
+ // dealing with minor version revs and simultaneous implementation and interface inheritance
+ virtual sp<ICameraDeviceSession> getInterface() {
+ return new TrampolineSessionInterface_3_2(this);
+ }
+
+protected:
+
+ // Methods from ::android::hardware::camera::device::V3_2::ICameraDeviceSession follow
+
Return<void> constructDefaultRequestSettings(
- RequestTemplate type, constructDefaultRequestSettings_cb _hidl_cb) override;
+ RequestTemplate type,
+ ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb);
Return<void> configureStreams(
- const StreamConfiguration& requestedConfiguration, configureStreams_cb _hidl_cb) override;
+ const StreamConfiguration& requestedConfiguration,
+ ICameraDeviceSession::configureStreams_cb _hidl_cb);
Return<void> getCaptureRequestMetadataQueue(
- getCaptureRequestMetadataQueue_cb _hidl_cb) override;
+ ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb);
Return<void> getCaptureResultMetadataQueue(
- getCaptureResultMetadataQueue_cb _hidl_cb) override;
+ ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb);
Return<void> processCaptureRequest(
const hidl_vec<CaptureRequest>& requests,
const hidl_vec<BufferCache>& cachesToRemove,
- processCaptureRequest_cb _hidl_cb) override;
- Return<Status> flush() override;
- Return<void> close() override;
+ ICameraDeviceSession::processCaptureRequest_cb _hidl_cb);
+ Return<Status> flush();
+ Return<void> close();
-private:
+protected:
+
// protecting mClosed/mDisconnected/mInitFail
mutable Mutex mStateLock;
// device is closed either
@@ -302,6 +316,52 @@
*/
static callbacks_process_capture_result_t sProcessCaptureResult;
static callbacks_notify_t sNotify;
+
+private:
+
+ struct TrampolineSessionInterface_3_2 : public ICameraDeviceSession {
+ TrampolineSessionInterface_3_2(sp<CameraDeviceSession> parent) :
+ mParent(parent) {}
+
+ virtual Return<void> constructDefaultRequestSettings(
+ V3_2::RequestTemplate type,
+ V3_2::ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) override {
+ return mParent->constructDefaultRequestSettings(type, _hidl_cb);
+ }
+
+ virtual Return<void> configureStreams(
+ const V3_2::StreamConfiguration& requestedConfiguration,
+ V3_2::ICameraDeviceSession::configureStreams_cb _hidl_cb) override {
+ return mParent->configureStreams(requestedConfiguration, _hidl_cb);
+ }
+
+ virtual Return<void> processCaptureRequest(const hidl_vec<V3_2::CaptureRequest>& requests,
+ const hidl_vec<V3_2::BufferCache>& cachesToRemove,
+ V3_2::ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) override {
+ return mParent->processCaptureRequest(requests, cachesToRemove, _hidl_cb);
+ }
+
+ virtual Return<void> getCaptureRequestMetadataQueue(
+ V3_2::ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) override {
+ return mParent->getCaptureRequestMetadataQueue(_hidl_cb);
+ }
+
+ virtual Return<void> getCaptureResultMetadataQueue(
+ V3_2::ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) override {
+ return mParent->getCaptureResultMetadataQueue(_hidl_cb);
+ }
+
+ virtual Return<Status> flush() override {
+ return mParent->flush();
+ }
+
+ virtual Return<void> close() override {
+ return mParent->close();
+ }
+
+ private:
+ sp<CameraDeviceSession> mParent;
+ };
};
} // namespace implementation
diff --git a/camera/device/3.2/default/CameraDevice_3_2.h b/camera/device/3.2/default/CameraDevice_3_2.h
index 4e86067..9534707 100644
--- a/camera/device/3.2/default/CameraDevice_3_2.h
+++ b/camera/device/3.2/default/CameraDevice_3_2.h
@@ -80,7 +80,13 @@
Return<void> dumpState(const ::android::hardware::hidl_handle& fd) override;
/* End of Methods from ::android::hardware::camera::device::V3_2::ICameraDevice */
-private:
+protected:
+
+ // Overridden by child implementations for returning different versions of CameraDeviceSession
+ virtual sp<CameraDeviceSession> createSession(camera3_device_t*,
+ const camera_metadata_t* deviceInfo,
+ const sp<ICameraDeviceCallback>&);
+
const sp<CameraModule> mModule;
const std::string mCameraId;
// const after ctor
diff --git a/camera/device/3.3/Android.bp b/camera/device/3.3/Android.bp
index 2a19991..29b63f8 100644
--- a/camera/device/3.3/Android.bp
+++ b/camera/device/3.3/Android.bp
@@ -70,3 +70,88 @@
"android.hardware.graphics.common@1.0",
],
}
+
+genrule {
+ name: "android.hardware.camera.device@3.3-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.3",
+ srcs: [
+ ":android.hardware.camera.device@3.3_hal",
+ ],
+ out: [
+ "android/hardware/camera/device/3.3/ACameraDeviceSession.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.device@3.3-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.3",
+ srcs: [
+ ":android.hardware.camera.device@3.3_hal",
+ ],
+ out: [
+ "android/hardware/camera/device/3.3/ACameraDeviceSession.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.camera.device@3.3-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.camera.device@3.3-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.camera.device@3.3-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.camera.device@3.3-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.camera.device@3.2-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.camera.device@3.2-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.device@3.3-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.device@3.3",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.camera.device@3.3-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.camera.device@3.3-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.camera.device@3.3-adapter_genc++"],
+}
diff --git a/camera/device/3.3/default/Android.bp b/camera/device/3.3/default/Android.bp
new file mode 100644
index 0000000..b1e9b46
--- /dev/null
+++ b/camera/device/3.3/default/Android.bp
@@ -0,0 +1,30 @@
+cc_library_shared {
+ name: "camera.device@3.3-impl",
+ defaults: ["hidl_defaults"],
+ proprietary: true,
+ srcs: ["CameraDevice.cpp",
+ "CameraDeviceSession.cpp",
+ "convert.cpp"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "libcutils",
+ "camera.device@3.2-impl",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
+ "android.hardware.camera.provider@2.4",
+ "android.hardware.graphics.mapper@2.0",
+ "liblog",
+ "libhardware",
+ "libcamera_metadata",
+ "libfmq"
+ ],
+ static_libs: [
+ "android.hardware.camera.common@1.0-helper"
+ ],
+ export_include_dirs: ["."],
+ export_shared_lib_headers: [
+ "libfmq",
+ ]
+}
diff --git a/camera/device/3.3/default/CameraDevice.cpp b/camera/device/3.3/default/CameraDevice.cpp
new file mode 100644
index 0000000..ce5e1de
--- /dev/null
+++ b/camera/device/3.3/default/CameraDevice.cpp
@@ -0,0 +1,67 @@
+/*
+ * 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 "CamDev@3.3-impl"
+#include <log/log.h>
+
+#include <utils/Vector.h>
+#include <utils/Trace.h>
+#include "CameraDevice_3_3.h"
+#include <include/convert.h>
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace device {
+namespace V3_3 {
+namespace implementation {
+
+using ::android::hardware::camera::common::V1_0::Status;
+using namespace ::android::hardware::camera::device;
+
+CameraDevice::CameraDevice(
+ sp<CameraModule> module, const std::string& cameraId,
+ const SortedVector<std::pair<std::string, std::string>>& cameraDeviceNames) :
+ V3_2::implementation::CameraDevice(module, cameraId, cameraDeviceNames) {
+}
+
+CameraDevice::~CameraDevice() {
+}
+
+sp<V3_2::implementation::CameraDeviceSession> CameraDevice::createSession(camera3_device_t* device,
+ const camera_metadata_t* deviceInfo,
+ const sp<V3_2::ICameraDeviceCallback>& callback) {
+ sp<CameraDeviceSession> session = new CameraDeviceSession(device, deviceInfo, callback);
+ IF_ALOGV() {
+ session->getInterface()->interfaceChain([](
+ ::android::hardware::hidl_vec<::android::hardware::hidl_string> interfaceChain) {
+ ALOGV("Session interface chain:");
+ for (auto iface : interfaceChain) {
+ ALOGV(" %s", iface.c_str());
+ }
+ });
+ }
+ return session;
+}
+
+// End of methods from ::android::hardware::camera::device::V3_2::ICameraDevice.
+
+} // namespace implementation
+} // namespace V3_3
+} // namespace device
+} // namespace camera
+} // namespace hardware
+} // namespace android
diff --git a/camera/device/3.3/default/CameraDeviceSession.cpp b/camera/device/3.3/default/CameraDeviceSession.cpp
new file mode 100644
index 0000000..f877895
--- /dev/null
+++ b/camera/device/3.3/default/CameraDeviceSession.cpp
@@ -0,0 +1,178 @@
+/*
+ * 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 "CamDevSession@3.3-impl"
+#include <android/log.h>
+
+#include <set>
+#include <utils/Trace.h>
+#include <hardware/gralloc.h>
+#include <hardware/gralloc1.h>
+#include "CameraDeviceSession.h"
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace device {
+namespace V3_3 {
+namespace implementation {
+
+CameraDeviceSession::CameraDeviceSession(
+ camera3_device_t* device,
+ const camera_metadata_t* deviceInfo,
+ const sp<V3_2::ICameraDeviceCallback>& callback) :
+ V3_2::implementation::CameraDeviceSession(device, deviceInfo, callback) {
+}
+
+CameraDeviceSession::~CameraDeviceSession() {
+}
+
+Return<void> CameraDeviceSession::configureStreams_3_3(
+ const StreamConfiguration& requestedConfiguration,
+ ICameraDeviceSession::configureStreams_3_3_cb _hidl_cb) {
+ Status status = initStatus();
+ HalStreamConfiguration outStreams;
+
+ // hold the inflight lock for entire configureStreams scope since there must not be any
+ // inflight request/results during stream configuration.
+ Mutex::Autolock _l(mInflightLock);
+ if (!mInflightBuffers.empty()) {
+ ALOGE("%s: trying to configureStreams while there are still %zu inflight buffers!",
+ __FUNCTION__, mInflightBuffers.size());
+ _hidl_cb(Status::INTERNAL_ERROR, outStreams);
+ return Void();
+ }
+
+ if (!mInflightAETriggerOverrides.empty()) {
+ ALOGE("%s: trying to configureStreams while there are still %zu inflight"
+ " trigger overrides!", __FUNCTION__,
+ mInflightAETriggerOverrides.size());
+ _hidl_cb(Status::INTERNAL_ERROR, outStreams);
+ return Void();
+ }
+
+ if (!mInflightRawBoostPresent.empty()) {
+ ALOGE("%s: trying to configureStreams while there are still %zu inflight"
+ " boost overrides!", __FUNCTION__,
+ mInflightRawBoostPresent.size());
+ _hidl_cb(Status::INTERNAL_ERROR, outStreams);
+ return Void();
+ }
+
+ if (status != Status::OK) {
+ _hidl_cb(status, outStreams);
+ return Void();
+ }
+
+ camera3_stream_configuration_t stream_list;
+ hidl_vec<camera3_stream_t*> streams;
+
+ stream_list.operation_mode = (uint32_t) requestedConfiguration.operationMode;
+ stream_list.num_streams = requestedConfiguration.streams.size();
+ streams.resize(stream_list.num_streams);
+ stream_list.streams = streams.data();
+
+ for (uint32_t i = 0; i < stream_list.num_streams; i++) {
+ int id = requestedConfiguration.streams[i].id;
+
+ if (mStreamMap.count(id) == 0) {
+ Camera3Stream stream;
+ V3_2::implementation::convertFromHidl(requestedConfiguration.streams[i], &stream);
+ mStreamMap[id] = stream;
+ mStreamMap[id].data_space = mapToLegacyDataspace(
+ mStreamMap[id].data_space);
+ mCirculatingBuffers.emplace(stream.mId, CirculatingBuffers{});
+ } else {
+ // width/height/format must not change, but usage/rotation might need to change
+ if (mStreamMap[id].stream_type !=
+ (int) requestedConfiguration.streams[i].streamType ||
+ mStreamMap[id].width != requestedConfiguration.streams[i].width ||
+ mStreamMap[id].height != requestedConfiguration.streams[i].height ||
+ mStreamMap[id].format != (int) requestedConfiguration.streams[i].format ||
+ mStreamMap[id].data_space !=
+ mapToLegacyDataspace( static_cast<android_dataspace_t> (
+ requestedConfiguration.streams[i].dataSpace))) {
+ ALOGE("%s: stream %d configuration changed!", __FUNCTION__, id);
+ _hidl_cb(Status::INTERNAL_ERROR, outStreams);
+ return Void();
+ }
+ mStreamMap[id].rotation = (int) requestedConfiguration.streams[i].rotation;
+ mStreamMap[id].usage = (uint32_t) requestedConfiguration.streams[i].usage;
+ }
+ streams[i] = &mStreamMap[id];
+ }
+
+ ATRACE_BEGIN("camera3->configure_streams");
+ status_t ret = mDevice->ops->configure_streams(mDevice, &stream_list);
+ ATRACE_END();
+
+ // In case Hal returns error most likely it was not able to release
+ // the corresponding resources of the deleted streams.
+ if (ret == OK) {
+ // delete unused streams, note we do this after adding new streams to ensure new stream
+ // will not have the same address as deleted stream, and HAL has a chance to reference
+ // the to be deleted stream in configure_streams call
+ for(auto it = mStreamMap.begin(); it != mStreamMap.end();) {
+ int id = it->first;
+ bool found = false;
+ for (const auto& stream : requestedConfiguration.streams) {
+ if (id == stream.id) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ // Unmap all buffers of deleted stream
+ // in case the configuration call succeeds and HAL
+ // is able to release the corresponding resources too.
+ cleanupBuffersLocked(id);
+ it = mStreamMap.erase(it);
+ } else {
+ ++it;
+ }
+ }
+
+ // Track video streams
+ mVideoStreamIds.clear();
+ for (const auto& stream : requestedConfiguration.streams) {
+ if (stream.streamType == V3_2::StreamType::OUTPUT &&
+ stream.usage &
+ graphics::common::V1_0::BufferUsage::VIDEO_ENCODER) {
+ mVideoStreamIds.push_back(stream.id);
+ }
+ }
+ mResultBatcher.setBatchedStreams(mVideoStreamIds);
+ }
+
+ if (ret == -EINVAL) {
+ status = Status::ILLEGAL_ARGUMENT;
+ } else if (ret != OK) {
+ status = Status::INTERNAL_ERROR;
+ } else {
+ convertToHidl(stream_list, &outStreams);
+ mFirstRequest = true;
+ }
+
+ _hidl_cb(status, outStreams);
+ return Void();
+}
+
+} // namespace implementation
+} // namespace V3_3
+} // namespace device
+} // namespace camera
+} // namespace hardware
+} // namespace android
diff --git a/camera/device/3.3/default/CameraDeviceSession.h b/camera/device/3.3/default/CameraDeviceSession.h
new file mode 100644
index 0000000..dd52b35
--- /dev/null
+++ b/camera/device/3.3/default/CameraDeviceSession.h
@@ -0,0 +1,138 @@
+/*
+ * 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_CAMERA_DEVICE_V3_3_CAMERADEVICE3SESSION_H
+#define ANDROID_HARDWARE_CAMERA_DEVICE_V3_3_CAMERADEVICE3SESSION_H
+
+#include <android/hardware/camera/device/3.2/ICameraDevice.h>
+#include <android/hardware/camera/device/3.3/ICameraDeviceSession.h>
+#include <../../3.2/default/CameraDeviceSession.h>
+#include <fmq/MessageQueue.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <include/convert.h>
+#include <deque>
+#include <map>
+#include <unordered_map>
+#include "CameraMetadata.h"
+#include "HandleImporter.h"
+#include "hardware/camera3.h"
+#include "hardware/camera_common.h"
+#include "utils/Mutex.h"
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace device {
+namespace V3_3 {
+namespace implementation {
+
+using namespace ::android::hardware::camera::device;
+using ::android::hardware::camera::device::V3_2::CaptureRequest;
+using ::android::hardware::camera::device::V3_2::StreamConfiguration;
+using ::android::hardware::camera::device::V3_3::HalStreamConfiguration;
+using ::android::hardware::camera::device::V3_3::ICameraDeviceSession;
+using ::android::hardware::camera::common::V1_0::Status;
+using ::android::hardware::camera::common::V1_0::helper::HandleImporter;
+using ::android::hardware::kSynchronizedReadWrite;
+using ::android::hardware::MessageQueue;
+using ::android::hardware::MQDescriptorSync;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+using ::android::Mutex;
+
+struct CameraDeviceSession : public V3_2::implementation::CameraDeviceSession {
+
+ CameraDeviceSession(camera3_device_t*,
+ const camera_metadata_t* deviceInfo,
+ const sp<V3_2::ICameraDeviceCallback>&);
+ virtual ~CameraDeviceSession();
+
+ virtual sp<V3_2::ICameraDeviceSession> getInterface() override {
+ return new TrampolineSessionInterface_3_3(this);
+ }
+
+protected:
+ // Methods from v3.2 and earlier will trampoline to inherited implementation
+
+ // New methods for v3.3
+
+ Return<void> configureStreams_3_3(
+ const StreamConfiguration& requestedConfiguration,
+ ICameraDeviceSession::configureStreams_3_3_cb _hidl_cb);
+private:
+
+ struct TrampolineSessionInterface_3_3 : public ICameraDeviceSession {
+ TrampolineSessionInterface_3_3(sp<CameraDeviceSession> parent) :
+ mParent(parent) {}
+
+ virtual Return<void> constructDefaultRequestSettings(
+ V3_2::RequestTemplate type,
+ V3_3::ICameraDeviceSession::constructDefaultRequestSettings_cb _hidl_cb) override {
+ return mParent->constructDefaultRequestSettings(type, _hidl_cb);
+ }
+
+ virtual Return<void> configureStreams(
+ const V3_2::StreamConfiguration& requestedConfiguration,
+ V3_3::ICameraDeviceSession::configureStreams_cb _hidl_cb) override {
+ return mParent->configureStreams(requestedConfiguration, _hidl_cb);
+ }
+
+ virtual Return<void> processCaptureRequest(const hidl_vec<V3_2::CaptureRequest>& requests,
+ const hidl_vec<V3_2::BufferCache>& cachesToRemove,
+ V3_3::ICameraDeviceSession::processCaptureRequest_cb _hidl_cb) override {
+ return mParent->processCaptureRequest(requests, cachesToRemove, _hidl_cb);
+ }
+
+ virtual Return<void> getCaptureRequestMetadataQueue(
+ V3_3::ICameraDeviceSession::getCaptureRequestMetadataQueue_cb _hidl_cb) override {
+ return mParent->getCaptureRequestMetadataQueue(_hidl_cb);
+ }
+
+ virtual Return<void> getCaptureResultMetadataQueue(
+ V3_3::ICameraDeviceSession::getCaptureResultMetadataQueue_cb _hidl_cb) override {
+ return mParent->getCaptureResultMetadataQueue(_hidl_cb);
+ }
+
+ virtual Return<Status> flush() override {
+ return mParent->flush();
+ }
+
+ virtual Return<void> close() override {
+ return mParent->close();
+ }
+
+ virtual Return<void> configureStreams_3_3(
+ const StreamConfiguration& requestedConfiguration, configureStreams_3_3_cb _hidl_cb) override {
+ return mParent->configureStreams_3_3(requestedConfiguration, _hidl_cb);
+ }
+
+ private:
+ sp<CameraDeviceSession> mParent;
+ };
+};
+
+} // namespace implementation
+} // namespace V3_3
+} // namespace device
+} // namespace camera
+} // namespace hardware
+} // namespace android
+
+#endif // ANDROID_HARDWARE_CAMERA_DEVICE_V3_3_CAMERADEVICE3SESSION_H
diff --git a/camera/device/3.3/default/CameraDevice_3_3.h b/camera/device/3.3/default/CameraDevice_3_3.h
new file mode 100644
index 0000000..18b3fe8
--- /dev/null
+++ b/camera/device/3.3/default/CameraDevice_3_3.h
@@ -0,0 +1,75 @@
+/*
+ * 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_CAMERA_DEVICE_V3_3_CAMERADEVICE_H
+#define ANDROID_HARDWARE_CAMERA_DEVICE_V3_3_CAMERADEVICE_H
+
+#include "utils/Mutex.h"
+#include "CameraModule.h"
+#include "CameraMetadata.h"
+#include "CameraDeviceSession.h"
+#include <../../3.2/default/CameraDevice_3_2.h>
+
+#include <android/hardware/camera/device/3.2/ICameraDevice.h>
+#include <hidl/Status.h>
+#include <hidl/MQDescriptor.h>
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace device {
+namespace V3_3 {
+namespace implementation {
+
+using namespace ::android::hardware::camera::device;
+using ::android::hardware::camera::common::V1_0::helper::CameraModule;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+/*
+ * The camera device HAL implementation is opened lazily (via the open call)
+ */
+struct CameraDevice : public V3_2::implementation::CameraDevice {
+
+ // Called by provider HAL.
+ // Provider HAL must ensure the uniqueness of CameraDevice object per cameraId, or there could
+ // be multiple CameraDevice trying to access the same physical camera. Also, provider will have
+ // to keep track of all CameraDevice objects in order to notify CameraDevice when the underlying
+ // camera is detached.
+ // Delegates nearly all work to CameraDevice_3_2
+ CameraDevice(sp<CameraModule> module,
+ const std::string& cameraId,
+ const SortedVector<std::pair<std::string, std::string>>& cameraDeviceNames);
+ ~CameraDevice();
+
+protected:
+ virtual sp<V3_2::implementation::CameraDeviceSession> createSession(camera3_device_t*,
+ const camera_metadata_t* deviceInfo,
+ const sp<V3_2::ICameraDeviceCallback>&) override;
+
+};
+
+} // namespace implementation
+} // namespace V3_3
+} // namespace device
+} // namespace camera
+} // namespace hardware
+} // namespace android
+
+#endif // ANDROID_HARDWARE_CAMERA_DEVICE_V3_3_CAMERADEVICE_H
diff --git a/camera/device/3.3/default/OWNERS b/camera/device/3.3/default/OWNERS
new file mode 100644
index 0000000..18acfee
--- /dev/null
+++ b/camera/device/3.3/default/OWNERS
@@ -0,0 +1,6 @@
+cychen@google.com
+epeev@google.com
+etalvala@google.com
+shuzhenwang@google.com
+yinchiayeh@google.com
+zhijunhe@google.com
diff --git a/camera/device/3.3/default/convert.cpp b/camera/device/3.3/default/convert.cpp
new file mode 100644
index 0000000..dae190b
--- /dev/null
+++ b/camera/device/3.3/default/convert.cpp
@@ -0,0 +1,65 @@
+/*
+ * 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 "android.hardware.camera.device@3.3-convert-impl"
+#include <log/log.h>
+
+#include "include/convert.h"
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace device {
+namespace V3_3 {
+namespace implementation {
+
+using ::android::hardware::graphics::common::V1_0::Dataspace;
+using ::android::hardware::graphics::common::V1_0::PixelFormat;
+using ::android::hardware::camera::device::V3_2::BufferUsageFlags;
+
+void convertToHidl(const Camera3Stream* src, HalStream* dst) {
+ dst->overrideDataSpace = src->data_space;
+ dst->v3_2.id = src->mId;
+ dst->v3_2.overrideFormat = (PixelFormat) src->format;
+ dst->v3_2.maxBuffers = src->max_buffers;
+ if (src->stream_type == CAMERA3_STREAM_OUTPUT) {
+ dst->v3_2.consumerUsage = (BufferUsageFlags)0;
+ dst->v3_2.producerUsage = (BufferUsageFlags)src->usage;
+ } else if (src->stream_type == CAMERA3_STREAM_INPUT) {
+ dst->v3_2.producerUsage = (BufferUsageFlags)0;
+ dst->v3_2.consumerUsage = (BufferUsageFlags)src->usage;
+ } else {
+ //Should not reach here per current HIDL spec, but we might end up adding
+ // bi-directional stream to HIDL.
+ ALOGW("%s: Stream type %d is not currently supported!",
+ __FUNCTION__, src->stream_type);
+ }
+}
+
+void convertToHidl(const camera3_stream_configuration_t& src, HalStreamConfiguration* dst) {
+ dst->streams.resize(src.num_streams);
+ for (uint32_t i = 0; i < src.num_streams; i++) {
+ convertToHidl(static_cast<Camera3Stream*>(src.streams[i]), &dst->streams[i]);
+ }
+ return;
+}
+
+} // namespace implementation
+} // namespace V3_3
+} // namespace device
+} // namespace camera
+} // namespace hardware
+} // namespace android
diff --git a/camera/device/3.3/default/include/convert.h b/camera/device/3.3/default/include/convert.h
new file mode 100644
index 0000000..23bb797
--- /dev/null
+++ b/camera/device/3.3/default/include/convert.h
@@ -0,0 +1,49 @@
+/*
+ * 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 HARDWARE_INTERFACES_CAMERA_DEVICE_V3_3_DEFAULT_INCLUDE_CONVERT_H_
+
+#define HARDWARE_INTERFACES_CAMERA_DEVICE_V3_3_DEFAULT_INCLUDE_CONVERT_H_
+
+#include <set>
+
+
+#include <android/hardware/graphics/common/1.0/types.h>
+#include <android/hardware/camera/device/3.3/types.h>
+#include "hardware/camera3.h"
+#include "../../3.2/default/include/convert.h"
+
+namespace android {
+namespace hardware {
+namespace camera {
+namespace device {
+namespace V3_3 {
+namespace implementation {
+
+using ::android::hardware::camera::device::V3_2::implementation::Camera3Stream;
+
+void convertToHidl(const Camera3Stream* src, HalStream* dst);
+
+void convertToHidl(const camera3_stream_configuration_t& src, HalStreamConfiguration* dst);
+
+} // namespace implementation
+} // namespace V3_3
+} // namespace device
+} // namespace camera
+} // namespace hardware
+} // namespace android
+
+#endif // HARDWARE_INTERFACES_CAMERA_DEVICE_V3_3_DEFAULT_INCLUDE_CONVERT_H_
diff --git a/camera/provider/2.4/Android.bp b/camera/provider/2.4/Android.bp
index 82a3a78..a71ee43 100644
--- a/camera/provider/2.4/Android.bp
+++ b/camera/provider/2.4/Android.bp
@@ -62,7 +62,6 @@
"android.hardware.camera.common@1.0",
"android.hardware.camera.device@1.0",
"android.hardware.camera.device@3.2",
- "android.hardware.graphics.common@1.0",
],
export_shared_lib_headers: [
"libhidlbase",
@@ -72,6 +71,95 @@
"android.hardware.camera.common@1.0",
"android.hardware.camera.device@1.0",
"android.hardware.camera.device@3.2",
- "android.hardware.graphics.common@1.0",
],
}
+
+genrule {
+ name: "android.hardware.camera.provider@2.4-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.provider@2.4",
+ srcs: [
+ ":android.hardware.camera.provider@2.4_hal",
+ ],
+ out: [
+ "android/hardware/camera/provider/2.4/ACameraProvider.cpp",
+ "android/hardware/camera/provider/2.4/ACameraProviderCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.provider@2.4-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.provider@2.4",
+ srcs: [
+ ":android.hardware.camera.provider@2.4_hal",
+ ],
+ out: [
+ "android/hardware/camera/provider/2.4/ACameraProvider.h",
+ "android/hardware/camera/provider/2.4/ACameraProviderCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.camera.provider@2.4-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.camera.provider@2.4-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.camera.provider@2.4-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.camera.provider@2.4-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.provider@2.4",
+ "android.hardware.camera.device@1.0-adapter-helper",
+ "android.hardware.camera.device@3.2-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.provider@2.4",
+ "android.hardware.camera.device@1.0-adapter-helper",
+ "android.hardware.camera.device@3.2-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.camera.provider@2.4-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.camera.provider@2.4",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.camera.provider@2.4-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.camera.common@1.0",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.provider@2.4",
+ "android.hardware.camera.provider@2.4-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.camera.provider@2.4-adapter_genc++"],
+}
diff --git a/camera/provider/2.4/default/Android.bp b/camera/provider/2.4/default/Android.bp
index f2a2d2e..c0b3591 100644
--- a/camera/provider/2.4/default/Android.bp
+++ b/camera/provider/2.4/default/Android.bp
@@ -11,8 +11,10 @@
"libcutils",
"android.hardware.camera.device@1.0",
"android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
"camera.device@1.0-impl",
"camera.device@3.2-impl",
+ "camera.device@3.3-impl",
"android.hardware.camera.provider@2.4",
"android.hardware.camera.common@1.0",
"android.hardware.graphics.mapper@2.0",
@@ -43,6 +45,7 @@
"libutils",
"android.hardware.camera.device@1.0",
"android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
"android.hardware.camera.provider@2.4",
"android.hardware.camera.common@1.0",
],
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index 19f7bdd..d50168a 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -15,11 +15,13 @@
*/
#define LOG_TAG "CamProvider@2.4-impl"
+//#define LOG_NDEBUG 0
#include <android/log.h>
#include "CameraProvider.h"
#include "CameraDevice_1_0.h"
-#include "CameraDevice_3_2.h"
+#include "CameraDevice_3_3.h"
+#include <cutils/properties.h>
#include <string.h>
#include <utils/Trace.h>
@@ -36,6 +38,7 @@
// "device@<version>/legacy/<id>"
const std::regex kDeviceNameRE("device@([0-9]+\\.[0-9]+)/legacy/(.+)");
const char *kHAL3_2 = "3.2";
+const char *kHAL3_3 = "3.3";
const char *kHAL1_0 = "1.0";
const int kMaxCameraDeviceNameLen = 128;
const int kMaxCameraIdLen = 16;
@@ -140,8 +143,9 @@
if (!match) {
return -1;
}
- if (deviceVersion == kHAL3_2) {
- // maybe switched to 3.4 or define the hidl version enum later
+ if (deviceVersion == kHAL3_3) {
+ return CAMERA_DEVICE_API_VERSION_3_3;
+ } else if (deviceVersion == kHAL3_2) {
return CAMERA_DEVICE_API_VERSION_3_2;
} else if (deviceVersion == kHAL1_0) {
return CAMERA_DEVICE_API_VERSION_1_0;
@@ -158,10 +162,12 @@
deviceVersion != CAMERA_DEVICE_API_VERSION_3_4 ) {
return hidl_string("");
}
- const char* versionStr = (deviceVersion == CAMERA_DEVICE_API_VERSION_1_0) ? kHAL1_0 : kHAL3_2;
+ bool isV1 = deviceVersion == CAMERA_DEVICE_API_VERSION_1_0;
+ int versionMajor = isV1 ? 1 : 3;
+ int versionMinor = isV1 ? 0 : mPreferredHal3MinorVersion;
char deviceName[kMaxCameraDeviceNameLen];
- snprintf(deviceName, sizeof(deviceName), "device@%s/legacy/%s",
- versionStr, cameraId.c_str());
+ snprintf(deviceName, sizeof(deviceName), "device@%d.%d/legacy/%s",
+ versionMajor, versionMinor, cameraId.c_str());
return deviceName;
}
@@ -205,6 +211,19 @@
return true;
}
+ mPreferredHal3MinorVersion = property_get_int32("ro.camera.wrapper.hal3TrebleMinorVersion", 3);
+ ALOGV("Preferred HAL 3 minor version is %d", mPreferredHal3MinorVersion);
+ switch(mPreferredHal3MinorVersion) {
+ case 2:
+ case 3:
+ // OK
+ break;
+ default:
+ ALOGW("Unknown minor camera device HAL version %d in property "
+ "'camera.wrapper.hal3TrebleMinorVersion', defaulting to 3", mPreferredHal3MinorVersion);
+ mPreferredHal3MinorVersion = 3;
+ }
+
mNumberOfLegacyCameras = mModule->getNumberOfCameras();
for (int i = 0; i < mNumberOfLegacyCameras; i++) {
struct camera_info info;
@@ -461,23 +480,45 @@
return Void();
}
- sp<android::hardware::camera::device::V3_2::implementation::CameraDevice> device =
- new android::hardware::camera::device::V3_2::implementation::CameraDevice(
+ // Since some Treble HAL revisions can map to the same legacy HAL version(s), we default
+ // to the newest possible Treble HAL revision, but allow for override if needed via
+ // system property.
+ sp<android::hardware::camera::device::V3_2::ICameraDevice> device;
+ switch (mPreferredHal3MinorVersion) {
+ case 2: { // Map legacy camera device v3 HAL to Treble camera device HAL v3.2
+ ALOGV("Constructing v3.2 camera device");
+ sp<android::hardware::camera::device::V3_2::implementation::CameraDevice> deviceImpl =
+ new android::hardware::camera::device::V3_2::implementation::CameraDevice(
mModule, cameraId, mCameraDeviceNames);
-
- if (device == nullptr) {
- ALOGE("%s: cannot allocate camera device for id %s", __FUNCTION__, cameraId.c_str());
- _hidl_cb(Status::INTERNAL_ERROR, nullptr);
- return Void();
+ if (deviceImpl == nullptr || deviceImpl->isInitFailed()) {
+ ALOGE("%s: camera device %s init failed!", __FUNCTION__, cameraId.c_str());
+ device = nullptr;
+ _hidl_cb(Status::INTERNAL_ERROR, nullptr);
+ return Void();
+ }
+ device = deviceImpl;
+ break;
+ }
+ case 3: { // Map legacy camera device v3 HAL to Treble camera device HAL v3.3
+ ALOGV("Constructing v3.3 camera device");
+ sp<android::hardware::camera::device::V3_2::implementation::CameraDevice> deviceImpl =
+ new android::hardware::camera::device::V3_3::implementation::CameraDevice(
+ mModule, cameraId, mCameraDeviceNames);
+ if (deviceImpl == nullptr || deviceImpl->isInitFailed()) {
+ ALOGE("%s: camera device %s init failed!", __FUNCTION__, cameraId.c_str());
+ device = nullptr;
+ _hidl_cb(Status::INTERNAL_ERROR, nullptr);
+ return Void();
+ }
+ device = deviceImpl;
+ break;
+ }
+ default:
+ ALOGE("%s: Unknown HAL minor version %d!", __FUNCTION__, mPreferredHal3MinorVersion);
+ device = nullptr;
+ _hidl_cb(Status::INTERNAL_ERROR, nullptr);
+ return Void();
}
-
- if (device->isInitFailed()) {
- ALOGE("%s: camera device %s init failed!", __FUNCTION__, cameraId.c_str());
- device = nullptr;
- _hidl_cb(Status::INTERNAL_ERROR, nullptr);
- return Void();
- }
-
_hidl_cb (Status::OK, device);
return Void();
}
diff --git a/camera/provider/2.4/default/CameraProvider.h b/camera/provider/2.4/default/CameraProvider.h
index 75971fa..4980711 100644
--- a/camera/provider/2.4/default/CameraProvider.h
+++ b/camera/provider/2.4/default/CameraProvider.h
@@ -82,6 +82,8 @@
// (cameraId string, hidl device name) pairs
SortedVector<std::pair<std::string, std::string>> mCameraDeviceNames;
+ int mPreferredHal3MinorVersion;
+
// Must be queried before using any APIs.
// APIs will only work when this returns true
bool mInitFailed;
@@ -91,13 +93,13 @@
bool setUpVendorTags();
int checkCameraVersion(int id, camera_info info);
+ // create HIDL device name from camera ID and legacy device version
+ std::string getHidlDeviceName(std::string cameraId, int deviceVersion);
+
// extract legacy camera ID/device version from a HIDL device name
static std::string getLegacyCameraId(const hidl_string& deviceName);
static int getCameraDeviceVersion(const hidl_string& deviceName);
- // create HIDL device name from camera ID and device version
- static std::string getHidlDeviceName(std::string cameraId, int deviceVersion);
-
// convert conventional HAL status to HIDL Status
static Status getHidlStatus(int);
diff --git a/camera/provider/2.4/vts/functional/Android.bp b/camera/provider/2.4/vts/functional/Android.bp
index 84d76f1..81d3de1 100644
--- a/camera/provider/2.4/vts/functional/Android.bp
+++ b/camera/provider/2.4/vts/functional/Android.bp
@@ -34,6 +34,7 @@
"android.hardware.camera.common@1.0-helper",
"android.hardware.camera.device@1.0",
"android.hardware.camera.device@3.2",
+ "android.hardware.camera.device@3.3",
"android.hardware.camera.provider@2.4",
"android.hardware.graphics.common@1.0",
"android.hardware.graphics.mapper@2.0",
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
index 1392896..e4cf9af 100644
--- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
+++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -26,6 +26,7 @@
#include <android/hardware/camera/device/1.0/ICameraDevice.h>
#include <android/hardware/camera/device/3.2/ICameraDevice.h>
+#include <android/hardware/camera/device/3.3/ICameraDeviceSession.h>
#include <android/hardware/camera/provider/2.4/ICameraProvider.h>
#include <android/hidl/manager/1.0/IServiceManager.h>
#include <binder/MemoryHeapBase.h>
@@ -101,6 +102,8 @@
using ResultMetadataQueue = MessageQueue<uint8_t, kSynchronizedReadWrite>;
using ::android::hidl::manager::V1_0::IServiceManager;
+using namespace ::android::hardware::camera;
+
const uint32_t kMaxPreviewWidth = 1920;
const uint32_t kMaxPreviewHeight = 1080;
const uint32_t kMaxVideoWidth = 4096;
@@ -125,8 +128,10 @@
namespace {
// "device@<version>/legacy/<id>"
const char *kDeviceNameRE = "device@([0-9]+\\.[0-9]+)/%s/(.+)";
+ const int CAMERA_DEVICE_API_VERSION_3_3 = 0x303;
const int CAMERA_DEVICE_API_VERSION_3_2 = 0x302;
const int CAMERA_DEVICE_API_VERSION_1_0 = 0x100;
+ const char *kHAL3_3 = "3.3";
const char *kHAL3_2 = "3.2";
const char *kHAL1_0 = "1.0";
@@ -159,8 +164,9 @@
return -1;
}
- if (version.compare(kHAL3_2) == 0) {
- // maybe switched to 3.4 or define the hidl version enumlater
+ if (version.compare(kHAL3_3) == 0) {
+ return CAMERA_DEVICE_API_VERSION_3_3;
+ } else if (version.compare(kHAL3_2) == 0) {
return CAMERA_DEVICE_API_VERSION_3_2;
} else if (version.compare(kHAL1_0) == 0) {
return CAMERA_DEVICE_API_VERSION_1_0;
@@ -605,6 +611,7 @@
void openEmptyDeviceSession(const std::string &name,
sp<ICameraProvider> provider,
sp<ICameraDeviceSession> *session /*out*/,
+ sp<device::V3_3::ICameraDeviceSession> *session3_3 /*out*/,
camera_metadata_t **staticMeta /*out*/);
void configurePreviewStream(const std::string &name,
sp<ICameraProvider> provider,
@@ -1091,24 +1098,36 @@
hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames(mProvider);
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- Return<void> ret;
- ret = mProvider->getCameraDeviceInterface_V3_x(
- name, [&](auto status, const auto& device3_2) {
- ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device3_2, nullptr);
- });
- ASSERT_TRUE(ret.isOk());
- } else if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_1_0) {
- Return<void> ret;
- ret = mProvider->getCameraDeviceInterface_V1_x(
- name, [&](auto status, const auto& device1) {
- ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device1, nullptr);
- });
- ASSERT_TRUE(ret.isOk());
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ Return<void> ret;
+ ret = mProvider->getCameraDeviceInterface_V3_x(
+ name, [&](auto status, const auto& device3_x) {
+ ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device3_x, nullptr);
+ });
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ Return<void> ret;
+ ret = mProvider->getCameraDeviceInterface_V1_x(
+ name, [&](auto status, const auto& device1) {
+ ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device1, nullptr);
+ });
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -1119,52 +1138,64 @@
hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames(mProvider);
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
- ALOGI("getResourceCost: Testing camera device %s", name.c_str());
- Return<void> ret;
- ret = mProvider->getCameraDeviceInterface_V3_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device3_2 = device;
- });
- ASSERT_TRUE(ret.isOk());
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_x;
+ ALOGI("getResourceCost: Testing camera device %s", name.c_str());
+ Return<void> ret;
+ ret = mProvider->getCameraDeviceInterface_V3_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device3_x = device;
+ });
+ ASSERT_TRUE(ret.isOk());
- ret = device3_2->getResourceCost([&](auto status, const auto& resourceCost) {
- ALOGI("getResourceCost returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ALOGI(" Resource cost is %d", resourceCost.resourceCost);
- ASSERT_LE(resourceCost.resourceCost, 100u);
- for (const auto& name : resourceCost.conflictingDevices) {
- ALOGI(" Conflicting device: %s", name.c_str());
- }
- });
- ASSERT_TRUE(ret.isOk());
- } else {
- ::android::sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
- ALOGI("getResourceCost: Testing camera device %s", name.c_str());
- Return<void> ret;
- ret = mProvider->getCameraDeviceInterface_V1_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
+ ret = device3_x->getResourceCost([&](auto status, const auto& resourceCost) {
+ ALOGI("getResourceCost returns status:%d", (int)status);
ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device1 = device;
+ ALOGI(" Resource cost is %d", resourceCost.resourceCost);
+ ASSERT_LE(resourceCost.resourceCost, 100u);
+ for (const auto& name : resourceCost.conflictingDevices) {
+ ALOGI(" Conflicting device: %s", name.c_str());
+ }
});
- ASSERT_TRUE(ret.isOk());
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ ::android::sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
+ ALOGI("getResourceCost: Testing camera device %s", name.c_str());
+ Return<void> ret;
+ ret = mProvider->getCameraDeviceInterface_V1_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device1 = device;
+ });
+ ASSERT_TRUE(ret.isOk());
- ret = device1->getResourceCost([&](auto status, const auto& resourceCost) {
- ALOGI("getResourceCost returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ALOGI(" Resource cost is %d", resourceCost.resourceCost);
- ASSERT_LE(resourceCost.resourceCost, 100u);
- for (const auto& name : resourceCost.conflictingDevices) {
- ALOGI(" Conflicting device: %s", name.c_str());
- }
- });
- ASSERT_TRUE(ret.isOk());
+ ret = device1->getResourceCost([&](auto status, const auto& resourceCost) {
+ ALOGI("getResourceCost returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ALOGI(" Resource cost is %d", resourceCost.resourceCost);
+ ASSERT_LE(resourceCost.resourceCost, 100u);
+ for (const auto& name : resourceCost.conflictingDevices) {
+ ALOGI(" Conflicting device: %s", name.c_str());
+ }
+ });
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -1846,33 +1877,47 @@
hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames(mProvider);
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
- ALOGI("getCameraCharacteristics: Testing camera device %s", name.c_str());
- Return<void> ret;
- ret = mProvider->getCameraDeviceInterface_V3_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device3_2 = device;
- });
- ASSERT_TRUE(ret.isOk());
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_x;
+ ALOGI("getCameraCharacteristics: Testing camera device %s", name.c_str());
+ Return<void> ret;
+ ret = mProvider->getCameraDeviceInterface_V3_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device3_x = device;
+ });
+ ASSERT_TRUE(ret.isOk());
- ret = device3_2->getCameraCharacteristics([&](auto status, const auto& chars) {
- ALOGI("getCameraCharacteristics returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- const camera_metadata_t* metadata = (camera_metadata_t*)chars.data();
- size_t expectedSize = chars.size();
- int result = validate_camera_metadata_structure(metadata, &expectedSize);
- ASSERT_TRUE((result == 0) || (result == CAMERA_METADATA_VALIDATION_SHIFTED));
- size_t entryCount = get_camera_metadata_entry_count(metadata);
- // TODO: we can do better than 0 here. Need to check how many required
- // characteristics keys we've defined.
- ASSERT_GT(entryCount, 0u);
- ALOGI("getCameraCharacteristics metadata entry count is %zu", entryCount);
- });
- ASSERT_TRUE(ret.isOk());
+ ret = device3_x->getCameraCharacteristics([&](auto status, const auto& chars) {
+ ALOGI("getCameraCharacteristics returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ const camera_metadata_t* metadata = (camera_metadata_t*)chars.data();
+ size_t expectedSize = chars.size();
+ int result = validate_camera_metadata_structure(metadata, &expectedSize);
+ ASSERT_TRUE((result == 0) || (result == CAMERA_METADATA_VALIDATION_SHIFTED));
+ size_t entryCount = get_camera_metadata_entry_count(metadata);
+ // TODO: we can do better than 0 here. Need to check how many required
+ // characteristics keys we've defined.
+ ASSERT_GT(entryCount, 0u);
+ ALOGI("getCameraCharacteristics metadata entry count is %zu", entryCount);
+ });
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -1896,102 +1941,116 @@
ASSERT_EQ(Status::OK, returnStatus);
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
- ALOGI("setTorchMode: Testing camera device %s", name.c_str());
- ret = mProvider->getCameraDeviceInterface_V3_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device3_2 = device;
- });
- ASSERT_TRUE(ret.isOk());
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_x;
+ ALOGI("setTorchMode: Testing camera device %s", name.c_str());
+ ret = mProvider->getCameraDeviceInterface_V3_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device3_x = device;
+ });
+ ASSERT_TRUE(ret.isOk());
- mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
- returnStatus = device3_2->setTorchMode(TorchMode::ON);
- ASSERT_TRUE(returnStatus.isOk());
- if (!torchControlSupported) {
- ASSERT_EQ(Status::METHOD_NOT_SUPPORTED, returnStatus);
- } else {
- ASSERT_TRUE(returnStatus == Status::OK ||
- returnStatus == Status::OPERATION_NOT_SUPPORTED);
- if (returnStatus == Status::OK) {
- {
- std::unique_lock<std::mutex> l(mTorchLock);
- while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::seconds(kTorchTimeoutSec);
- ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l, timeout));
+ mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
+ returnStatus = device3_x->setTorchMode(TorchMode::ON);
+ ASSERT_TRUE(returnStatus.isOk());
+ if (!torchControlSupported) {
+ ASSERT_EQ(Status::METHOD_NOT_SUPPORTED, returnStatus);
+ } else {
+ ASSERT_TRUE(returnStatus == Status::OK ||
+ returnStatus == Status::OPERATION_NOT_SUPPORTED);
+ if (returnStatus == Status::OK) {
+ {
+ std::unique_lock<std::mutex> l(mTorchLock);
+ while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::seconds(kTorchTimeoutSec);
+ ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l, timeout));
+ }
+ ASSERT_EQ(TorchModeStatus::AVAILABLE_ON, mTorchStatus);
+ mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
}
- ASSERT_EQ(TorchModeStatus::AVAILABLE_ON, mTorchStatus);
- mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
- }
- returnStatus = device3_2->setTorchMode(TorchMode::OFF);
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, returnStatus);
+ returnStatus = device3_x->setTorchMode(TorchMode::OFF);
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, returnStatus);
- {
- std::unique_lock<std::mutex> l(mTorchLock);
- while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::seconds(kTorchTimeoutSec);
- ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l, timeout));
+ {
+ std::unique_lock<std::mutex> l(mTorchLock);
+ while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::seconds(kTorchTimeoutSec);
+ ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l, timeout));
+ }
+ ASSERT_EQ(TorchModeStatus::AVAILABLE_OFF, mTorchStatus);
}
- ASSERT_EQ(TorchModeStatus::AVAILABLE_OFF, mTorchStatus);
}
}
}
- } else if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_1_0) {
- ::android::sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
- ALOGI("dumpState: Testing camera device %s", name.c_str());
- ret = mProvider->getCameraDeviceInterface_V1_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device1 = device;
- });
- ASSERT_TRUE(ret.isOk());
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ ::android::sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
+ ALOGI("dumpState: Testing camera device %s", name.c_str());
+ ret = mProvider->getCameraDeviceInterface_V1_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device1 = device;
+ });
+ ASSERT_TRUE(ret.isOk());
- mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
- returnStatus = device1->setTorchMode(TorchMode::ON);
- ASSERT_TRUE(returnStatus.isOk());
- if (!torchControlSupported) {
- ASSERT_EQ(Status::METHOD_NOT_SUPPORTED, returnStatus);
- } else {
- ASSERT_TRUE(returnStatus == Status::OK ||
- returnStatus == Status::OPERATION_NOT_SUPPORTED);
- if (returnStatus == Status::OK) {
- {
- std::unique_lock<std::mutex> l(mTorchLock);
- while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::seconds(kTorchTimeoutSec);
- ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l, timeout));
+ mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
+ returnStatus = device1->setTorchMode(TorchMode::ON);
+ ASSERT_TRUE(returnStatus.isOk());
+ if (!torchControlSupported) {
+ ASSERT_EQ(Status::METHOD_NOT_SUPPORTED, returnStatus);
+ } else {
+ ASSERT_TRUE(returnStatus == Status::OK ||
+ returnStatus == Status::OPERATION_NOT_SUPPORTED);
+ if (returnStatus == Status::OK) {
+ {
+ std::unique_lock<std::mutex> l(mTorchLock);
+ while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::seconds(kTorchTimeoutSec);
+ ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l,
+ timeout));
+ }
+ ASSERT_EQ(TorchModeStatus::AVAILABLE_ON, mTorchStatus);
+ mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
}
- ASSERT_EQ(TorchModeStatus::AVAILABLE_ON, mTorchStatus);
- mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
- }
- returnStatus = device1->setTorchMode(TorchMode::OFF);
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, returnStatus);
+ returnStatus = device1->setTorchMode(TorchMode::OFF);
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, returnStatus);
- {
- std::unique_lock<std::mutex> l(mTorchLock);
- while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::seconds(kTorchTimeoutSec);
- ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l, timeout));
+ {
+ std::unique_lock<std::mutex> l(mTorchLock);
+ while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::seconds(kTorchTimeoutSec);
+ ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l,
+ timeout));
+ }
+ ASSERT_EQ(TorchModeStatus::AVAILABLE_OFF, mTorchStatus);
}
- ASSERT_EQ(TorchModeStatus::AVAILABLE_OFF, mTorchStatus);
}
}
+ ret = device1->close();
+ ASSERT_TRUE(ret.isOk());
}
- ret = device1->close();
- ASSERT_TRUE(ret.isOk());
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
@@ -2006,47 +2065,59 @@
Return<void> ret;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- ::android::sp<ICameraDevice> device3_2;
- ALOGI("dumpState: Testing camera device %s", name.c_str());
- ret = mProvider->getCameraDeviceInterface_V3_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device3_2 = device;
- });
- ASSERT_TRUE(ret.isOk());
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ ::android::sp<ICameraDevice> device3_x;
+ ALOGI("dumpState: Testing camera device %s", name.c_str());
+ ret = mProvider->getCameraDeviceInterface_V3_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device3_x = device;
+ });
+ ASSERT_TRUE(ret.isOk());
- native_handle_t* raw_handle = native_handle_create(1, 0);
- raw_handle->data[0] = open(kDumpOutput, O_RDWR);
- ASSERT_GE(raw_handle->data[0], 0);
- hidl_handle handle = raw_handle;
- ret = device3_2->dumpState(handle);
- ASSERT_TRUE(ret.isOk());
- close(raw_handle->data[0]);
- native_handle_delete(raw_handle);
- } else if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_1_0) {
- ::android::sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
- ALOGI("dumpState: Testing camera device %s", name.c_str());
- ret = mProvider->getCameraDeviceInterface_V1_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device1 = device;
- });
- ASSERT_TRUE(ret.isOk());
+ native_handle_t* raw_handle = native_handle_create(1, 0);
+ raw_handle->data[0] = open(kDumpOutput, O_RDWR);
+ ASSERT_GE(raw_handle->data[0], 0);
+ hidl_handle handle = raw_handle;
+ ret = device3_x->dumpState(handle);
+ ASSERT_TRUE(ret.isOk());
+ close(raw_handle->data[0]);
+ native_handle_delete(raw_handle);
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ ::android::sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
+ ALOGI("dumpState: Testing camera device %s", name.c_str());
+ ret = mProvider->getCameraDeviceInterface_V1_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V1_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device1 = device;
+ });
+ ASSERT_TRUE(ret.isOk());
- native_handle_t* raw_handle = native_handle_create(1, 0);
- raw_handle->data[0] = open(kDumpOutput, O_RDWR);
- ASSERT_GE(raw_handle->data[0], 0);
- hidl_handle handle = raw_handle;
- Return<Status> returnStatus = device1->dumpState(handle);
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, returnStatus);
- close(raw_handle->data[0]);
- native_handle_delete(raw_handle);
+ native_handle_t* raw_handle = native_handle_create(1, 0);
+ raw_handle->data[0] = open(kDumpOutput, O_RDWR);
+ ASSERT_GE(raw_handle->data[0], 0);
+ hidl_handle handle = raw_handle;
+ Return<Status> returnStatus = device1->dumpState(handle);
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, returnStatus);
+ close(raw_handle->data[0]);
+ native_handle_delete(raw_handle);
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2057,58 +2128,79 @@
Return<void> ret;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
- ALOGI("openClose: Testing camera device %s", name.c_str());
- ret = mProvider->getCameraDeviceInterface_V3_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_x;
+ ALOGI("openClose: Testing camera device %s", name.c_str());
+ ret = mProvider->getCameraDeviceInterface_V3_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device3_x = device;
+ });
+ ASSERT_TRUE(ret.isOk());
+
+ sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+ sp<ICameraDeviceSession> session;
+ ret = device3_x->open(cb, [&](auto status, const auto& newSession) {
+ ALOGI("device::open returns status:%d", (int)status);
ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device3_2 = device;
+ ASSERT_NE(newSession, nullptr);
+ session = newSession;
});
- ASSERT_TRUE(ret.isOk());
+ ASSERT_TRUE(ret.isOk());
+ // Ensure that a device labeling itself as 3.3 can have its session interface cast
+ // to the 3.3 interface, and that lower versions can't be cast to it.
+ auto castResult = device::V3_3::ICameraDeviceSession::castFrom(session);
+ ASSERT_TRUE(castResult.isOk());
+ sp<device::V3_3::ICameraDeviceSession> sessionV3_3 = castResult;
+ if (deviceVersion == CAMERA_DEVICE_API_VERSION_3_3) {
+ ASSERT_TRUE(sessionV3_3.get() != nullptr);
+ } else {
+ ASSERT_TRUE(sessionV3_3.get() == nullptr);
+ }
+ native_handle_t* raw_handle = native_handle_create(1, 0);
+ raw_handle->data[0] = open(kDumpOutput, O_RDWR);
+ ASSERT_GE(raw_handle->data[0], 0);
+ hidl_handle handle = raw_handle;
+ ret = device3_x->dumpState(handle);
+ ASSERT_TRUE(ret.isOk());
+ close(raw_handle->data[0]);
+ native_handle_delete(raw_handle);
- sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
- sp<ICameraDeviceSession> session;
- ret = device3_2->open(cb, [&](auto status, const auto& newSession) {
- ALOGI("device::open returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(newSession, nullptr);
- session = newSession;
- });
- ASSERT_TRUE(ret.isOk());
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ // TODO: test all session API calls return INTERNAL_ERROR after close
+ // TODO: keep a wp copy here and verify session cannot be promoted out of this scope
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
+ openCameraDevice(name, mProvider, &device1 /*out*/);
+ ASSERT_NE(nullptr, device1.get());
- native_handle_t* raw_handle = native_handle_create(1, 0);
- raw_handle->data[0] = open(kDumpOutput, O_RDWR);
- ASSERT_GE(raw_handle->data[0], 0);
- hidl_handle handle = raw_handle;
- ret = device3_2->dumpState(handle);
- ASSERT_TRUE(ret.isOk());
- close(raw_handle->data[0]);
- native_handle_delete(raw_handle);
+ native_handle_t* raw_handle = native_handle_create(1, 0);
+ raw_handle->data[0] = open(kDumpOutput, O_RDWR);
+ ASSERT_GE(raw_handle->data[0], 0);
+ hidl_handle handle = raw_handle;
+ Return<Status> returnStatus = device1->dumpState(handle);
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, returnStatus);
+ close(raw_handle->data[0]);
+ native_handle_delete(raw_handle);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
- // TODO: test all session API calls return INTERNAL_ERROR after close
- // TODO: keep a wp copy here and verify session cannot be promoted out of this scope
- } else if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_1_0) {
- sp<::android::hardware::camera::device::V1_0::ICameraDevice> device1;
- openCameraDevice(name, mProvider, &device1 /*out*/);
- ASSERT_NE(nullptr, device1.get());
-
- native_handle_t* raw_handle = native_handle_create(1, 0);
- raw_handle->data[0] = open(kDumpOutput, O_RDWR);
- ASSERT_GE(raw_handle->data[0], 0);
- hidl_handle handle = raw_handle;
- Return<Status> returnStatus = device1->dumpState(handle);
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, returnStatus);
- close(raw_handle->data[0]);
- native_handle_delete(raw_handle);
-
- ret = device1->close();
- ASSERT_TRUE(ret.isOk());
+ ret = device1->close();
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2119,73 +2211,88 @@
hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames(mProvider);
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_2;
- Return<void> ret;
- ALOGI("constructDefaultRequestSettings: Testing camera device %s", name.c_str());
- ret = mProvider->getCameraDeviceInterface_V3_x(
- name, [&](auto status, const auto& device) {
- ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ ::android::sp<::android::hardware::camera::device::V3_2::ICameraDevice> device3_x;
+ Return<void> ret;
+ ALOGI("constructDefaultRequestSettings: Testing camera device %s", name.c_str());
+ ret = mProvider->getCameraDeviceInterface_V3_x(
+ name, [&](auto status, const auto& device) {
+ ALOGI("getCameraDeviceInterface_V3_x returns status:%d", (int)status);
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_NE(device, nullptr);
+ device3_x = device;
+ });
+ ASSERT_TRUE(ret.isOk());
+
+ sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
+ sp<ICameraDeviceSession> session;
+ ret = device3_x->open(cb, [&](auto status, const auto& newSession) {
+ ALOGI("device::open returns status:%d", (int)status);
ASSERT_EQ(Status::OK, status);
- ASSERT_NE(device, nullptr);
- device3_2 = device;
+ ASSERT_NE(newSession, nullptr);
+ session = newSession;
});
- ASSERT_TRUE(ret.isOk());
+ ASSERT_TRUE(ret.isOk());
- sp<EmptyDeviceCb> cb = new EmptyDeviceCb;
- sp<ICameraDeviceSession> session;
- ret = device3_2->open(cb, [&](auto status, const auto& newSession) {
- ALOGI("device::open returns status:%d", (int)status);
- ASSERT_EQ(Status::OK, status);
- ASSERT_NE(newSession, nullptr);
- session = newSession;
- });
- ASSERT_TRUE(ret.isOk());
+ for (uint32_t t = (uint32_t)RequestTemplate::PREVIEW;
+ t <= (uint32_t)RequestTemplate::MANUAL; t++) {
+ RequestTemplate reqTemplate = (RequestTemplate)t;
+ ret =
+ session->constructDefaultRequestSettings(
+ reqTemplate, [&](auto status, const auto& req) {
+ ALOGI("constructDefaultRequestSettings returns status:%d",
+ (int)status);
+ if (reqTemplate == RequestTemplate::ZERO_SHUTTER_LAG ||
+ reqTemplate == RequestTemplate::MANUAL) {
+ // optional templates
+ ASSERT_TRUE((status == Status::OK) ||
+ (status == Status::ILLEGAL_ARGUMENT));
+ } else {
+ ASSERT_EQ(Status::OK, status);
+ }
- for (uint32_t t = (uint32_t)RequestTemplate::PREVIEW;
- t <= (uint32_t)RequestTemplate::MANUAL; t++) {
- RequestTemplate reqTemplate = (RequestTemplate)t;
- ret =
- session->constructDefaultRequestSettings(
- reqTemplate, [&](auto status, const auto& req) {
- ALOGI("constructDefaultRequestSettings returns status:%d",
- (int)status);
- if (reqTemplate == RequestTemplate::ZERO_SHUTTER_LAG ||
- reqTemplate == RequestTemplate::MANUAL) {
- // optional templates
- ASSERT_TRUE((status == Status::OK) ||
- (status == Status::ILLEGAL_ARGUMENT));
- } else {
- ASSERT_EQ(Status::OK, status);
- }
-
- if (status == Status::OK) {
- const camera_metadata_t* metadata =
- (camera_metadata_t*) req.data();
- size_t expectedSize = req.size();
- int result = validate_camera_metadata_structure(
- metadata, &expectedSize);
- ASSERT_TRUE((result == 0) ||
- (result == CAMERA_METADATA_VALIDATION_SHIFTED));
- size_t entryCount =
- get_camera_metadata_entry_count(metadata);
- // TODO: we can do better than 0 here. Need to check how many required
- // request keys we've defined for each template
- ASSERT_GT(entryCount, 0u);
- ALOGI("template %u metadata entry count is %zu",
- t, entryCount);
- } else {
- ASSERT_EQ(0u, req.size());
- }
- });
+ if (status == Status::OK) {
+ const camera_metadata_t* metadata =
+ (camera_metadata_t*) req.data();
+ size_t expectedSize = req.size();
+ int result = validate_camera_metadata_structure(
+ metadata, &expectedSize);
+ ASSERT_TRUE((result == 0) ||
+ (result == CAMERA_METADATA_VALIDATION_SHIFTED));
+ size_t entryCount =
+ get_camera_metadata_entry_count(metadata);
+ // TODO: we can do better than 0 here. Need to check how many required
+ // request keys we've defined for each template
+ ASSERT_GT(entryCount, 0u);
+ ALOGI("template %u metadata entry count is %zu",
+ t, entryCount);
+ } else {
+ ASSERT_EQ(0u, req.size());
+ }
+ });
+ ASSERT_TRUE(ret.isOk());
+ }
+ ret = session->close();
ASSERT_TRUE(ret.isOk());
}
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
+
// Verify that all supported stream formats and sizes can be configured
// successfully.
TEST_F(CameraHidlTest, configureStreamsAvailableOutputs) {
@@ -2193,41 +2300,66 @@
std::vector<AvailableStream> outputStreams;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- camera_metadata_t* staticMeta;
- Return<void> ret;
- sp<ICameraDeviceSession> session;
- openEmptyDeviceSession(name, mProvider, &session /*out*/, &staticMeta /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ camera_metadata_t* staticMeta;
+ Return<void> ret;
+ sp<ICameraDeviceSession> session;
+ sp<device::V3_3::ICameraDeviceSession> session3_3;
+ openEmptyDeviceSession(name, mProvider,
+ &session /*out*/, &session3_3 /*out*/, &staticMeta /*out*/);
- outputStreams.clear();
- ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, outputStreams));
- ASSERT_NE(0u, outputStreams.size());
+ outputStreams.clear();
+ ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, outputStreams));
+ ASSERT_NE(0u, outputStreams.size());
- int32_t streamId = 0;
- for (auto& it : outputStreams) {
- Stream stream = {streamId,
- StreamType::OUTPUT,
- static_cast<uint32_t>(it.width),
- static_cast<uint32_t>(it.height),
- static_cast<PixelFormat>(it.format),
- GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
- 0,
- StreamRotation::ROTATION_0};
- ::android::hardware::hidl_vec<Stream> streams = {stream};
- StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(
- config, [streamId](Status s, HalStreamConfiguration halConfig) {
- ASSERT_EQ(Status::OK, s);
- ASSERT_EQ(1u, halConfig.streams.size());
- ASSERT_EQ(halConfig.streams[0].id, streamId);
- });
+ int32_t streamId = 0;
+ for (auto& it : outputStreams) {
+ Stream stream = {streamId,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(it.width),
+ static_cast<uint32_t>(it.height),
+ static_cast<PixelFormat>(it.format),
+ GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
+ 0,
+ StreamRotation::ROTATION_0};
+ ::android::hardware::hidl_vec<Stream> streams = {stream};
+ StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [streamId](Status s, HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(1u, halConfig.streams.size());
+ ASSERT_EQ(halConfig.streams[0].id, streamId);
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [streamId](Status s, device::V3_3::HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(1u, halConfig.streams.size());
+ ASSERT_EQ(halConfig.streams[0].v3_2.id, streamId);
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+ streamId++;
+ }
+
+ free_camera_metadata(staticMeta);
+ ret = session->close();
ASSERT_TRUE(ret.isOk());
- streamId++;
}
-
- free_camera_metadata(staticMeta);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2238,82 +2370,132 @@
std::vector<AvailableStream> outputStreams;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- camera_metadata_t* staticMeta;
- Return<void> ret;
- sp<ICameraDeviceSession> session;
- openEmptyDeviceSession(name, mProvider, &session /*out*/, &staticMeta /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ camera_metadata_t* staticMeta;
+ Return<void> ret;
+ sp<ICameraDeviceSession> session;
+ sp<device::V3_3::ICameraDeviceSession> session3_3;
+ openEmptyDeviceSession(name, mProvider,
+ &session /*out*/, &session3_3 /*out*/, &staticMeta /*out*/);
- outputStreams.clear();
- ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, outputStreams));
- ASSERT_NE(0u, outputStreams.size());
+ outputStreams.clear();
+ ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, outputStreams));
+ ASSERT_NE(0u, outputStreams.size());
- int32_t streamId = 0;
- Stream stream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(0),
- static_cast<uint32_t>(0),
- static_cast<PixelFormat>(outputStreams[0].format),
- GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
- 0,
- StreamRotation::ROTATION_0};
- ::android::hardware::hidl_vec<Stream> streams = {stream};
- StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(config, [](Status s, HalStreamConfiguration) {
- ASSERT_TRUE((Status::ILLEGAL_ARGUMENT == s) || (Status::INTERNAL_ERROR == s));
- });
- ASSERT_TRUE(ret.isOk());
+ int32_t streamId = 0;
+ Stream stream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(0),
+ static_cast<uint32_t>(0),
+ static_cast<PixelFormat>(outputStreams[0].format),
+ GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
+ 0,
+ StreamRotation::ROTATION_0};
+ ::android::hardware::hidl_vec<Stream> streams = {stream};
+ StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE};
+ if(session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration) {
+ ASSERT_TRUE((Status::ILLEGAL_ARGUMENT == s) ||
+ (Status::INTERNAL_ERROR == s));
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration) {
+ ASSERT_TRUE((Status::ILLEGAL_ARGUMENT == s) ||
+ (Status::INTERNAL_ERROR == s));
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
- stream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(UINT32_MAX),
- static_cast<uint32_t>(UINT32_MAX),
- static_cast<PixelFormat>(outputStreams[0].format),
- GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
- 0,
- StreamRotation::ROTATION_0};
- streams[0] = stream;
- config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(config, [](Status s, HalStreamConfiguration) {
- ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
- });
- ASSERT_TRUE(ret.isOk());
-
- for (auto& it : outputStreams) {
stream = {streamId++,
StreamType::OUTPUT,
- static_cast<uint32_t>(it.width),
- static_cast<uint32_t>(it.height),
- static_cast<PixelFormat>(UINT32_MAX),
+ static_cast<uint32_t>(UINT32_MAX),
+ static_cast<uint32_t>(UINT32_MAX),
+ static_cast<PixelFormat>(outputStreams[0].format),
GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
0,
StreamRotation::ROTATION_0};
streams[0] = stream;
config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(config, [](Status s, HalStreamConfiguration) {
- ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
- });
+ if(session3_3 == nullptr) {
+ ret = session->configureStreams(config, [](Status s,
+ HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config, [](Status s,
+ device::V3_3::HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ }
ASSERT_TRUE(ret.isOk());
- stream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(it.width),
- static_cast<uint32_t>(it.height),
- static_cast<PixelFormat>(it.format),
- GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
- 0,
- static_cast<StreamRotation>(UINT32_MAX)};
- streams[0] = stream;
- config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(config, [](Status s, HalStreamConfiguration) {
- ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
- });
+ for (auto& it : outputStreams) {
+ stream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(it.width),
+ static_cast<uint32_t>(it.height),
+ static_cast<PixelFormat>(UINT32_MAX),
+ GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
+ 0,
+ StreamRotation::ROTATION_0};
+ streams[0] = stream;
+ config = {streams, StreamConfigurationMode::NORMAL_MODE};
+ if(session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+
+ stream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(it.width),
+ static_cast<uint32_t>(it.height),
+ static_cast<PixelFormat>(it.format),
+ GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
+ 0,
+ static_cast<StreamRotation>(UINT32_MAX)};
+ streams[0] = stream;
+ config = {streams, StreamConfigurationMode::NORMAL_MODE};
+ if(session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+ }
+
+ free_camera_metadata(staticMeta);
+ ret = session->close();
ASSERT_TRUE(ret.isOk());
}
-
- free_camera_metadata(staticMeta);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2326,79 +2508,107 @@
std::vector<AvailableZSLInputOutput> inputOutputMap;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- camera_metadata_t* staticMeta;
- Return<void> ret;
- sp<ICameraDeviceSession> session;
- openEmptyDeviceSession(name, mProvider, &session /*out*/, &staticMeta /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ camera_metadata_t* staticMeta;
+ Return<void> ret;
+ sp<ICameraDeviceSession> session;
+ sp<device::V3_3::ICameraDeviceSession> session3_3;
+ openEmptyDeviceSession(name, mProvider,
+ &session /*out*/, &session3_3 /*out*/, &staticMeta /*out*/);
- Status rc = isZSLModeAvailable(staticMeta);
- if (Status::METHOD_NOT_SUPPORTED == rc) {
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
- continue;
- }
- ASSERT_EQ(Status::OK, rc);
+ Status rc = isZSLModeAvailable(staticMeta);
+ if (Status::METHOD_NOT_SUPPORTED == rc) {
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ continue;
+ }
+ ASSERT_EQ(Status::OK, rc);
- inputStreams.clear();
- ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, inputStreams));
- ASSERT_NE(0u, inputStreams.size());
-
- inputOutputMap.clear();
- ASSERT_EQ(Status::OK, getZSLInputOutputMap(staticMeta, inputOutputMap));
- ASSERT_NE(0u, inputOutputMap.size());
-
- int32_t streamId = 0;
- for (auto& inputIter : inputOutputMap) {
- AvailableStream input;
- ASSERT_EQ(Status::OK, findLargestSize(inputStreams, inputIter.inputFormat, input));
+ inputStreams.clear();
+ ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, inputStreams));
ASSERT_NE(0u, inputStreams.size());
- AvailableStream outputThreshold = {INT32_MAX, INT32_MAX, inputIter.outputFormat};
- std::vector<AvailableStream> outputStreams;
- ASSERT_EQ(Status::OK,
- getAvailableOutputStreams(staticMeta, outputStreams, &outputThreshold));
- for (auto& outputIter : outputStreams) {
- Stream zslStream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(input.width),
- static_cast<uint32_t>(input.height),
- static_cast<PixelFormat>(input.format),
- GRALLOC_USAGE_HW_CAMERA_ZSL,
- 0,
- StreamRotation::ROTATION_0};
- Stream inputStream = {streamId++,
- StreamType::INPUT,
- static_cast<uint32_t>(input.width),
- static_cast<uint32_t>(input.height),
- static_cast<PixelFormat>(input.format),
- 0,
- 0,
- StreamRotation::ROTATION_0};
- Stream outputStream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(outputIter.width),
- static_cast<uint32_t>(outputIter.height),
- static_cast<PixelFormat>(outputIter.format),
- GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
- 0,
- StreamRotation::ROTATION_0};
+ inputOutputMap.clear();
+ ASSERT_EQ(Status::OK, getZSLInputOutputMap(staticMeta, inputOutputMap));
+ ASSERT_NE(0u, inputOutputMap.size());
- ::android::hardware::hidl_vec<Stream> streams = {inputStream, zslStream,
- outputStream};
- StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(config,
- [](Status s, HalStreamConfiguration halConfig) {
- ASSERT_EQ(Status::OK, s);
- ASSERT_EQ(3u, halConfig.streams.size());
- });
- ASSERT_TRUE(ret.isOk());
+ int32_t streamId = 0;
+ for (auto& inputIter : inputOutputMap) {
+ AvailableStream input;
+ ASSERT_EQ(Status::OK, findLargestSize(inputStreams, inputIter.inputFormat,
+ input));
+ ASSERT_NE(0u, inputStreams.size());
+
+ AvailableStream outputThreshold = {INT32_MAX, INT32_MAX,
+ inputIter.outputFormat};
+ std::vector<AvailableStream> outputStreams;
+ ASSERT_EQ(Status::OK,
+ getAvailableOutputStreams(staticMeta, outputStreams,
+ &outputThreshold));
+ for (auto& outputIter : outputStreams) {
+ Stream zslStream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(input.width),
+ static_cast<uint32_t>(input.height),
+ static_cast<PixelFormat>(input.format),
+ GRALLOC_USAGE_HW_CAMERA_ZSL,
+ 0,
+ StreamRotation::ROTATION_0};
+ Stream inputStream = {streamId++,
+ StreamType::INPUT,
+ static_cast<uint32_t>(input.width),
+ static_cast<uint32_t>(input.height),
+ static_cast<PixelFormat>(input.format),
+ 0,
+ 0,
+ StreamRotation::ROTATION_0};
+ Stream outputStream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(outputIter.width),
+ static_cast<uint32_t>(outputIter.height),
+ static_cast<PixelFormat>(outputIter.format),
+ GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
+ 0,
+ StreamRotation::ROTATION_0};
+
+ ::android::hardware::hidl_vec<Stream> streams = {inputStream, zslStream,
+ outputStream};
+ StreamConfiguration config = {streams,
+ StreamConfigurationMode::NORMAL_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(3u, halConfig.streams.size());
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(3u, halConfig.streams.size());
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+ }
}
- }
- free_camera_metadata(staticMeta);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ free_camera_metadata(staticMeta);
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2411,58 +2621,86 @@
std::vector<AvailableStream> outputPreviewStreams;
AvailableStream previewThreshold = {kMaxPreviewWidth, kMaxPreviewHeight,
static_cast<int32_t>(PixelFormat::IMPLEMENTATION_DEFINED)};
- AvailableStream blobThreshold = {INT32_MAX, INT32_MAX, static_cast<int32_t>(PixelFormat::BLOB)};
+ AvailableStream blobThreshold = {INT32_MAX, INT32_MAX,
+ static_cast<int32_t>(PixelFormat::BLOB)};
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- camera_metadata_t* staticMeta;
- Return<void> ret;
- sp<ICameraDeviceSession> session;
- openEmptyDeviceSession(name, mProvider, &session /*out*/, &staticMeta /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ camera_metadata_t* staticMeta;
+ Return<void> ret;
+ sp<ICameraDeviceSession> session;
+ sp<device::V3_3::ICameraDeviceSession> session3_3;
+ openEmptyDeviceSession(name, mProvider,
+ &session /*out*/, &session3_3 /*out*/, &staticMeta /*out*/);
- outputBlobStreams.clear();
- ASSERT_EQ(Status::OK,
- getAvailableOutputStreams(staticMeta, outputBlobStreams, &blobThreshold));
- ASSERT_NE(0u, outputBlobStreams.size());
+ outputBlobStreams.clear();
+ ASSERT_EQ(Status::OK,
+ getAvailableOutputStreams(staticMeta, outputBlobStreams,
+ &blobThreshold));
+ ASSERT_NE(0u, outputBlobStreams.size());
- outputPreviewStreams.clear();
- ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, outputPreviewStreams,
- &previewThreshold));
- ASSERT_NE(0u, outputPreviewStreams.size());
+ outputPreviewStreams.clear();
+ ASSERT_EQ(Status::OK, getAvailableOutputStreams(staticMeta, outputPreviewStreams,
+ &previewThreshold));
+ ASSERT_NE(0u, outputPreviewStreams.size());
- int32_t streamId = 0;
- for (auto& blobIter : outputBlobStreams) {
- for (auto& previewIter : outputPreviewStreams) {
- Stream previewStream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(previewIter.width),
- static_cast<uint32_t>(previewIter.height),
- static_cast<PixelFormat>(previewIter.format),
- GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
- 0,
- StreamRotation::ROTATION_0};
- Stream blobStream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(blobIter.width),
- static_cast<uint32_t>(blobIter.height),
- static_cast<PixelFormat>(blobIter.format),
- GRALLOC1_CONSUMER_USAGE_CPU_READ,
- 0,
- StreamRotation::ROTATION_0};
- ::android::hardware::hidl_vec<Stream> streams = {previewStream, blobStream};
- StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(config,
- [](Status s, HalStreamConfiguration halConfig) {
- ASSERT_EQ(Status::OK, s);
- ASSERT_EQ(2u, halConfig.streams.size());
- });
- ASSERT_TRUE(ret.isOk());
+ int32_t streamId = 0;
+ for (auto& blobIter : outputBlobStreams) {
+ for (auto& previewIter : outputPreviewStreams) {
+ Stream previewStream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(previewIter.width),
+ static_cast<uint32_t>(previewIter.height),
+ static_cast<PixelFormat>(previewIter.format),
+ GRALLOC1_CONSUMER_USAGE_HWCOMPOSER,
+ 0,
+ StreamRotation::ROTATION_0};
+ Stream blobStream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(blobIter.width),
+ static_cast<uint32_t>(blobIter.height),
+ static_cast<PixelFormat>(blobIter.format),
+ GRALLOC1_CONSUMER_USAGE_CPU_READ,
+ 0,
+ StreamRotation::ROTATION_0};
+ ::android::hardware::hidl_vec<Stream> streams = {previewStream,
+ blobStream};
+ StreamConfiguration config = {streams,
+ StreamConfigurationMode::NORMAL_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(2u, halConfig.streams.size());
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(2u, halConfig.streams.size());
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+ }
}
- }
- free_camera_metadata(staticMeta);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ free_camera_metadata(staticMeta);
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2474,92 +2712,143 @@
hidl_vec<hidl_string> cameraDeviceNames = getCameraDeviceNames(mProvider);
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- camera_metadata_t* staticMeta;
- Return<void> ret;
- sp<ICameraDeviceSession> session;
- openEmptyDeviceSession(name, mProvider, &session /*out*/, &staticMeta /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ camera_metadata_t* staticMeta;
+ Return<void> ret;
+ sp<ICameraDeviceSession> session;
+ sp<device::V3_3::ICameraDeviceSession> session3_3;
+ openEmptyDeviceSession(name, mProvider,
+ &session /*out*/, &session3_3 /*out*/, &staticMeta /*out*/);
- Status rc = isConstrainedModeAvailable(staticMeta);
- if (Status::METHOD_NOT_SUPPORTED == rc) {
+ Status rc = isConstrainedModeAvailable(staticMeta);
+ if (Status::METHOD_NOT_SUPPORTED == rc) {
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ continue;
+ }
+ ASSERT_EQ(Status::OK, rc);
+
+ AvailableStream hfrStream;
+ rc = pickConstrainedModeSize(staticMeta, hfrStream);
+ ASSERT_EQ(Status::OK, rc);
+
+ int32_t streamId = 0;
+ Stream stream = {streamId,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(hfrStream.width),
+ static_cast<uint32_t>(hfrStream.height),
+ static_cast<PixelFormat>(hfrStream.format),
+ GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
+ 0,
+ StreamRotation::ROTATION_0};
+ ::android::hardware::hidl_vec<Stream> streams = {stream};
+ StreamConfiguration config = {streams,
+ StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [streamId](Status s, HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(1u, halConfig.streams.size());
+ ASSERT_EQ(halConfig.streams[0].id, streamId);
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [streamId](Status s, device::V3_3::HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(1u, halConfig.streams.size());
+ ASSERT_EQ(halConfig.streams[0].v3_2.id, streamId);
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+
+ stream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(0),
+ static_cast<uint32_t>(0),
+ static_cast<PixelFormat>(hfrStream.format),
+ GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
+ 0,
+ StreamRotation::ROTATION_0};
+ streams[0] = stream;
+ config = {streams, StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration) {
+ ASSERT_TRUE((Status::ILLEGAL_ARGUMENT == s) ||
+ (Status::INTERNAL_ERROR == s));
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration) {
+ ASSERT_TRUE((Status::ILLEGAL_ARGUMENT == s) ||
+ (Status::INTERNAL_ERROR == s));
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+
+ stream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(UINT32_MAX),
+ static_cast<uint32_t>(UINT32_MAX),
+ static_cast<PixelFormat>(hfrStream.format),
+ GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
+ 0,
+ StreamRotation::ROTATION_0};
+ streams[0] = stream;
+ config = {streams, StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+
+ stream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(hfrStream.width),
+ static_cast<uint32_t>(hfrStream.height),
+ static_cast<PixelFormat>(UINT32_MAX),
+ GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
+ 0,
+ StreamRotation::ROTATION_0};
+ streams[0] = stream;
+ config = {streams, StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration) {
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+
+ free_camera_metadata(staticMeta);
ret = session->close();
ASSERT_TRUE(ret.isOk());
- continue;
}
- ASSERT_EQ(Status::OK, rc);
-
- AvailableStream hfrStream;
- rc = pickConstrainedModeSize(staticMeta, hfrStream);
- ASSERT_EQ(Status::OK, rc);
-
- int32_t streamId = 0;
- Stream stream = {streamId,
- StreamType::OUTPUT,
- static_cast<uint32_t>(hfrStream.width),
- static_cast<uint32_t>(hfrStream.height),
- static_cast<PixelFormat>(hfrStream.format),
- GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
- 0,
- StreamRotation::ROTATION_0};
- ::android::hardware::hidl_vec<Stream> streams = {stream};
- StreamConfiguration config = {streams,
- StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
- ret = session->configureStreams(config,
- [streamId](Status s, HalStreamConfiguration halConfig) {
- ASSERT_EQ(Status::OK, s);
- ASSERT_EQ(1u, halConfig.streams.size());
- ASSERT_EQ(halConfig.streams[0].id, streamId);
- });
- ASSERT_TRUE(ret.isOk());
-
- stream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(0),
- static_cast<uint32_t>(0),
- static_cast<PixelFormat>(hfrStream.format),
- GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
- 0,
- StreamRotation::ROTATION_0};
- streams[0] = stream;
- config = {streams, StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
- ret = session->configureStreams(config, [](Status s, HalStreamConfiguration) {
- ASSERT_TRUE((Status::ILLEGAL_ARGUMENT == s) || (Status::INTERNAL_ERROR == s));
- });
- ASSERT_TRUE(ret.isOk());
-
- stream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(UINT32_MAX),
- static_cast<uint32_t>(UINT32_MAX),
- static_cast<PixelFormat>(hfrStream.format),
- GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
- 0,
- StreamRotation::ROTATION_0};
- streams[0] = stream;
- config = {streams, StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
- ret = session->configureStreams(config, [](Status s, HalStreamConfiguration) {
- ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
- });
- ASSERT_TRUE(ret.isOk());
-
- stream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(hfrStream.width),
- static_cast<uint32_t>(hfrStream.height),
- static_cast<PixelFormat>(UINT32_MAX),
- GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
- 0,
- StreamRotation::ROTATION_0};
- streams[0] = stream;
- config = {streams, StreamConfigurationMode::CONSTRAINED_HIGH_SPEED_MODE};
- ret = session->configureStreams(config, [](Status s, HalStreamConfiguration) {
- ASSERT_EQ(Status::ILLEGAL_ARGUMENT, s);
- });
- ASSERT_TRUE(ret.isOk());
-
- free_camera_metadata(staticMeta);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2576,55 +2865,82 @@
static_cast<int32_t>(PixelFormat::BLOB)};
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- camera_metadata_t* staticMeta;
- Return<void> ret;
- sp<ICameraDeviceSession> session;
- openEmptyDeviceSession(name, mProvider, &session /*out*/, &staticMeta /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ camera_metadata_t* staticMeta;
+ Return<void> ret;
+ sp<ICameraDeviceSession> session;
+ sp<device::V3_3::ICameraDeviceSession> session3_3;
+ openEmptyDeviceSession(name, mProvider,
+ &session /*out*/, &session3_3 /*out*/, &staticMeta /*out*/);
- outputBlobStreams.clear();
- ASSERT_EQ(Status::OK,
- getAvailableOutputStreams(staticMeta, outputBlobStreams, &blobThreshold));
- ASSERT_NE(0u, outputBlobStreams.size());
+ outputBlobStreams.clear();
+ ASSERT_EQ(Status::OK,
+ getAvailableOutputStreams(staticMeta, outputBlobStreams,
+ &blobThreshold));
+ ASSERT_NE(0u, outputBlobStreams.size());
- outputVideoStreams.clear();
- ASSERT_EQ(Status::OK,
- getAvailableOutputStreams(staticMeta, outputVideoStreams, &videoThreshold));
- ASSERT_NE(0u, outputVideoStreams.size());
+ outputVideoStreams.clear();
+ ASSERT_EQ(Status::OK,
+ getAvailableOutputStreams(staticMeta, outputVideoStreams,
+ &videoThreshold));
+ ASSERT_NE(0u, outputVideoStreams.size());
- int32_t streamId = 0;
- for (auto& blobIter : outputBlobStreams) {
- for (auto& videoIter : outputVideoStreams) {
- Stream videoStream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(videoIter.width),
- static_cast<uint32_t>(videoIter.height),
- static_cast<PixelFormat>(videoIter.format),
- GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
- 0,
- StreamRotation::ROTATION_0};
- Stream blobStream = {streamId++,
- StreamType::OUTPUT,
- static_cast<uint32_t>(blobIter.width),
- static_cast<uint32_t>(blobIter.height),
- static_cast<PixelFormat>(blobIter.format),
- GRALLOC1_CONSUMER_USAGE_CPU_READ,
- 0,
- StreamRotation::ROTATION_0};
- ::android::hardware::hidl_vec<Stream> streams = {videoStream, blobStream};
- StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE};
- ret = session->configureStreams(config,
- [](Status s, HalStreamConfiguration halConfig) {
- ASSERT_EQ(Status::OK, s);
- ASSERT_EQ(2u, halConfig.streams.size());
- });
- ASSERT_TRUE(ret.isOk());
+ int32_t streamId = 0;
+ for (auto& blobIter : outputBlobStreams) {
+ for (auto& videoIter : outputVideoStreams) {
+ Stream videoStream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(videoIter.width),
+ static_cast<uint32_t>(videoIter.height),
+ static_cast<PixelFormat>(videoIter.format),
+ GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER,
+ 0,
+ StreamRotation::ROTATION_0};
+ Stream blobStream = {streamId++,
+ StreamType::OUTPUT,
+ static_cast<uint32_t>(blobIter.width),
+ static_cast<uint32_t>(blobIter.height),
+ static_cast<PixelFormat>(blobIter.format),
+ GRALLOC1_CONSUMER_USAGE_CPU_READ,
+ 0,
+ StreamRotation::ROTATION_0};
+ ::android::hardware::hidl_vec<Stream> streams = {videoStream, blobStream};
+ StreamConfiguration config = {streams,
+ StreamConfigurationMode::NORMAL_MODE};
+ if (session3_3 == nullptr) {
+ ret = session->configureStreams(config,
+ [](Status s, HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(2u, halConfig.streams.size());
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [](Status s, device::V3_3::HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(2u, halConfig.streams.size());
+ });
+ }
+ ASSERT_TRUE(ret.isOk());
+ }
}
- }
- free_camera_metadata(staticMeta);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ free_camera_metadata(staticMeta);
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2639,129 +2955,152 @@
::android::hardware::hidl_vec<uint8_t> settings;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- Stream previewStream;
- HalStreamConfiguration halStreamConfig;
- sp<ICameraDeviceSession> session;
- bool supportsPartialResults = false;
- uint32_t partialResultCount = 0;
- configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
- &previewStream /*out*/, &halStreamConfig /*out*/,
- &supportsPartialResults /*out*/, &partialResultCount /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ Stream previewStream;
+ HalStreamConfiguration halStreamConfig;
+ sp<ICameraDeviceSession> session;
+ bool supportsPartialResults = false;
+ uint32_t partialResultCount = 0;
+ configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
+ &previewStream /*out*/, &halStreamConfig /*out*/,
+ &supportsPartialResults /*out*/,
+ &partialResultCount /*out*/);
- std::shared_ptr<ResultMetadataQueue> resultQueue;
- auto resultQueueRet =
- session->getCaptureResultMetadataQueue(
- [&resultQueue](const auto& descriptor) {
- resultQueue = std::make_shared<ResultMetadataQueue>(
- descriptor);
- if (!resultQueue->isValid() ||
- resultQueue->availableToWrite() <= 0) {
- ALOGE("%s: HAL returns empty result metadata fmq,"
- " not use it", __func__);
- resultQueue = nullptr;
- // Don't use the queue onwards.
- }
+ std::shared_ptr<ResultMetadataQueue> resultQueue;
+ auto resultQueueRet =
+ session->getCaptureResultMetadataQueue(
+ [&resultQueue](const auto& descriptor) {
+ resultQueue = std::make_shared<ResultMetadataQueue>(
+ descriptor);
+ if (!resultQueue->isValid() ||
+ resultQueue->availableToWrite() <= 0) {
+ ALOGE("%s: HAL returns empty result metadata fmq,"
+ " not use it", __func__);
+ resultQueue = nullptr;
+ // Don't use the queue onwards.
+ }
+ });
+ ASSERT_TRUE(resultQueueRet.isOk());
+
+ InFlightRequest inflightReq = {1, false, supportsPartialResults,
+ partialResultCount, resultQueue};
+
+ RequestTemplate reqTemplate = RequestTemplate::PREVIEW;
+ Return<void> ret;
+ ret = session->constructDefaultRequestSettings(reqTemplate,
+ [&](auto status, const auto& req) {
+ ASSERT_EQ(Status::OK, status);
+ settings = req;
+ });
+ ASSERT_TRUE(ret.isOk());
+
+ sp<GraphicBuffer> gb = new GraphicBuffer(
+ previewStream.width, previewStream.height,
+ static_cast<int32_t>(halStreamConfig.streams[0].overrideFormat), 1,
+ android_convertGralloc1To0Usage(halStreamConfig.streams[0].producerUsage,
+ halStreamConfig.streams[0].consumerUsage));
+ ASSERT_NE(nullptr, gb.get());
+ StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
+ bufferId,
+ hidl_handle(gb->getNativeBuffer()->handle),
+ BufferStatus::OK,
+ nullptr,
+ nullptr};
+ ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {outputBuffer};
+ StreamBuffer emptyInputBuffer = {-1, 0, nullptr, BufferStatus::ERROR, nullptr,
+ nullptr};
+ CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
+ emptyInputBuffer, outputBuffers};
+
+ {
+ std::unique_lock<std::mutex> l(mLock);
+ mInflightMap.clear();
+ mInflightMap.add(frameNumber, &inflightReq);
+ }
+
+ Status status = Status::INTERNAL_ERROR;
+ uint32_t numRequestProcessed = 0;
+ hidl_vec<BufferCache> cachesToRemove;
+ Return<void> returnStatus = session->processCaptureRequest(
+ {request}, cachesToRemove, [&status, &numRequestProcessed](auto s,
+ uint32_t n) {
+ status = s;
+ numRequestProcessed = n;
});
- ASSERT_TRUE(resultQueueRet.isOk());
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_EQ(numRequestProcessed, 1u);
- InFlightRequest inflightReq = {1, false, supportsPartialResults, partialResultCount,
- resultQueue};
+ {
+ std::unique_lock<std::mutex> l(mLock);
+ while (!inflightReq.errorCodeValid &&
+ ((0 < inflightReq.numBuffersLeft) ||
+ (!inflightReq.haveResultMetadata))) {
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::seconds(kStreamBufferTimeoutSec);
+ ASSERT_NE(std::cv_status::timeout,
+ mResultCondition.wait_until(l, timeout));
+ }
- RequestTemplate reqTemplate = RequestTemplate::PREVIEW;
- Return<void> ret;
- ret = session->constructDefaultRequestSettings(reqTemplate,
- [&](auto status, const auto& req) {
- ASSERT_EQ(Status::OK, status);
- settings = req;
- });
- ASSERT_TRUE(ret.isOk());
+ ASSERT_FALSE(inflightReq.errorCodeValid);
+ ASSERT_NE(inflightReq.resultOutputBuffers.size(), 0u);
+ ASSERT_EQ(previewStream.id, inflightReq.resultOutputBuffers[0].streamId);
- sp<GraphicBuffer> gb = new GraphicBuffer(
- previewStream.width, previewStream.height,
- static_cast<int32_t>(halStreamConfig.streams[0].overrideFormat), 1,
- android_convertGralloc1To0Usage(halStreamConfig.streams[0].producerUsage,
- halStreamConfig.streams[0].consumerUsage));
- ASSERT_NE(nullptr, gb.get());
- StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
- bufferId,
- hidl_handle(gb->getNativeBuffer()->handle),
- BufferStatus::OK,
- nullptr,
- nullptr};
- ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {outputBuffer};
- StreamBuffer emptyInputBuffer = {-1, 0, nullptr, BufferStatus::ERROR, nullptr, nullptr};
- CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
- emptyInputBuffer, outputBuffers};
-
- {
- std::unique_lock<std::mutex> l(mLock);
- mInflightMap.clear();
- mInflightMap.add(frameNumber, &inflightReq);
- }
-
- Status status = Status::INTERNAL_ERROR;
- uint32_t numRequestProcessed = 0;
- hidl_vec<BufferCache> cachesToRemove;
- Return<void> returnStatus = session->processCaptureRequest(
- {request}, cachesToRemove, [&status, &numRequestProcessed](auto s, uint32_t n) {
- status = s;
- numRequestProcessed = n;
- });
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, status);
- ASSERT_EQ(numRequestProcessed, 1u);
-
- {
- std::unique_lock<std::mutex> l(mLock);
- while (!inflightReq.errorCodeValid &&
- ((0 < inflightReq.numBuffersLeft) || (!inflightReq.haveResultMetadata))) {
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::seconds(kStreamBufferTimeoutSec);
- ASSERT_NE(std::cv_status::timeout, mResultCondition.wait_until(l, timeout));
+ request.frameNumber++;
+ // Empty settings should be supported after the first call
+ // for repeating requests.
+ request.settings.setToExternal(nullptr, 0, true);
+ // The buffer has been registered to HAL by bufferId, so per
+ // API contract we should send a null handle for this buffer
+ request.outputBuffers[0].buffer = nullptr;
+ mInflightMap.clear();
+ inflightReq = {1, false, supportsPartialResults, partialResultCount,
+ resultQueue};
+ mInflightMap.add(request.frameNumber, &inflightReq);
}
- ASSERT_FALSE(inflightReq.errorCodeValid);
- ASSERT_NE(inflightReq.resultOutputBuffers.size(), 0u);
- ASSERT_EQ(previewStream.id, inflightReq.resultOutputBuffers[0].streamId);
+ returnStatus = session->processCaptureRequest(
+ {request}, cachesToRemove, [&status, &numRequestProcessed](auto s,
+ uint32_t n) {
+ status = s;
+ numRequestProcessed = n;
+ });
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_EQ(numRequestProcessed, 1u);
- request.frameNumber++;
- // Empty settings should be supported after the first call
- // for repeating requests.
- request.settings.setToExternal(nullptr, 0, true);
- // The buffer has been registered to HAL by bufferId, so per
- // API contract we should send a null handle for this buffer
- request.outputBuffers[0].buffer = nullptr;
- mInflightMap.clear();
- inflightReq = {1, false, supportsPartialResults, partialResultCount, resultQueue};
- mInflightMap.add(request.frameNumber, &inflightReq);
- }
+ {
+ std::unique_lock<std::mutex> l(mLock);
+ while (!inflightReq.errorCodeValid &&
+ ((0 < inflightReq.numBuffersLeft) ||
+ (!inflightReq.haveResultMetadata))) {
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::seconds(kStreamBufferTimeoutSec);
+ ASSERT_NE(std::cv_status::timeout,
+ mResultCondition.wait_until(l, timeout));
+ }
- returnStatus = session->processCaptureRequest(
- {request}, cachesToRemove, [&status, &numRequestProcessed](auto s, uint32_t n) {
- status = s;
- numRequestProcessed = n;
- });
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, status);
- ASSERT_EQ(numRequestProcessed, 1u);
-
- {
- std::unique_lock<std::mutex> l(mLock);
- while (!inflightReq.errorCodeValid &&
- ((0 < inflightReq.numBuffersLeft) || (!inflightReq.haveResultMetadata))) {
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::seconds(kStreamBufferTimeoutSec);
- ASSERT_NE(std::cv_status::timeout, mResultCondition.wait_until(l, timeout));
+ ASSERT_FALSE(inflightReq.errorCodeValid);
+ ASSERT_NE(inflightReq.resultOutputBuffers.size(), 0u);
+ ASSERT_EQ(previewStream.id, inflightReq.resultOutputBuffers[0].streamId);
}
- ASSERT_FALSE(inflightReq.errorCodeValid);
- ASSERT_NE(inflightReq.resultOutputBuffers.size(), 0u);
- ASSERT_EQ(previewStream.id, inflightReq.resultOutputBuffers[0].streamId);
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
}
-
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2778,48 +3117,65 @@
::android::hardware::hidl_vec<uint8_t> settings;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- Stream previewStream;
- HalStreamConfiguration halStreamConfig;
- sp<ICameraDeviceSession> session;
- bool supportsPartialResults = false;
- uint32_t partialResultCount = 0;
- configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
- &previewStream /*out*/, &halStreamConfig /*out*/,
- &supportsPartialResults /*out*/, &partialResultCount /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ Stream previewStream;
+ HalStreamConfiguration halStreamConfig;
+ sp<ICameraDeviceSession> session;
+ bool supportsPartialResults = false;
+ uint32_t partialResultCount = 0;
+ configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
+ &previewStream /*out*/, &halStreamConfig /*out*/,
+ &supportsPartialResults /*out*/,
+ &partialResultCount /*out*/);
- sp<GraphicBuffer> gb = new GraphicBuffer(
- previewStream.width, previewStream.height,
- static_cast<int32_t>(halStreamConfig.streams[0].overrideFormat), 1,
- android_convertGralloc1To0Usage(halStreamConfig.streams[0].producerUsage,
- halStreamConfig.streams[0].consumerUsage));
+ sp<GraphicBuffer> gb = new GraphicBuffer(
+ previewStream.width, previewStream.height,
+ static_cast<int32_t>(halStreamConfig.streams[0].overrideFormat), 1,
+ android_convertGralloc1To0Usage(halStreamConfig.streams[0].producerUsage,
+ halStreamConfig.streams[0].consumerUsage));
- StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
- bufferId,
- hidl_handle(gb->getNativeBuffer()->handle),
- BufferStatus::OK,
- nullptr,
- nullptr};
- ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {outputBuffer};
- StreamBuffer emptyInputBuffer = {-1, 0, nullptr, BufferStatus::ERROR, nullptr, nullptr};
- CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
- emptyInputBuffer, outputBuffers};
+ StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
+ bufferId,
+ hidl_handle(gb->getNativeBuffer()->handle),
+ BufferStatus::OK,
+ nullptr,
+ nullptr};
+ ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {outputBuffer};
+ StreamBuffer emptyInputBuffer = {-1, 0, nullptr, BufferStatus::ERROR, nullptr,
+ nullptr};
+ CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
+ emptyInputBuffer, outputBuffers};
- // Settings were not correctly initialized, we should fail here
- Status status = Status::OK;
- uint32_t numRequestProcessed = 0;
- hidl_vec<BufferCache> cachesToRemove;
- Return<void> ret = session->processCaptureRequest(
- {request}, cachesToRemove, [&status, &numRequestProcessed](auto s, uint32_t n) {
- status = s;
- numRequestProcessed = n;
- });
- ASSERT_TRUE(ret.isOk());
- ASSERT_EQ(Status::ILLEGAL_ARGUMENT, status);
- ASSERT_EQ(numRequestProcessed, 0u);
+ // Settings were not correctly initialized, we should fail here
+ Status status = Status::OK;
+ uint32_t numRequestProcessed = 0;
+ hidl_vec<BufferCache> cachesToRemove;
+ Return<void> ret = session->processCaptureRequest(
+ {request}, cachesToRemove, [&status, &numRequestProcessed](auto s,
+ uint32_t n) {
+ status = s;
+ numRequestProcessed = n;
+ });
+ ASSERT_TRUE(ret.isOk());
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, status);
+ ASSERT_EQ(numRequestProcessed, 0u);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2835,45 +3191,62 @@
::android::hardware::hidl_vec<uint8_t> settings;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- Stream previewStream;
- HalStreamConfiguration halStreamConfig;
- sp<ICameraDeviceSession> session;
- bool supportsPartialResults = false;
- uint32_t partialResultCount = 0;
- configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
- &previewStream /*out*/, &halStreamConfig /*out*/,
- &supportsPartialResults /*out*/, &partialResultCount /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ Stream previewStream;
+ HalStreamConfiguration halStreamConfig;
+ sp<ICameraDeviceSession> session;
+ bool supportsPartialResults = false;
+ uint32_t partialResultCount = 0;
+ configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
+ &previewStream /*out*/, &halStreamConfig /*out*/,
+ &supportsPartialResults /*out*/,
+ &partialResultCount /*out*/);
- RequestTemplate reqTemplate = RequestTemplate::PREVIEW;
- Return<void> ret;
- ret = session->constructDefaultRequestSettings(reqTemplate,
- [&](auto status, const auto& req) {
- ASSERT_EQ(Status::OK, status);
- settings = req;
- });
- ASSERT_TRUE(ret.isOk());
+ RequestTemplate reqTemplate = RequestTemplate::PREVIEW;
+ Return<void> ret;
+ ret = session->constructDefaultRequestSettings(reqTemplate,
+ [&](auto status, const auto& req) {
+ ASSERT_EQ(Status::OK, status);
+ settings = req;
+ });
+ ASSERT_TRUE(ret.isOk());
- ::android::hardware::hidl_vec<StreamBuffer> emptyOutputBuffers;
- StreamBuffer emptyInputBuffer = {-1, 0, nullptr, BufferStatus::ERROR, nullptr, nullptr};
- CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
- emptyInputBuffer, emptyOutputBuffers};
+ ::android::hardware::hidl_vec<StreamBuffer> emptyOutputBuffers;
+ StreamBuffer emptyInputBuffer = {-1, 0, nullptr, BufferStatus::ERROR, nullptr,
+ nullptr};
+ CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
+ emptyInputBuffer, emptyOutputBuffers};
- // Output buffers are missing, we should fail here
- Status status = Status::OK;
- uint32_t numRequestProcessed = 0;
- hidl_vec<BufferCache> cachesToRemove;
- ret = session->processCaptureRequest(
- {request}, cachesToRemove, [&status, &numRequestProcessed](auto s, uint32_t n) {
- status = s;
- numRequestProcessed = n;
- });
- ASSERT_TRUE(ret.isOk());
- ASSERT_EQ(Status::ILLEGAL_ARGUMENT, status);
- ASSERT_EQ(numRequestProcessed, 0u);
+ // Output buffers are missing, we should fail here
+ Status status = Status::OK;
+ uint32_t numRequestProcessed = 0;
+ hidl_vec<BufferCache> cachesToRemove;
+ ret = session->processCaptureRequest(
+ {request}, cachesToRemove, [&status, &numRequestProcessed](auto s,
+ uint32_t n) {
+ status = s;
+ numRequestProcessed = n;
+ });
+ ASSERT_TRUE(ret.isOk());
+ ASSERT_EQ(Status::ILLEGAL_ARGUMENT, status);
+ ASSERT_EQ(numRequestProcessed, 0u);
- ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ }
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -2889,113 +3262,131 @@
::android::hardware::hidl_vec<uint8_t> settings;
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- Stream previewStream;
- HalStreamConfiguration halStreamConfig;
- sp<ICameraDeviceSession> session;
- bool supportsPartialResults = false;
- uint32_t partialResultCount = 0;
- configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
- &previewStream /*out*/, &halStreamConfig /*out*/,
- &supportsPartialResults /*out*/, &partialResultCount /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ Stream previewStream;
+ HalStreamConfiguration halStreamConfig;
+ sp<ICameraDeviceSession> session;
+ bool supportsPartialResults = false;
+ uint32_t partialResultCount = 0;
+ configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
+ &previewStream /*out*/, &halStreamConfig /*out*/,
+ &supportsPartialResults /*out*/,
+ &partialResultCount /*out*/);
- std::shared_ptr<ResultMetadataQueue> resultQueue;
- auto resultQueueRet =
- session->getCaptureResultMetadataQueue(
- [&resultQueue](const auto& descriptor) {
- resultQueue = std::make_shared<ResultMetadataQueue>(
- descriptor);
- if (!resultQueue->isValid() ||
- resultQueue->availableToWrite() <= 0) {
- ALOGE("%s: HAL returns empty result metadata fmq,"
- " not use it", __func__);
- resultQueue = nullptr;
- // Don't use the queue onwards.
- }
- });
- ASSERT_TRUE(resultQueueRet.isOk());
+ std::shared_ptr<ResultMetadataQueue> resultQueue;
+ auto resultQueueRet =
+ session->getCaptureResultMetadataQueue(
+ [&resultQueue](const auto& descriptor) {
+ resultQueue = std::make_shared<ResultMetadataQueue>(
+ descriptor);
+ if (!resultQueue->isValid() ||
+ resultQueue->availableToWrite() <= 0) {
+ ALOGE("%s: HAL returns empty result metadata fmq,"
+ " not use it", __func__);
+ resultQueue = nullptr;
+ // Don't use the queue onwards.
+ }
+ });
+ ASSERT_TRUE(resultQueueRet.isOk());
- InFlightRequest inflightReq = {1, false, supportsPartialResults, partialResultCount,
- resultQueue};
- RequestTemplate reqTemplate = RequestTemplate::PREVIEW;
- Return<void> ret;
- ret = session->constructDefaultRequestSettings(reqTemplate,
- [&](auto status, const auto& req) {
- ASSERT_EQ(Status::OK, status);
- settings = req;
- });
- ASSERT_TRUE(ret.isOk());
-
- sp<GraphicBuffer> gb = new GraphicBuffer(
- previewStream.width, previewStream.height,
- static_cast<int32_t>(halStreamConfig.streams[0].overrideFormat), 1,
- android_convertGralloc1To0Usage(halStreamConfig.streams[0].producerUsage,
- halStreamConfig.streams[0].consumerUsage));
- ASSERT_NE(nullptr, gb.get());
- StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
- bufferId,
- hidl_handle(gb->getNativeBuffer()->handle),
- BufferStatus::OK,
- nullptr,
- nullptr};
- ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {outputBuffer};
- const StreamBuffer emptyInputBuffer = {-1, 0, nullptr, BufferStatus::ERROR,
- nullptr, nullptr};
- CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
- emptyInputBuffer, outputBuffers};
-
- {
- std::unique_lock<std::mutex> l(mLock);
- mInflightMap.clear();
- mInflightMap.add(frameNumber, &inflightReq);
- }
-
- Status status = Status::INTERNAL_ERROR;
- uint32_t numRequestProcessed = 0;
- hidl_vec<BufferCache> cachesToRemove;
- ret = session->processCaptureRequest(
- {request}, cachesToRemove, [&status, &numRequestProcessed](auto s, uint32_t n) {
- status = s;
- numRequestProcessed = n;
- });
-
- ASSERT_TRUE(ret.isOk());
- ASSERT_EQ(Status::OK, status);
- ASSERT_EQ(numRequestProcessed, 1u);
- // Flush before waiting for request to complete.
- Return<Status> returnStatus = session->flush();
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, returnStatus);
-
- {
- std::unique_lock<std::mutex> l(mLock);
- while (!inflightReq.errorCodeValid &&
- ((0 < inflightReq.numBuffersLeft) || (!inflightReq.haveResultMetadata))) {
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::seconds(kStreamBufferTimeoutSec);
- ASSERT_NE(std::cv_status::timeout, mResultCondition.wait_until(l, timeout));
- }
-
- if (!inflightReq.errorCodeValid) {
- ASSERT_NE(inflightReq.resultOutputBuffers.size(), 0u);
- ASSERT_EQ(previewStream.id, inflightReq.resultOutputBuffers[0].streamId);
- } else {
- switch (inflightReq.errorCode) {
- case ErrorCode::ERROR_REQUEST:
- case ErrorCode::ERROR_RESULT:
- case ErrorCode::ERROR_BUFFER:
- // Expected
- break;
- case ErrorCode::ERROR_DEVICE:
- default:
- FAIL() << "Unexpected error:"
- << static_cast<uint32_t>(inflightReq.errorCode);
- }
- }
-
- ret = session->close();
+ InFlightRequest inflightReq = {1, false, supportsPartialResults,
+ partialResultCount, resultQueue};
+ RequestTemplate reqTemplate = RequestTemplate::PREVIEW;
+ Return<void> ret;
+ ret = session->constructDefaultRequestSettings(reqTemplate,
+ [&](auto status, const auto& req) {
+ ASSERT_EQ(Status::OK, status);
+ settings = req;
+ });
ASSERT_TRUE(ret.isOk());
+
+ sp<GraphicBuffer> gb = new GraphicBuffer(
+ previewStream.width, previewStream.height,
+ static_cast<int32_t>(halStreamConfig.streams[0].overrideFormat), 1,
+ android_convertGralloc1To0Usage(halStreamConfig.streams[0].producerUsage,
+ halStreamConfig.streams[0].consumerUsage));
+ ASSERT_NE(nullptr, gb.get());
+ StreamBuffer outputBuffer = {halStreamConfig.streams[0].id,
+ bufferId,
+ hidl_handle(gb->getNativeBuffer()->handle),
+ BufferStatus::OK,
+ nullptr,
+ nullptr};
+ ::android::hardware::hidl_vec<StreamBuffer> outputBuffers = {outputBuffer};
+ const StreamBuffer emptyInputBuffer = {-1, 0, nullptr,
+ BufferStatus::ERROR, nullptr, nullptr};
+ CaptureRequest request = {frameNumber, 0 /* fmqSettingsSize */, settings,
+ emptyInputBuffer, outputBuffers};
+
+ {
+ std::unique_lock<std::mutex> l(mLock);
+ mInflightMap.clear();
+ mInflightMap.add(frameNumber, &inflightReq);
+ }
+
+ Status status = Status::INTERNAL_ERROR;
+ uint32_t numRequestProcessed = 0;
+ hidl_vec<BufferCache> cachesToRemove;
+ ret = session->processCaptureRequest(
+ {request}, cachesToRemove, [&status, &numRequestProcessed](auto s,
+ uint32_t n) {
+ status = s;
+ numRequestProcessed = n;
+ });
+
+ ASSERT_TRUE(ret.isOk());
+ ASSERT_EQ(Status::OK, status);
+ ASSERT_EQ(numRequestProcessed, 1u);
+ // Flush before waiting for request to complete.
+ Return<Status> returnStatus = session->flush();
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, returnStatus);
+
+ {
+ std::unique_lock<std::mutex> l(mLock);
+ while (!inflightReq.errorCodeValid &&
+ ((0 < inflightReq.numBuffersLeft) ||
+ (!inflightReq.haveResultMetadata))) {
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::seconds(kStreamBufferTimeoutSec);
+ ASSERT_NE(std::cv_status::timeout, mResultCondition.wait_until(l,
+ timeout));
+ }
+
+ if (!inflightReq.errorCodeValid) {
+ ASSERT_NE(inflightReq.resultOutputBuffers.size(), 0u);
+ ASSERT_EQ(previewStream.id, inflightReq.resultOutputBuffers[0].streamId);
+ } else {
+ switch (inflightReq.errorCode) {
+ case ErrorCode::ERROR_REQUEST:
+ case ErrorCode::ERROR_RESULT:
+ case ErrorCode::ERROR_BUFFER:
+ // Expected
+ break;
+ case ErrorCode::ERROR_DEVICE:
+ default:
+ FAIL() << "Unexpected error:"
+ << static_cast<uint32_t>(inflightReq.errorCode);
+ }
+ }
+
+ ret = session->close();
+ ASSERT_TRUE(ret.isOk());
+ }
}
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -3008,29 +3399,44 @@
static_cast<int32_t>(PixelFormat::IMPLEMENTATION_DEFINED)};
for (const auto& name : cameraDeviceNames) {
- if (getCameraDeviceVersion(name, mProviderType) == CAMERA_DEVICE_API_VERSION_3_2) {
- Stream previewStream;
- HalStreamConfiguration halStreamConfig;
- sp<ICameraDeviceSession> session;
- bool supportsPartialResults = false;
- uint32_t partialResultCount = 0;
- configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
- &previewStream /*out*/, &halStreamConfig /*out*/,
- &supportsPartialResults /*out*/, &partialResultCount /*out*/);
+ int deviceVersion = getCameraDeviceVersion(name, mProviderType);
+ switch (deviceVersion) {
+ case CAMERA_DEVICE_API_VERSION_3_3:
+ case CAMERA_DEVICE_API_VERSION_3_2: {
+ Stream previewStream;
+ HalStreamConfiguration halStreamConfig;
+ sp<ICameraDeviceSession> session;
+ bool supportsPartialResults = false;
+ uint32_t partialResultCount = 0;
+ configurePreviewStream(name, mProvider, &previewThreshold, &session /*out*/,
+ &previewStream /*out*/, &halStreamConfig /*out*/,
+ &supportsPartialResults /*out*/,
+ &partialResultCount /*out*/);
- Return<Status> returnStatus = session->flush();
- ASSERT_TRUE(returnStatus.isOk());
- ASSERT_EQ(Status::OK, returnStatus);
+ Return<Status> returnStatus = session->flush();
+ ASSERT_TRUE(returnStatus.isOk());
+ ASSERT_EQ(Status::OK, returnStatus);
- {
- std::unique_lock<std::mutex> l(mLock);
- auto timeout = std::chrono::system_clock::now() +
- std::chrono::milliseconds(kEmptyFlushTimeoutMSec);
- ASSERT_EQ(std::cv_status::timeout, mResultCondition.wait_until(l, timeout));
+ {
+ std::unique_lock<std::mutex> l(mLock);
+ auto timeout = std::chrono::system_clock::now() +
+ std::chrono::milliseconds(kEmptyFlushTimeoutMSec);
+ ASSERT_EQ(std::cv_status::timeout, mResultCondition.wait_until(l, timeout));
+ }
+
+ Return<void> ret = session->close();
+ ASSERT_TRUE(ret.isOk());
}
-
- Return<void> ret = session->close();
- ASSERT_TRUE(ret.isOk());
+ break;
+ case CAMERA_DEVICE_API_VERSION_1_0: {
+ //Not applicable
+ }
+ break;
+ default: {
+ ALOGE("%s: Unsupported device version %d", __func__, deviceVersion);
+ ADD_FAILURE();
+ }
+ break;
}
}
}
@@ -3234,7 +3640,7 @@
ASSERT_NE(nullptr, partialResultCount);
std::vector<AvailableStream> outputPreviewStreams;
- ::android::sp<ICameraDevice> device3_2;
+ ::android::sp<ICameraDevice> device3_x;
ALOGI("configureStreams: Testing camera device %s", name.c_str());
Return<void> ret;
ret = provider->getCameraDeviceInterface_V3_x(
@@ -3244,12 +3650,12 @@
(int)status);
ASSERT_EQ(Status::OK, status);
ASSERT_NE(device, nullptr);
- device3_2 = device;
+ device3_x = device;
});
ASSERT_TRUE(ret.isOk());
sp<DeviceCb> cb = new DeviceCb(this);
- ret = device3_2->open(
+ ret = device3_x->open(
cb,
[&](auto status, const auto& newSession) {
ALOGI("device::open returns status:%d", (int)status);
@@ -3259,8 +3665,12 @@
});
ASSERT_TRUE(ret.isOk());
+ auto castResult = device::V3_3::ICameraDeviceSession::castFrom(*session);
+ ASSERT_TRUE(castResult.isOk());
+ sp<device::V3_3::ICameraDeviceSession> session3_3 = castResult;
+
camera_metadata_t *staticMeta;
- ret = device3_2->getCameraCharacteristics([&] (Status s,
+ ret = device3_x->getCameraCharacteristics([&] (Status s,
CameraMetadata metadata) {
ASSERT_EQ(Status::OK, s);
staticMeta = clone_camera_metadata(
@@ -3292,12 +3702,24 @@
::android::hardware::hidl_vec<Stream> streams = {*previewStream};
StreamConfiguration config = {streams,
StreamConfigurationMode::NORMAL_MODE};
- ret = (*session)->configureStreams(config, [&] (Status s,
- HalStreamConfiguration halConfig) {
- ASSERT_EQ(Status::OK, s);
- ASSERT_EQ(1u, halConfig.streams.size());
- *halStreamConfig = halConfig;
- });
+ if (session3_3 == nullptr) {
+ ret = (*session)->configureStreams(config,
+ [&] (Status s, HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(1u, halConfig.streams.size());
+ *halStreamConfig = halConfig;
+ });
+ } else {
+ ret = session3_3->configureStreams_3_3(config,
+ [&] (Status s, device::V3_3::HalStreamConfiguration halConfig) {
+ ASSERT_EQ(Status::OK, s);
+ ASSERT_EQ(1u, halConfig.streams.size());
+ halStreamConfig->streams.resize(halConfig.streams.size());
+ for (size_t i = 0; i < halConfig.streams.size(); i++) {
+ halStreamConfig->streams[i] = halConfig.streams[i].v3_2;
+ }
+ });
+ }
ASSERT_TRUE(ret.isOk());
}
@@ -3305,11 +3727,12 @@
void CameraHidlTest::openEmptyDeviceSession(const std::string &name,
sp<ICameraProvider> provider,
sp<ICameraDeviceSession> *session /*out*/,
+ sp<device::V3_3::ICameraDeviceSession> *session3_3 /*out*/,
camera_metadata_t **staticMeta /*out*/) {
ASSERT_NE(nullptr, session);
ASSERT_NE(nullptr, staticMeta);
- ::android::sp<ICameraDevice> device3_2;
+ ::android::sp<ICameraDevice> device3_x;
ALOGI("configureStreams: Testing camera device %s", name.c_str());
Return<void> ret;
ret = provider->getCameraDeviceInterface_V3_x(
@@ -3319,12 +3742,12 @@
(int)status);
ASSERT_EQ(Status::OK, status);
ASSERT_NE(device, nullptr);
- device3_2 = device;
+ device3_x = device;
});
ASSERT_TRUE(ret.isOk());
sp<EmptyDeviceCb> cb = new EmptyDeviceCb();
- ret = device3_2->open(cb, [&](auto status, const auto& newSession) {
+ ret = device3_x->open(cb, [&](auto status, const auto& newSession) {
ALOGI("device::open returns status:%d", (int)status);
ASSERT_EQ(Status::OK, status);
ASSERT_NE(newSession, nullptr);
@@ -3332,7 +3755,7 @@
});
ASSERT_TRUE(ret.isOk());
- ret = device3_2->getCameraCharacteristics([&] (Status s,
+ ret = device3_x->getCameraCharacteristics([&] (Status s,
CameraMetadata metadata) {
ASSERT_EQ(Status::OK, s);
*staticMeta = clone_camera_metadata(
@@ -3340,6 +3763,12 @@
ASSERT_NE(nullptr, *staticMeta);
});
ASSERT_TRUE(ret.isOk());
+
+ if(session3_3 != nullptr) {
+ auto castResult = device::V3_3::ICameraDeviceSession::castFrom(*session);
+ ASSERT_TRUE(castResult.isOk());
+ *session3_3 = castResult;
+ }
}
// Open a particular camera device.
diff --git a/cas/1.0/Android.bp b/cas/1.0/Android.bp
index 6d94793..ea8c10e 100644
--- a/cas/1.0/Android.bp
+++ b/cas/1.0/Android.bp
@@ -85,3 +85,83 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.cas@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.cas@1.0",
+ srcs: [
+ ":android.hardware.cas@1.0_hal",
+ ],
+ out: [
+ "android/hardware/cas/1.0/ACas.cpp",
+ "android/hardware/cas/1.0/ACasListener.cpp",
+ "android/hardware/cas/1.0/ADescramblerBase.cpp",
+ "android/hardware/cas/1.0/AMediaCasService.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.cas@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.cas@1.0",
+ srcs: [
+ ":android.hardware.cas@1.0_hal",
+ ],
+ out: [
+ "android/hardware/cas/1.0/ACas.h",
+ "android/hardware/cas/1.0/ACasListener.h",
+ "android/hardware/cas/1.0/ADescramblerBase.h",
+ "android/hardware/cas/1.0/AMediaCasService.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.cas@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.cas@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.cas@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.cas@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.cas@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.cas@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.cas@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.cas@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.cas@1.0-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.cas@1.0",
+ "android.hardware.cas@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.cas@1.0-adapter_genc++"],
+}
diff --git a/cas/1.0/vts/functional/Android.bp b/cas/1.0/vts/functional/Android.bp
new file mode 100644
index 0000000..d601235
--- /dev/null
+++ b/cas/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: "VtsHalCasV1_0TargetTest",
+ defaults: ["VtsHalTargetTestDefaults"],
+ srcs: ["VtsHalCasV1_0TargetTest.cpp"],
+ static_libs: ["android.hardware.cas@1.0"],
+}
+
diff --git a/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp b/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp
new file mode 100644
index 0000000..f346bae
--- /dev/null
+++ b/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp
@@ -0,0 +1,147 @@
+/*
+ * 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 "mediacas_hidl_hal_test"
+
+#include <VtsHalHidlTargetTestBase.h>
+#include <android-base/logging.h>
+#include <android/hardware/cas/1.0/ICas.h>
+#include <android/hardware/cas/1.0/ICasListener.h>
+#include <android/hardware/cas/1.0/IDescramblerBase.h>
+#include <android/hardware/cas/1.0/IMediaCasService.h>
+#include <hidl/HidlSupport.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include <cinttypes>
+#include <utility>
+
+// CA System Ids used for testing
+#define CLEAR_KEY_SYSTEM_ID 0xF6D8
+#define INVALID_SYSTEM_ID 0
+
+using android::Condition;
+using android::hardware::cas::V1_0::ICas;
+using android::hardware::cas::V1_0::ICasListener;
+using android::hardware::cas::V1_0::IDescramblerBase;
+using android::hardware::cas::V1_0::IMediaCasService;
+using android::hardware::cas::V1_0::HidlCasPluginDescriptor;
+using android::hardware::Void;
+using android::hardware::hidl_vec;
+using android::hardware::Return;
+using android::Mutex;
+using android::sp;
+
+namespace {
+
+class MediaCasHidlTest : public ::testing::VtsHalHidlTargetTestBase {
+ public:
+ virtual void SetUp() override {
+ mService = ::testing::VtsHalHidlTargetTestBase::getService<IMediaCasService>();
+ ASSERT_NE(mService, nullptr);
+ }
+
+ sp<IMediaCasService> mService;
+
+ protected:
+ static void description(const std::string& description) {
+ RecordProperty("description", description);
+ }
+};
+
+class MediaCasListener : public ICasListener {
+ public:
+ virtual ::android::hardware::Return<void> onEvent(
+ int32_t event, int32_t arg, const ::android::hardware::hidl_vec<uint8_t>& data) override {
+ ALOGI("Info: received event: %d, arg: %d, size: %zu", event, arg, data.size());
+
+ return Void();
+ }
+};
+
+TEST_F(MediaCasHidlTest, EnumeratePlugins) {
+ description("Test enumerate plugins");
+ hidl_vec<HidlCasPluginDescriptor> descriptors;
+ EXPECT_TRUE(mService
+ ->enumeratePlugins([&descriptors](
+ hidl_vec<HidlCasPluginDescriptor> const& desc) { descriptors = desc; })
+ .isOk());
+
+ if (descriptors.size() == 0) {
+ ALOGW("[ WARN ] enumeratePlugins list empty");
+ return;
+ }
+
+ sp<MediaCasListener> casListener = new MediaCasListener();
+ for (size_t i = 0; i < descriptors.size(); i++) {
+ int32_t caSystemId = descriptors[i].caSystemId;
+ bool status = mService->isSystemIdSupported(caSystemId);
+ ASSERT_EQ(status, true);
+
+ status = mService->isDescramblerSupported(caSystemId);
+ ASSERT_EQ(status, true);
+
+ sp<ICas> mediaCas = mService->createPlugin(caSystemId, casListener);
+ ASSERT_NE(mediaCas, nullptr);
+
+ sp<IDescramblerBase> descramblerBase = mService->createDescrambler(caSystemId);
+ ASSERT_NE(descramblerBase, nullptr);
+ }
+}
+
+TEST_F(MediaCasHidlTest, TestInvalidSystemIdFails) {
+ description("Test failure for invalid system ID");
+ sp<MediaCasListener> casListener = new MediaCasListener();
+
+ ASSERT_FALSE(mService->isSystemIdSupported(INVALID_SYSTEM_ID));
+ ASSERT_FALSE(mService->isDescramblerSupported(INVALID_SYSTEM_ID));
+
+ sp<ICas> mediaCas = mService->createPlugin(INVALID_SYSTEM_ID, casListener);
+ EXPECT_EQ(mediaCas, nullptr);
+
+ sp<IDescramblerBase> descramblerBase = mService->createDescrambler(INVALID_SYSTEM_ID);
+ EXPECT_EQ(descramblerBase, nullptr);
+}
+
+TEST_F(MediaCasHidlTest, TestClearKeyPluginInstalled) {
+ description("Test if ClearKey plugin is installed");
+ hidl_vec<HidlCasPluginDescriptor> descriptors;
+ EXPECT_TRUE(mService
+ ->enumeratePlugins([&descriptors](
+ hidl_vec<HidlCasPluginDescriptor> const& _desc) { descriptors = _desc; })
+ .isOk());
+
+ if (descriptors.size() == 0) {
+ ALOGW("[ WARN ] enumeratePlugins list empty");
+ }
+
+ for (size_t i = 0; i < descriptors.size(); i++) {
+ int32_t caSystemId = descriptors[i].caSystemId;
+ if (CLEAR_KEY_SYSTEM_ID == caSystemId) {
+ return;
+ }
+ }
+
+ ASSERT_TRUE(false) << "ClearKey plugin not installed";
+}
+
+} // anonymous namespace
+
+int main(int argc, char** argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ int status = RUN_ALL_TESTS();
+ LOG(INFO) << "Test result = " << status;
+ return status;
+}
diff --git a/cas/Android.bp b/cas/Android.bp
index 57532a0..36bd607 100644
--- a/cas/Android.bp
+++ b/cas/Android.bp
@@ -2,5 +2,6 @@
subdirs = [
"1.0",
"1.0/default",
+ "1.0/vts/functional",
"native/1.0",
]
diff --git a/cas/native/1.0/Android.bp b/cas/native/1.0/Android.bp
index e39cab1..4b5472a 100644
--- a/cas/native/1.0/Android.bp
+++ b/cas/native/1.0/Android.bp
@@ -66,3 +66,82 @@
"android.hardware.cas@1.0",
],
}
+
+genrule {
+ name: "android.hardware.cas.native@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.cas.native@1.0",
+ srcs: [
+ ":android.hardware.cas.native@1.0_hal",
+ ],
+ out: [
+ "android/hardware/cas/native/1.0/ADescrambler.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.cas.native@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.cas.native@1.0",
+ srcs: [
+ ":android.hardware.cas.native@1.0_hal",
+ ],
+ out: [
+ "android/hardware/cas/native/1.0/ADescrambler.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.cas.native@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.cas.native@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.cas.native@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.cas.native@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.cas.native@1.0",
+ "android.hardware.cas@1.0",
+ "android.hardware.cas@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.cas.native@1.0",
+ "android.hardware.cas@1.0",
+ "android.hardware.cas@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.cas.native@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.cas.native@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.cas.native@1.0-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.cas.native@1.0",
+ "android.hardware.cas@1.0",
+ "android.hardware.cas.native@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.cas.native@1.0-adapter_genc++"],
+}
diff --git a/configstore/1.0/Android.bp b/configstore/1.0/Android.bp
index 96ef00a..3e9c200 100644
--- a/configstore/1.0/Android.bp
+++ b/configstore/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.configstore@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
+ srcs: [
+ ":android.hardware.configstore@1.0_hal",
+ ],
+ out: [
+ "android/hardware/configstore/1.0/ASurfaceFlingerConfigs.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.configstore@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
+ srcs: [
+ ":android.hardware.configstore@1.0_hal",
+ ],
+ out: [
+ "android/hardware/configstore/1.0/ASurfaceFlingerConfigs.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.configstore@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.configstore@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.configstore@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.configstore@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.configstore@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.configstore@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.configstore@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.configstore@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.configstore@1.0",
+ "android.hardware.configstore@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.configstore@1.0-adapter_genc++"],
+}
diff --git a/configstore/1.1/Android.bp b/configstore/1.1/Android.bp
index 92fb7c1..1bddc6c 100644
--- a/configstore/1.1/Android.bp
+++ b/configstore/1.1/Android.bp
@@ -62,3 +62,82 @@
"android.hardware.configstore@1.0",
],
}
+
+genrule {
+ name: "android.hardware.configstore@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.1",
+ srcs: [
+ ":android.hardware.configstore@1.1_hal",
+ ],
+ out: [
+ "android/hardware/configstore/1.1/ASurfaceFlingerConfigs.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.configstore@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.1",
+ srcs: [
+ ":android.hardware.configstore@1.1_hal",
+ ],
+ out: [
+ "android/hardware/configstore/1.1/ASurfaceFlingerConfigs.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.configstore@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.configstore@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.configstore@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.configstore@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.configstore@1.0",
+ "android.hardware.configstore@1.1",
+ "android.hardware.configstore@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.configstore@1.0",
+ "android.hardware.configstore@1.1",
+ "android.hardware.configstore@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.configstore@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.configstore@1.1-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.configstore@1.0",
+ "android.hardware.configstore@1.1",
+ "android.hardware.configstore@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.configstore@1.1-adapter_genc++"],
+}
diff --git a/contexthub/1.0/Android.bp b/contexthub/1.0/Android.bp
index ae1bd08..e8f7103 100644
--- a/contexthub/1.0/Android.bp
+++ b/contexthub/1.0/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.contexthub@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.contexthub@1.0",
+ srcs: [
+ ":android.hardware.contexthub@1.0_hal",
+ ],
+ out: [
+ "android/hardware/contexthub/1.0/AContexthub.cpp",
+ "android/hardware/contexthub/1.0/AContexthubCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.contexthub@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.contexthub@1.0",
+ srcs: [
+ ":android.hardware.contexthub@1.0_hal",
+ ],
+ out: [
+ "android/hardware/contexthub/1.0/AContexthub.h",
+ "android/hardware/contexthub/1.0/AContexthubCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.contexthub@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.contexthub@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.contexthub@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.contexthub@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.contexthub@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.contexthub@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.contexthub@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.contexthub@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.contexthub@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.contexthub@1.0",
+ "android.hardware.contexthub@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.contexthub@1.0-adapter_genc++"],
+}
diff --git a/current.txt b/current.txt
index a062ec7..6958edb 100644
--- a/current.txt
+++ b/current.txt
@@ -246,5 +246,6 @@
503da837d1a67cbdb7c08a033e927e5430ae1b159d98bf72c6336b4dcc5e76f5 android.hardware.cas.native@1.0::types
619600109232ed64b827c8a11beed8070b1827ae464547d7aa146cf0473b4bca android.hardware.cas.native@1.0::IDescrambler
0a159f81359cd4f71bbe00972ee8403ea79351fb7c0cd48be72ebb3e424dbaef android.hardware.radio@1.0::types
+09342041e17c429fce0034b9096d17849122111436a5f0053e7e59500e1cb89c android.hardware.media.omx@1.0::IOmxStore
f4945e397b5dea41bb64518dfde59be71245d8a125fd1e0acffeb57ac7b08fed android.hardware.thermal@1.1::IThermal
c8bc853546dd55584611def2a9fa1d99f657e3366c976d2f60fe6b8aa6d2cb87 android.hardware.thermal@1.1::IThermalCallback
diff --git a/drm/1.0/Android.bp b/drm/1.0/Android.bp
index 096aa06..502d10e 100644
--- a/drm/1.0/Android.bp
+++ b/drm/1.0/Android.bp
@@ -93,4 +93,85 @@
],
}
-subdirs = ["default"]
+genrule {
+ name: "android.hardware.drm@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
+ srcs: [
+ ":android.hardware.drm@1.0_hal",
+ ],
+ out: [
+ "android/hardware/drm/1.0/ACryptoFactory.cpp",
+ "android/hardware/drm/1.0/ACryptoPlugin.cpp",
+ "android/hardware/drm/1.0/ADrmFactory.cpp",
+ "android/hardware/drm/1.0/ADrmPlugin.cpp",
+ "android/hardware/drm/1.0/ADrmPluginListener.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.drm@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
+ srcs: [
+ ":android.hardware.drm@1.0_hal",
+ ],
+ out: [
+ "android/hardware/drm/1.0/ACryptoFactory.h",
+ "android/hardware/drm/1.0/ACryptoPlugin.h",
+ "android/hardware/drm/1.0/ADrmFactory.h",
+ "android/hardware/drm/1.0/ADrmPlugin.h",
+ "android/hardware/drm/1.0/ADrmPluginListener.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.drm@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.drm@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.drm@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.drm@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.drm@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.drm@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.drm@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.drm@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.drm@1.0",
+ "android.hardware.drm@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.drm@1.0-adapter_genc++"],
+}
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 3966eac..4652c76 100644
--- a/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp
+++ b/drm/1.0/vts/functional/drm_hal_clearkey_test.cpp
@@ -76,12 +76,14 @@
#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
-static const uint8_t kCommonPsshBoxUUID[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 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,7 +113,7 @@
};
/**
- * Ensure the factory supports the clearkey scheme UUID
+ * Ensure the factory supports both Common Pssh Box UUID and Clearkey Scheme UUID
*/
TEST_F(DrmHalClearkeyFactoryTest, ClearKeyPluginSupported) {
EXPECT_TRUE(drmFactory->isCryptoSchemeSupported(kCommonPsshBoxUUID));
@@ -164,9 +166,23 @@
}
/**
- * Ensure clearkey drm plugin can be created
+ * Ensure clearkey drm plugin can be created using Common Pssh Box UUID
*/
-TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyDrmPlugin) {
+TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyDrmPluginUsingCommonPsshBoxUuid) {
+ hidl_string packageName("android.hardware.drm.test");
+ auto res = drmFactory->createPlugin(
+ kCommonPsshBoxUUID, packageName,
+ [&](Status status, const sp<IDrmPlugin>& plugin) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_NE(nullptr, plugin.get());
+ });
+ EXPECT_OK(res);
+}
+
+/**
+ * Ensure clearkey drm plugin can be created using ClearKey UUID
+ */
+ TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyDrmPluginUsingClearKeyUuid) {
hidl_string packageName("android.hardware.drm.test");
auto res = drmFactory->createPlugin(
kClearKeyUUID, packageName,
@@ -178,9 +194,23 @@
}
/**
- * Ensure clearkey crypto plugin can be created
+ * Ensure clearkey crypto plugin can be created using Common Pssh Box UUID
*/
-TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyCryptoPlugin) {
+TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyCryptoPluginUsingCommonPsshBoxUuid) {
+ hidl_vec<uint8_t> initVec;
+ auto res = cryptoFactory->createPlugin(
+ kCommonPsshBoxUUID, initVec,
+ [&](Status status, const sp<ICryptoPlugin>& plugin) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_NE(nullptr, plugin.get());
+ });
+ EXPECT_OK(res);
+}
+
+/**
+ * Ensure clearkey crypto plugin can be created using ClearKey UUID
+ */
+TEST_F(DrmHalClearkeyFactoryTest, CreateClearKeyCryptoPluginUsingClearKeyUuid) {
hidl_vec<uint8_t> initVec;
auto res = cryptoFactory->createPlugin(
kClearKeyUUID, initVec,
@@ -332,32 +362,29 @@
// full box header (version = 1 flags = 0)
0x01, 0x00, 0x00, 0x00,
// system id
- 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, 0xac, 0xe3, 0x3c, 0x1e,
- 0x52, 0xe2, 0xfb, 0x4b,
+ 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, 0xac, 0xe3, 0x3c,
+ 0x1e, 0x52, 0xe2, 0xfb, 0x4b,
// number of key ids
0x00, 0x00, 0x00, 0x01,
// key id
- 0x60, 0x06, 0x1e, 0x01, 0x7e, 0x47, 0x7e, 0x87, 0x7e, 0x57, 0xd0, 0x0d,
- 0x1e, 0xd0, 0x0d, 0x1e,
+ 0x60, 0x06, 0x1e, 0x01, 0x7e, 0x47, 0x7e, 0x87, 0x7e, 0x57, 0xd0,
+ 0x0d, 0x1e, 0xd0, 0x0d, 0x1e,
// size of data, must be zero
0x00, 0x00, 0x00, 0x00};
hidl_vec<uint8_t> expectedKeyRequest = {
- 0x7b, 0x22, 0x6b, 0x69, 0x64, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x59,
- 0x41, 0x59, 0x65, 0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2b,
- 0x56, 0x39, 0x41, 0x4e, 0x48, 0x74, 0x41, 0x4e, 0x48, 0x67, 0x22,
- 0x5d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x74,
- 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x22, 0x7d};
+ 0x7b, 0x22, 0x6b, 0x69, 0x64, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x59, 0x41, 0x59, 0x65,
+ 0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2d, 0x56, 0x39, 0x41, 0x4e, 0x48, 0x74,
+ 0x41, 0x4e, 0x48, 0x67, 0x22, 0x5d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a,
+ 0x22, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x22, 0x7d};
hidl_vec<uint8_t> knownKeyResponse = {
- 0x7b, 0x22, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22,
- 0x6b, 0x74, 0x79, 0x22, 0x3a, 0x22, 0x6f, 0x63, 0x74, 0x22, 0x2c,
- 0x22, 0x6b, 0x69, 0x64, 0x22, 0x3a, 0x22, 0x59, 0x41, 0x59, 0x65,
- 0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2b, 0x56, 0x39, 0x41,
- 0x4e, 0x48, 0x74, 0x41, 0x4e, 0x48, 0x67, 0x22, 0x2c, 0x22, 0x6b,
- 0x22, 0x3a, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x54, 0x65,
- 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x73, 0x65, 0x36, 0x34,
- 0x67, 0x67, 0x67, 0x22, 0x7d, 0x5d, 0x7d, 0x0a};
+ 0x7b, 0x22, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x6b, 0x74, 0x79, 0x22,
+ 0x3a, 0x22, 0x6f, 0x63, 0x74, 0x22, 0x2c, 0x22, 0x6b, 0x69, 0x64, 0x22, 0x3a, 0x22, 0x59,
+ 0x41, 0x59, 0x65, 0x41, 0x58, 0x35, 0x48, 0x66, 0x6f, 0x64, 0x2d, 0x56, 0x39, 0x41, 0x4e,
+ 0x48, 0x74, 0x41, 0x4e, 0x48, 0x67, 0x22, 0x2c, 0x22, 0x6b, 0x22, 0x3a, 0x22, 0x47, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x61, 0x73, 0x65,
+ 0x36, 0x34, 0x67, 0x67, 0x67, 0x22, 0x7d, 0x5d, 0x7d, 0x0a};
hidl_string mimeType = "video/mp4";
KeyedVector optionalParameters;
@@ -1085,12 +1112,11 @@
*/
TEST_F(DrmHalClearkeyDecryptTest, TestQueryKeyStatus) {
auto sessionId = openSession();
- auto res = drmPlugin->queryKeyStatus(sessionId,
- [&](Status status, KeyedVector /* info */) {
- // clearkey doesn't support this method
- EXPECT_EQ(Status::ERROR_DRM_CANNOT_HANDLE, status);
- });
+ auto res = drmPlugin->queryKeyStatus(
+ sessionId, [&](Status status, KeyedVector /* info */) { EXPECT_EQ(Status::OK, status); });
EXPECT_OK(res);
+
+ closeSession(sessionId);
}
diff --git a/dumpstate/1.0/Android.bp b/dumpstate/1.0/Android.bp
index b135e00..5a028a5 100644
--- a/dumpstate/1.0/Android.bp
+++ b/dumpstate/1.0/Android.bp
@@ -60,3 +60,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.dumpstate@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.dumpstate@1.0",
+ srcs: [
+ ":android.hardware.dumpstate@1.0_hal",
+ ],
+ out: [
+ "android/hardware/dumpstate/1.0/ADumpstateDevice.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.dumpstate@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.dumpstate@1.0",
+ srcs: [
+ ":android.hardware.dumpstate@1.0_hal",
+ ],
+ out: [
+ "android/hardware/dumpstate/1.0/ADumpstateDevice.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.dumpstate@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.dumpstate@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.dumpstate@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.dumpstate@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.dumpstate@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.dumpstate@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.dumpstate@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.dumpstate@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.dumpstate@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.dumpstate@1.0",
+ "android.hardware.dumpstate@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.dumpstate@1.0-adapter_genc++"],
+}
diff --git a/gatekeeper/1.0/Android.bp b/gatekeeper/1.0/Android.bp
index f12f38f..5692bf1 100644
--- a/gatekeeper/1.0/Android.bp
+++ b/gatekeeper/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.gatekeeper@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gatekeeper@1.0",
+ srcs: [
+ ":android.hardware.gatekeeper@1.0_hal",
+ ],
+ out: [
+ "android/hardware/gatekeeper/1.0/AGatekeeper.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.gatekeeper@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gatekeeper@1.0",
+ srcs: [
+ ":android.hardware.gatekeeper@1.0_hal",
+ ],
+ out: [
+ "android/hardware/gatekeeper/1.0/AGatekeeper.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.gatekeeper@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.gatekeeper@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.gatekeeper@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.gatekeeper@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.gatekeeper@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.gatekeeper@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.gatekeeper@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gatekeeper@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.gatekeeper@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.gatekeeper@1.0",
+ "android.hardware.gatekeeper@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.gatekeeper@1.0-adapter_genc++"],
+}
diff --git a/gnss/1.0/Android.bp b/gnss/1.0/Android.bp
index 6db98f6..36b2095 100644
--- a/gnss/1.0/Android.bp
+++ b/gnss/1.0/Android.bp
@@ -197,3 +197,116 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.gnss@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gnss@1.0",
+ srcs: [
+ ":android.hardware.gnss@1.0_hal",
+ ],
+ out: [
+ "android/hardware/gnss/1.0/AAGnss.cpp",
+ "android/hardware/gnss/1.0/AAGnssCallback.cpp",
+ "android/hardware/gnss/1.0/AAGnssRil.cpp",
+ "android/hardware/gnss/1.0/AAGnssRilCallback.cpp",
+ "android/hardware/gnss/1.0/AGnss.cpp",
+ "android/hardware/gnss/1.0/AGnssBatching.cpp",
+ "android/hardware/gnss/1.0/AGnssBatchingCallback.cpp",
+ "android/hardware/gnss/1.0/AGnssCallback.cpp",
+ "android/hardware/gnss/1.0/AGnssConfiguration.cpp",
+ "android/hardware/gnss/1.0/AGnssDebug.cpp",
+ "android/hardware/gnss/1.0/AGnssGeofenceCallback.cpp",
+ "android/hardware/gnss/1.0/AGnssGeofencing.cpp",
+ "android/hardware/gnss/1.0/AGnssMeasurement.cpp",
+ "android/hardware/gnss/1.0/AGnssMeasurementCallback.cpp",
+ "android/hardware/gnss/1.0/AGnssNavigationMessage.cpp",
+ "android/hardware/gnss/1.0/AGnssNavigationMessageCallback.cpp",
+ "android/hardware/gnss/1.0/AGnssNi.cpp",
+ "android/hardware/gnss/1.0/AGnssNiCallback.cpp",
+ "android/hardware/gnss/1.0/AGnssXtra.cpp",
+ "android/hardware/gnss/1.0/AGnssXtraCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.gnss@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gnss@1.0",
+ srcs: [
+ ":android.hardware.gnss@1.0_hal",
+ ],
+ out: [
+ "android/hardware/gnss/1.0/AAGnss.h",
+ "android/hardware/gnss/1.0/AAGnssCallback.h",
+ "android/hardware/gnss/1.0/AAGnssRil.h",
+ "android/hardware/gnss/1.0/AAGnssRilCallback.h",
+ "android/hardware/gnss/1.0/AGnss.h",
+ "android/hardware/gnss/1.0/AGnssBatching.h",
+ "android/hardware/gnss/1.0/AGnssBatchingCallback.h",
+ "android/hardware/gnss/1.0/AGnssCallback.h",
+ "android/hardware/gnss/1.0/AGnssConfiguration.h",
+ "android/hardware/gnss/1.0/AGnssDebug.h",
+ "android/hardware/gnss/1.0/AGnssGeofenceCallback.h",
+ "android/hardware/gnss/1.0/AGnssGeofencing.h",
+ "android/hardware/gnss/1.0/AGnssMeasurement.h",
+ "android/hardware/gnss/1.0/AGnssMeasurementCallback.h",
+ "android/hardware/gnss/1.0/AGnssNavigationMessage.h",
+ "android/hardware/gnss/1.0/AGnssNavigationMessageCallback.h",
+ "android/hardware/gnss/1.0/AGnssNi.h",
+ "android/hardware/gnss/1.0/AGnssNiCallback.h",
+ "android/hardware/gnss/1.0/AGnssXtra.h",
+ "android/hardware/gnss/1.0/AGnssXtraCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.gnss@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.gnss@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.gnss@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.gnss@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.gnss@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.gnss@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.gnss@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gnss@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.gnss@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.gnss@1.0",
+ "android.hardware.gnss@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.gnss@1.0-adapter_genc++"],
+}
diff --git a/graphics/allocator/2.0/Android.bp b/graphics/allocator/2.0/Android.bp
index 46faa17..6532065 100644
--- a/graphics/allocator/2.0/Android.bp
+++ b/graphics/allocator/2.0/Android.bp
@@ -65,3 +65,86 @@
"android.hardware.graphics.mapper@2.0",
],
}
+
+genrule {
+ name: "android.hardware.graphics.allocator@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0",
+ srcs: [
+ ":android.hardware.graphics.allocator@2.0_hal",
+ ],
+ out: [
+ "android/hardware/graphics/allocator/2.0/AAllocator.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.allocator@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0",
+ srcs: [
+ ":android.hardware.graphics.allocator@2.0_hal",
+ ],
+ out: [
+ "android/hardware/graphics/allocator/2.0/AAllocator.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.graphics.allocator@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.graphics.allocator@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.graphics.allocator@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.graphics.allocator@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.graphics.allocator@2.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.mapper@2.0",
+ "android.hardware.graphics.mapper@2.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.graphics.allocator@2.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.mapper@2.0",
+ "android.hardware.graphics.mapper@2.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.allocator@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.allocator@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.graphics.allocator@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.graphics.allocator@2.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.mapper@2.0",
+ "android.hardware.graphics.allocator@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.graphics.allocator@2.0-adapter_genc++"],
+}
diff --git a/graphics/bufferqueue/1.0/Android.bp b/graphics/bufferqueue/1.0/Android.bp
index 2d36fc7..44052c7 100644
--- a/graphics/bufferqueue/1.0/Android.bp
+++ b/graphics/bufferqueue/1.0/Android.bp
@@ -71,3 +71,86 @@
"android.hardware.media@1.0",
],
}
+
+genrule {
+ name: "android.hardware.graphics.bufferqueue@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.bufferqueue@1.0",
+ srcs: [
+ ":android.hardware.graphics.bufferqueue@1.0_hal",
+ ],
+ out: [
+ "android/hardware/graphics/bufferqueue/1.0/AGraphicBufferProducer.cpp",
+ "android/hardware/graphics/bufferqueue/1.0/AProducerListener.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.bufferqueue@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.bufferqueue@1.0",
+ srcs: [
+ ":android.hardware.graphics.bufferqueue@1.0_hal",
+ ],
+ out: [
+ "android/hardware/graphics/bufferqueue/1.0/AGraphicBufferProducer.h",
+ "android/hardware/graphics/bufferqueue/1.0/AProducerListener.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.graphics.bufferqueue@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.graphics.bufferqueue@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.graphics.bufferqueue@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.graphics.bufferqueue@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.media@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.media@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.bufferqueue@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.bufferqueue@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.graphics.bufferqueue@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.media@1.0",
+ "android.hardware.graphics.bufferqueue@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.graphics.bufferqueue@1.0-adapter_genc++"],
+}
diff --git a/graphics/composer/2.1/Android.bp b/graphics/composer/2.1/Android.bp
index e875708..3bdd0a6 100644
--- a/graphics/composer/2.1/Android.bp
+++ b/graphics/composer/2.1/Android.bp
@@ -80,3 +80,85 @@
"android.hardware.graphics.common@1.0",
],
}
+
+genrule {
+ name: "android.hardware.graphics.composer@2.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.composer@2.1",
+ srcs: [
+ ":android.hardware.graphics.composer@2.1_hal",
+ ],
+ out: [
+ "android/hardware/graphics/composer/2.1/AComposer.cpp",
+ "android/hardware/graphics/composer/2.1/AComposerCallback.cpp",
+ "android/hardware/graphics/composer/2.1/AComposerClient.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.composer@2.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.composer@2.1",
+ srcs: [
+ ":android.hardware.graphics.composer@2.1_hal",
+ ],
+ out: [
+ "android/hardware/graphics/composer/2.1/AComposer.h",
+ "android/hardware/graphics/composer/2.1/AComposerCallback.h",
+ "android/hardware/graphics/composer/2.1/AComposerClient.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.graphics.composer@2.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.graphics.composer@2.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.graphics.composer@2.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.graphics.composer@2.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.composer@2.1",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.composer@2.1",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.composer@2.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.composer@2.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.graphics.composer@2.1-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.composer@2.1",
+ "android.hardware.graphics.composer@2.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.graphics.composer@2.1-adapter_genc++"],
+}
diff --git a/graphics/mapper/2.0/Android.bp b/graphics/mapper/2.0/Android.bp
index f5913af..6ab99b5 100644
--- a/graphics/mapper/2.0/Android.bp
+++ b/graphics/mapper/2.0/Android.bp
@@ -67,3 +67,81 @@
"android.hardware.graphics.common@1.0",
],
}
+
+genrule {
+ name: "android.hardware.graphics.mapper@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.mapper@2.0",
+ srcs: [
+ ":android.hardware.graphics.mapper@2.0_hal",
+ ],
+ out: [
+ "android/hardware/graphics/mapper/2.0/AMapper.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.mapper@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.mapper@2.0",
+ srcs: [
+ ":android.hardware.graphics.mapper@2.0_hal",
+ ],
+ out: [
+ "android/hardware/graphics/mapper/2.0/AMapper.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.graphics.mapper@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.graphics.mapper@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.graphics.mapper@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.graphics.mapper@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.mapper@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.mapper@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.graphics.mapper@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.graphics.mapper@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.graphics.mapper@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.mapper@2.0",
+ "android.hardware.graphics.mapper@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.graphics.mapper@2.0-adapter_genc++"],
+}
diff --git a/health/1.0/Android.bp b/health/1.0/Android.bp
index d8ebc20..aff56a8 100644
--- a/health/1.0/Android.bp
+++ b/health/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.health@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@1.0",
+ srcs: [
+ ":android.hardware.health@1.0_hal",
+ ],
+ out: [
+ "android/hardware/health/1.0/AHealth.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.health@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@1.0",
+ srcs: [
+ ":android.hardware.health@1.0_hal",
+ ],
+ out: [
+ "android/hardware/health/1.0/AHealth.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.health@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.health@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.health@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.health@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.health@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.health@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.health@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.health@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.health@1.0",
+ "android.hardware.health@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.health@1.0-adapter_genc++"],
+}
diff --git a/health/2.0/Android.bp b/health/2.0/Android.bp
new file mode 100644
index 0000000..f944471
--- /dev/null
+++ b/health/2.0/Android.bp
@@ -0,0 +1,157 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+ name: "android.hardware.health@2.0_hal",
+ srcs: [
+ "types.hal",
+ "IHealth.hal",
+ "IHealthInfoCallback.hal",
+ ],
+}
+
+genrule {
+ name: "android.hardware.health@2.0_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@2.0",
+ srcs: [
+ ":android.hardware.health@2.0_hal",
+ ],
+ out: [
+ "android/hardware/health/2.0/types.cpp",
+ "android/hardware/health/2.0/HealthAll.cpp",
+ "android/hardware/health/2.0/HealthInfoCallbackAll.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.health@2.0_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@2.0",
+ srcs: [
+ ":android.hardware.health@2.0_hal",
+ ],
+ out: [
+ "android/hardware/health/2.0/types.h",
+ "android/hardware/health/2.0/hwtypes.h",
+ "android/hardware/health/2.0/IHealth.h",
+ "android/hardware/health/2.0/IHwHealth.h",
+ "android/hardware/health/2.0/BnHwHealth.h",
+ "android/hardware/health/2.0/BpHwHealth.h",
+ "android/hardware/health/2.0/BsHealth.h",
+ "android/hardware/health/2.0/IHealthInfoCallback.h",
+ "android/hardware/health/2.0/IHwHealthInfoCallback.h",
+ "android/hardware/health/2.0/BnHwHealthInfoCallback.h",
+ "android/hardware/health/2.0/BpHwHealthInfoCallback.h",
+ "android/hardware/health/2.0/BsHealthInfoCallback.h",
+ ],
+}
+
+cc_library {
+ name: "android.hardware.health@2.0",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.health@2.0_genc++"],
+ generated_headers: ["android.hardware.health@2.0_genc++_headers"],
+ export_generated_headers: ["android.hardware.health@2.0_genc++_headers"],
+ vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "android.hardware.health@1.0",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hardware.health@1.0",
+ ],
+}
+
+genrule {
+ name: "android.hardware.health@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@2.0",
+ srcs: [
+ ":android.hardware.health@2.0_hal",
+ ],
+ out: [
+ "android/hardware/health/2.0/AHealth.cpp",
+ "android/hardware/health/2.0/AHealthInfoCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.health@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@2.0",
+ srcs: [
+ ":android.hardware.health@2.0_hal",
+ ],
+ out: [
+ "android/hardware/health/2.0/AHealth.h",
+ "android/hardware/health/2.0/AHealthInfoCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.health@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.health@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.health@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.health@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.health@1.0",
+ "android.hardware.health@2.0",
+ "android.hardware.health@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.health@1.0",
+ "android.hardware.health@2.0",
+ "android.hardware.health@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.health@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.health@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.health@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.health@1.0",
+ "android.hardware.health@2.0",
+ "android.hardware.health@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.health@2.0-adapter_genc++"],
+}
diff --git a/health/2.0/Android.mk b/health/2.0/Android.mk
new file mode 100644
index 0000000..344c963
--- /dev/null
+++ b/health/2.0/Android.mk
@@ -0,0 +1,86 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.health-V2.0-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.health-V1.0-java \
+ android.hidl.base-V1.0-java \
+
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES += core-oj hwbinder
+
+#
+# Build types.hal (Result)
+#
+GEN := $(intermediates)/android/hardware/health/V2_0/Result.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.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.health@2.0::types.Result
+
+$(GEN): $(LOCAL_PATH)/types.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IHealth.hal
+#
+GEN := $(intermediates)/android/hardware/health/V2_0/IHealth.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IHealth.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IHealthInfoCallback.hal
+$(GEN): $(LOCAL_PATH)/IHealthInfoCallback.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
+$(GEN): $(LOCAL_PATH)/types.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.health@2.0::IHealth
+
+$(GEN): $(LOCAL_PATH)/IHealth.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IHealthInfoCallback.hal
+#
+GEN := $(intermediates)/android/hardware/health/V2_0/IHealthInfoCallback.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IHealthInfoCallback.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.health@2.0::IHealthInfoCallback
+
+$(GEN): $(LOCAL_PATH)/IHealthInfoCallback.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/health/2.0/IHealth.hal b/health/2.0/IHealth.hal
new file mode 100644
index 0000000..3e10701
--- /dev/null
+++ b/health/2.0/IHealth.hal
@@ -0,0 +1,140 @@
+/*
+ * 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.health@2.0;
+
+import @1.0::BatteryStatus;
+
+import IHealthInfoCallback;
+
+/**
+ * IHealth manages health info and posts events on registered callbacks.
+ */
+interface IHealth {
+
+ /**
+ * Register a callback for any health info events.
+ *
+ * Registering a new callback must not unregister the old one; the old
+ * callback remains registered until one of the following happens:
+ * - A client explicitly calls {@link unregisterCallback} to unregister it.
+ * - The client process that hosts the callback dies.
+ *
+ * @param callback the callback to register.
+ * @return result SUCCESS if successful,
+ * UNKNOWN for other errors.
+ */
+ registerCallback(IHealthInfoCallback callback) generates (Result result);
+
+ /**
+ * Explicitly unregister a callback that is previously registered through
+ * {@link registerCallback}.
+ *
+ * @param callback the callback to unregister
+ * @return result SUCCESS if successful,
+ * NOT_FOUND if callback is not registered previously,
+ * UNKNOWN for other errors.
+ */
+ unregisterCallback(IHealthInfoCallback callback) generates (Result result);
+
+ /**
+ * Schedule update.
+ *
+ * When update() is called, the service must notify all registered callbacks
+ * with the most recent health info.
+ *
+ * @return result SUCCESS if successful,
+ * CALLBACK_DIED if any registered callback is dead,
+ * UNKNOWN for other errors.
+ */
+ update() generates (Result result);
+
+ /**
+ * Get battery capacity in microampere-hours(µAh).
+ *
+ * @return result SUCCESS if successful,
+ * NOT_SUPPORTED if this property is not supported
+ * (e.g. the file that stores this property does not exist),
+ * UNKNOWN for other errors.
+ * @return value battery capacity, or INT32_MIN if not successful.
+ */
+ getChargeCounter() generates (Result result, int32_t value);
+
+ /**
+ * Get instantaneous battery current in microamperes(µA).
+ *
+ * Positive values indicate net current entering the battery from a charge
+ * source, negative values indicate net current discharging from the
+ * battery.
+ *
+ * @return result SUCCESS if successful,
+ * NOT_SUPPORTED if this property is not supported
+ * (e.g. the file that stores this property does not exist),
+ * UNKNOWN for other errors.
+ * @return value instantaneous battery current, or INT32_MIN if not
+ * successful.
+ */
+ getCurrentNow() generates (Result result, int32_t value);
+
+ /**
+ * Get average battery current in microamperes(µA).
+ *
+ * Positive values indicate net current entering the battery from a charge
+ * source, negative values indicate net current discharging from the
+ * battery. The time period over which the average is computed may depend on
+ * the fuel gauge hardware and its configuration.
+ *
+ * @return result SUCCESS if successful,
+ * NOT_SUPPORTED if this property is not supported
+ * (e.g. the file that stores this property does not exist),
+ * UNKNOWN for other errors.
+ * @return value average battery current, or INT32_MIN if not successful.
+ */
+ getCurrentAverage() generates (Result result, int32_t value);
+
+ /**
+ * Get remaining battery capacity percentage of total capacity
+ * (with no fractional part).
+ *
+ * @return result SUCCESS if successful,
+ * NOT_SUPPORTED if this property is not supported
+ * (e.g. the file that stores this property does not exist),
+ * UNKNOWN for other errors.
+ * @return value remaining battery capacity, or INT32_MIN if not successful.
+ */
+ getCapacity() generates (Result result, int32_t value);
+
+ /**
+ * Get battery remaining energy in nanowatt-hours.
+ *
+ * @return result SUCCESS if successful,
+ * NOT_SUPPORTED if this property is not supported,
+ * UNKNOWN for other errors.
+ * @return value remaining energy, or INT64_MIN if not successful.
+ */
+ getEnergyCounter() generates (Result result, int64_t value);
+
+ /**
+ * Get battery charge status.
+ *
+ * @return result SUCCESS if successful,
+ * NOT_SUPPORTED if this property is not supported
+ * (e.g. the file that stores this property does not exist),
+ * UNKNOWN other errors.
+ * @return value charge status, or UNKNOWN if not successful.
+ */
+ getChargeStatus() generates (Result result, BatteryStatus value);
+};
diff --git a/health/2.0/IHealthInfoCallback.hal b/health/2.0/IHealthInfoCallback.hal
new file mode 100644
index 0000000..8e17bb9
--- /dev/null
+++ b/health/2.0/IHealthInfoCallback.hal
@@ -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.
+ */
+
+package android.hardware.health@2.0;
+
+import @1.0::HealthInfo;
+
+/**
+ * IHealthInfoCallback is the callback interface to
+ * {@link IHealthInfoBus.registerCallback}.
+ */
+interface IHealthInfoCallback {
+ /**
+ * An implementation of IHealthInfoBus must call healthInfoChanged on all
+ * registered callbacks after health info changes.
+ * @param info the updated HealthInfo
+ */
+ oneway healthInfoChanged(HealthInfo info);
+};
diff --git a/health/2.0/types.hal b/health/2.0/types.hal
new file mode 100644
index 0000000..89ea444
--- /dev/null
+++ b/health/2.0/types.hal
@@ -0,0 +1,27 @@
+/*
+ * 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.health@2.0;
+
+import @1.0::Result;
+
+/**
+ * Status values for HAL methods.
+ */
+enum Result : @1.0::Result {
+ NOT_FOUND,
+ CALLBACK_DIED,
+};
diff --git a/health/Android.bp b/health/Android.bp
index a6f6017..2c931e5 100644
--- a/health/Android.bp
+++ b/health/Android.bp
@@ -4,4 +4,5 @@
"1.0/default",
"1.0/default/libhealthd",
"1.0/vts/functional",
+ "2.0",
]
diff --git a/ir/1.0/Android.bp b/ir/1.0/Android.bp
index 489f61f..e686d23 100644
--- a/ir/1.0/Android.bp
+++ b/ir/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.ir@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0",
+ srcs: [
+ ":android.hardware.ir@1.0_hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/AConsumerIr.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0",
+ srcs: [
+ ":android.hardware.ir@1.0_hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/AConsumerIr.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.ir@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.ir@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.ir@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.ir@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.ir@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.ir@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.ir@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.ir@1.0",
+ "android.hardware.ir@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.ir@1.0-adapter_genc++"],
+}
diff --git a/keymaster/3.0/Android.bp b/keymaster/3.0/Android.bp
index 14cfab2..0e55133 100644
--- a/keymaster/3.0/Android.bp
+++ b/keymaster/3.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.keymaster@3.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.keymaster@3.0",
+ srcs: [
+ ":android.hardware.keymaster@3.0_hal",
+ ],
+ out: [
+ "android/hardware/keymaster/3.0/AKeymasterDevice.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.keymaster@3.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.keymaster@3.0",
+ srcs: [
+ ":android.hardware.keymaster@3.0_hal",
+ ],
+ out: [
+ "android/hardware/keymaster/3.0/AKeymasterDevice.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.keymaster@3.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.keymaster@3.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.keymaster@3.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.keymaster@3.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.keymaster@3.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.keymaster@3.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.keymaster@3.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.keymaster@3.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.keymaster@3.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.keymaster@3.0",
+ "android.hardware.keymaster@3.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.keymaster@3.0-adapter_genc++"],
+}
diff --git a/keymaster/3.0/default/Android.mk b/keymaster/3.0/default/Android.mk
index 87ad245..6b66f7d 100644
--- a/keymaster/3.0/default/Android.mk
+++ b/keymaster/3.0/default/Android.mk
@@ -13,6 +13,8 @@
libcrypto \
libkeymaster_portable \
libkeymaster_staging \
+ libpuresoftkeymasterdevice \
+ libkeymaster3device \
libhidlbase \
libhidltransport \
libutils \
diff --git a/keymaster/3.0/default/KeymasterDevice.cpp b/keymaster/3.0/default/KeymasterDevice.cpp
index d83963f..6fabbde 100644
--- a/keymaster/3.0/default/KeymasterDevice.cpp
+++ b/keymaster/3.0/default/KeymasterDevice.cpp
@@ -21,9 +21,11 @@
#include <cutils/log.h>
+#include <AndroidKeymaster3Device.h>
+#include <hardware/keymaster0.h>
+#include <hardware/keymaster1.h>
+#include <hardware/keymaster2.h>
#include <hardware/keymaster_defs.h>
-#include <keymaster/keymaster_configuration.h>
-#include <keymaster/soft_keymaster_device.h>
namespace android {
namespace hardware {
@@ -31,717 +33,77 @@
namespace V3_0 {
namespace implementation {
-using ::keymaster::SoftKeymasterDevice;
-
-class SoftwareOnlyHidlKeymasterEnforcement : public ::keymaster::KeymasterEnforcement {
- public:
- SoftwareOnlyHidlKeymasterEnforcement() : KeymasterEnforcement(64, 64) {}
-
- uint32_t get_current_time() const override {
- struct timespec tp;
- int err = clock_gettime(CLOCK_MONOTONIC, &tp);
- if (err || tp.tv_sec < 0) return 0;
- return static_cast<uint32_t>(tp.tv_sec);
- }
-
- bool activation_date_valid(uint64_t) const override { return true; }
- bool expiration_date_passed(uint64_t) const override { return false; }
- bool auth_token_timed_out(const hw_auth_token_t&, uint32_t) const override { return false; }
- bool ValidateTokenSignature(const hw_auth_token_t&) const override { return true; }
-};
-
-class SoftwareOnlyHidlKeymasterContext : public ::keymaster::SoftKeymasterContext {
- public:
- SoftwareOnlyHidlKeymasterContext() : enforcement_(new SoftwareOnlyHidlKeymasterEnforcement) {}
-
- ::keymaster::KeymasterEnforcement* enforcement_policy() override { return enforcement_.get(); }
-
- private:
- std::unique_ptr<::keymaster::KeymasterEnforcement> enforcement_;
-};
-
-static int keymaster0_device_initialize(const hw_module_t* mod, keymaster2_device_t** dev) {
- assert(mod->module_api_version < KEYMASTER_MODULE_API_VERSION_1_0);
- ALOGI("Found keymaster0 module %s, version %x", mod->name, mod->module_api_version);
-
- std::unique_ptr<SoftKeymasterDevice> soft_keymaster(new SoftKeymasterDevice);
- keymaster0_device_t* km0_device = NULL;
- keymaster_error_t error = KM_ERROR_OK;
-
- int rc = keymaster0_open(mod, &km0_device);
+static int get_keymaster0_dev(keymaster0_device_t** dev, const hw_module_t* mod) {
+ int rc = keymaster0_open(mod, dev);
if (rc) {
ALOGE("Error opening keystore keymaster0 device.");
- goto err;
+ *dev = nullptr;
+ return rc;
}
-
- if (km0_device->flags & KEYMASTER_SOFTWARE_ONLY) {
- ALOGI("Keymaster0 module is software-only. Using SoftKeymasterDevice instead.");
- km0_device->common.close(&km0_device->common);
- km0_device = NULL;
- // SoftKeymasterDevice will be deleted by keymaster_device_release()
- *dev = soft_keymaster.release()->keymaster2_device();
- return 0;
- }
-
- ALOGD("Wrapping keymaster0 module %s with SoftKeymasterDevice", mod->name);
- error = soft_keymaster->SetHardwareDevice(km0_device);
- km0_device = NULL; // SoftKeymasterDevice has taken ownership.
- if (error != KM_ERROR_OK) {
- ALOGE("Got error %d from SetHardwareDevice", error);
- rc = error;
- goto err;
- }
-
- // SoftKeymasterDevice will be deleted by keymaster_device_release()
- *dev = soft_keymaster.release()->keymaster2_device();
return 0;
-
-err:
- if (km0_device) km0_device->common.close(&km0_device->common);
- *dev = NULL;
- return rc;
}
-static int keymaster1_device_initialize(const hw_module_t* mod, keymaster2_device_t** dev,
- bool* supports_all_digests) {
- assert(mod->module_api_version >= KEYMASTER_MODULE_API_VERSION_1_0);
- ALOGI("Found keymaster1 module %s, version %x", mod->name, mod->module_api_version);
-
- std::unique_ptr<SoftKeymasterDevice> soft_keymaster(new SoftKeymasterDevice);
- keymaster1_device_t* km1_device = nullptr;
- keymaster_error_t error = KM_ERROR_OK;
-
- int rc = keymaster1_open(mod, &km1_device);
+static int get_keymaster1_dev(keymaster1_device_t** dev, const hw_module_t* mod) {
+ int rc = keymaster1_open(mod, dev);
if (rc) {
ALOGE("Error %d opening keystore keymaster1 device", rc);
- goto err;
+ if (*dev) {
+ (*dev)->common.close(&(*dev)->common);
+ *dev = nullptr;
+ }
}
-
- ALOGD("Wrapping keymaster1 module %s with SofKeymasterDevice", mod->name);
- error = soft_keymaster->SetHardwareDevice(km1_device);
- km1_device = nullptr; // SoftKeymasterDevice has taken ownership.
- if (error != KM_ERROR_OK) {
- ALOGE("Got error %d from SetHardwareDevice", error);
- rc = error;
- goto err;
- }
-
- // SoftKeymasterDevice will be deleted by keymaster_device_release()
- *supports_all_digests = soft_keymaster->supports_all_digests();
- *dev = soft_keymaster.release()->keymaster2_device();
- return 0;
-
-err:
- if (km1_device) km1_device->common.close(&km1_device->common);
- *dev = NULL;
return rc;
}
-static int keymaster2_device_initialize(const hw_module_t* mod, keymaster2_device_t** dev) {
- assert(mod->module_api_version >= KEYMASTER_MODULE_API_VERSION_2_0);
- ALOGI("Found keymaster2 module %s, version %x", mod->name, mod->module_api_version);
-
- keymaster2_device_t* km2_device = nullptr;
-
- int rc = keymaster2_open(mod, &km2_device);
+static int get_keymaster2_dev(keymaster2_device_t** dev, const hw_module_t* mod) {
+ int rc = keymaster2_open(mod, dev);
if (rc) {
ALOGE("Error %d opening keystore keymaster2 device", rc);
- goto err;
+ *dev = nullptr;
}
-
- *dev = km2_device;
- return 0;
-
-err:
- if (km2_device) km2_device->common.close(&km2_device->common);
- *dev = nullptr;
return rc;
}
-static int keymaster_device_initialize(keymaster2_device_t** dev, uint32_t* version,
- bool* supports_ec, bool* supports_all_digests) {
- const hw_module_t* mod;
-
- *supports_ec = true;
+static IKeymasterDevice* createKeymaster3Device() {
+ const hw_module_t* mod = nullptr;
int rc = hw_get_module_by_class(KEYSTORE_HARDWARE_MODULE_ID, NULL, &mod);
if (rc) {
ALOGI("Could not find any keystore module, using software-only implementation.");
// SoftKeymasterDevice will be deleted by keymaster_device_release()
- *dev = (new SoftKeymasterDevice(new SoftwareOnlyHidlKeymasterContext))->keymaster2_device();
- *version = -1;
- return 0;
+ return ::keymaster::ng::CreateKeymasterDevice();
}
if (mod->module_api_version < KEYMASTER_MODULE_API_VERSION_1_0) {
- *version = 0;
- *supports_all_digests = false;
- int rc = keymaster0_device_initialize(mod, dev);
- if (rc == 0 && ((*dev)->flags & KEYMASTER_SUPPORTS_EC) == 0) {
- *supports_ec = false;
+ keymaster0_device_t* dev = nullptr;
+ if (get_keymaster0_dev(&dev, mod)) {
+ return nullptr;
}
- return rc;
+ return ::keymaster::ng::CreateKeymasterDevice(dev);
} else if (mod->module_api_version == KEYMASTER_MODULE_API_VERSION_1_0) {
- *version = 1;
- return keymaster1_device_initialize(mod, dev, supports_all_digests);
+ keymaster1_device_t* dev = nullptr;
+ if (get_keymaster1_dev(&dev, mod)) {
+ return nullptr;
+ }
+ return ::keymaster::ng::CreateKeymasterDevice(dev);
} else {
- *version = 2;
- *supports_all_digests = true;
- return keymaster2_device_initialize(mod, dev);
- }
-}
-
-KeymasterDevice::~KeymasterDevice() {
- if (keymaster_device_) keymaster_device_->common.close(&keymaster_device_->common);
-}
-
-static inline keymaster_tag_type_t typeFromTag(const keymaster_tag_t tag) {
- return keymaster_tag_get_type(tag);
-}
-
-/**
- * legacy_enum_conversion converts enums from hidl to keymaster and back. Currently, this is just a
- * cast to make the compiler happy. One of two thigs should happen though:
- * TODO The keymaster enums should become aliases for the hidl generated enums so that we have a
- * single point of truth. Then this cast function can go away.
- */
-inline static keymaster_tag_t legacy_enum_conversion(const Tag value) {
- return keymaster_tag_t(value);
-}
-inline static Tag legacy_enum_conversion(const keymaster_tag_t value) {
- return Tag(value);
-}
-inline static keymaster_purpose_t legacy_enum_conversion(const KeyPurpose value) {
- return keymaster_purpose_t(value);
-}
-inline static keymaster_key_format_t legacy_enum_conversion(const KeyFormat value) {
- return keymaster_key_format_t(value);
-}
-inline static ErrorCode legacy_enum_conversion(const keymaster_error_t value) {
- return ErrorCode(value);
-}
-
-class KmParamSet : public keymaster_key_param_set_t {
- public:
- KmParamSet(const hidl_vec<KeyParameter>& keyParams) {
- params = new keymaster_key_param_t[keyParams.size()];
- length = keyParams.size();
- for (size_t i = 0; i < keyParams.size(); ++i) {
- auto tag = legacy_enum_conversion(keyParams[i].tag);
- switch (typeFromTag(tag)) {
- case KM_ENUM:
- case KM_ENUM_REP:
- params[i] = keymaster_param_enum(tag, keyParams[i].f.integer);
- break;
- case KM_UINT:
- case KM_UINT_REP:
- params[i] = keymaster_param_int(tag, keyParams[i].f.integer);
- break;
- case KM_ULONG:
- case KM_ULONG_REP:
- params[i] = keymaster_param_long(tag, keyParams[i].f.longInteger);
- break;
- case KM_DATE:
- params[i] = keymaster_param_date(tag, keyParams[i].f.dateTime);
- break;
- case KM_BOOL:
- if (keyParams[i].f.boolValue)
- params[i] = keymaster_param_bool(tag);
- else
- params[i].tag = KM_TAG_INVALID;
- break;
- case KM_BIGNUM:
- case KM_BYTES:
- params[i] =
- keymaster_param_blob(tag, &keyParams[i].blob[0], keyParams[i].blob.size());
- break;
- case KM_INVALID:
- default:
- params[i].tag = KM_TAG_INVALID;
- /* just skip */
- break;
- }
+ keymaster2_device_t* dev = nullptr;
+ if (get_keymaster2_dev(&dev, mod)) {
+ return nullptr;
}
+ return ::keymaster::ng::CreateKeymasterDevice(dev);
}
- KmParamSet(KmParamSet&& other) : keymaster_key_param_set_t{other.params, other.length} {
- other.length = 0;
- other.params = nullptr;
- }
- KmParamSet(const KmParamSet&) = delete;
- ~KmParamSet() { delete[] params; }
-};
-
-inline static KmParamSet hidlParams2KmParamSet(const hidl_vec<KeyParameter>& params) {
- return KmParamSet(params);
-}
-
-inline static keymaster_blob_t hidlVec2KmBlob(const hidl_vec<uint8_t>& blob) {
- /* hidl unmarshals funny pointers if the the blob is empty */
- if (blob.size()) return {&blob[0], blob.size()};
- return {nullptr, 0};
-}
-
-inline static keymaster_key_blob_t hidlVec2KmKeyBlob(const hidl_vec<uint8_t>& blob) {
- /* hidl unmarshals funny pointers if the the blob is empty */
- if (blob.size()) return {&blob[0], blob.size()};
- return {nullptr, 0};
-}
-
-inline static hidl_vec<uint8_t> kmBlob2hidlVec(const keymaster_key_blob_t& blob) {
- hidl_vec<uint8_t> result;
- result.setToExternal(const_cast<unsigned char*>(blob.key_material), blob.key_material_size);
- return result;
-}
-inline static hidl_vec<uint8_t> kmBlob2hidlVec(const keymaster_blob_t& blob) {
- hidl_vec<uint8_t> result;
- result.setToExternal(const_cast<unsigned char*>(blob.data), blob.data_length);
- return result;
-}
-
-inline static hidl_vec<hidl_vec<uint8_t>>
-kmCertChain2Hidl(const keymaster_cert_chain_t* cert_chain) {
- hidl_vec<hidl_vec<uint8_t>> result;
- if (!cert_chain || cert_chain->entry_count == 0 || !cert_chain->entries) return result;
-
- result.resize(cert_chain->entry_count);
- for (size_t i = 0; i < cert_chain->entry_count; ++i) {
- auto& entry = cert_chain->entries[i];
- result[i] = kmBlob2hidlVec(entry);
- }
-
- return result;
-}
-
-static inline hidl_vec<KeyParameter> kmParamSet2Hidl(const keymaster_key_param_set_t& set) {
- hidl_vec<KeyParameter> result;
- if (set.length == 0 || set.params == nullptr) return result;
-
- result.resize(set.length);
- keymaster_key_param_t* params = set.params;
- for (size_t i = 0; i < set.length; ++i) {
- auto tag = params[i].tag;
- result[i].tag = legacy_enum_conversion(tag);
- switch (typeFromTag(tag)) {
- case KM_ENUM:
- case KM_ENUM_REP:
- result[i].f.integer = params[i].enumerated;
- break;
- case KM_UINT:
- case KM_UINT_REP:
- result[i].f.integer = params[i].integer;
- break;
- case KM_ULONG:
- case KM_ULONG_REP:
- result[i].f.longInteger = params[i].long_integer;
- break;
- case KM_DATE:
- result[i].f.dateTime = params[i].date_time;
- break;
- case KM_BOOL:
- result[i].f.boolValue = params[i].boolean;
- break;
- case KM_BIGNUM:
- case KM_BYTES:
- result[i].blob.setToExternal(const_cast<unsigned char*>(params[i].blob.data),
- params[i].blob.data_length);
- break;
- case KM_INVALID:
- default:
- params[i].tag = KM_TAG_INVALID;
- /* just skip */
- break;
- }
- }
- return result;
-}
-
-// Methods from ::android::hardware::keymaster::V3_0::IKeymasterDevice follow.
-Return<void> KeymasterDevice::getHardwareFeatures(getHardwareFeatures_cb _hidl_cb) {
- bool is_secure = !(keymaster_device_->flags & KEYMASTER_SOFTWARE_ONLY);
- bool supports_symmetric_cryptography = false;
- bool supports_attestation = false;
-
- switch (hardware_version_) {
- case 2:
- supports_attestation = true;
- /* Falls through */
- case 1:
- supports_symmetric_cryptography = true;
- break;
- };
-
- _hidl_cb(is_secure, hardware_supports_ec_, supports_symmetric_cryptography,
- supports_attestation, hardware_supports_all_digests_,
- keymaster_device_->common.module->name, keymaster_device_->common.module->author);
- return Void();
-}
-
-Return<ErrorCode> KeymasterDevice::addRngEntropy(const hidl_vec<uint8_t>& data) {
- if (!data.size()) return ErrorCode::OK;
- return legacy_enum_conversion(
- keymaster_device_->add_rng_entropy(keymaster_device_, &data[0], data.size()));
-}
-
-Return<void> KeymasterDevice::generateKey(const hidl_vec<KeyParameter>& keyParams,
- generateKey_cb _hidl_cb) {
- // result variables for the wire
- KeyCharacteristics resultCharacteristics;
- hidl_vec<uint8_t> resultKeyBlob;
-
- // result variables the backend understands
- keymaster_key_blob_t key_blob{nullptr, 0};
- keymaster_key_characteristics_t key_characteristics{{nullptr, 0}, {nullptr, 0}};
-
- // convert the parameter set to something our backend understands
- auto kmParams = hidlParams2KmParamSet(keyParams);
-
- auto rc = keymaster_device_->generate_key(keymaster_device_, &kmParams, &key_blob,
- &key_characteristics);
-
- if (rc == KM_ERROR_OK) {
- // on success convert the result to wire format
- resultKeyBlob = kmBlob2hidlVec(key_blob);
- resultCharacteristics.softwareEnforced = kmParamSet2Hidl(key_characteristics.sw_enforced);
- resultCharacteristics.teeEnforced = kmParamSet2Hidl(key_characteristics.hw_enforced);
- }
-
- // send results off to the client
- _hidl_cb(legacy_enum_conversion(rc), resultKeyBlob, resultCharacteristics);
-
- // free buffers that we are responsible for
- if (key_blob.key_material) free(const_cast<uint8_t*>(key_blob.key_material));
- keymaster_free_characteristics(&key_characteristics);
-
- return Void();
-}
-
-Return<void> KeymasterDevice::getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob,
- const hidl_vec<uint8_t>& clientId,
- const hidl_vec<uint8_t>& appData,
- getKeyCharacteristics_cb _hidl_cb) {
- // result variables for the wire
- KeyCharacteristics resultCharacteristics;
-
- // result variables the backend understands
- keymaster_key_characteristics_t key_characteristics{{nullptr, 0}, {nullptr, 0}};
-
- auto kmKeyBlob = hidlVec2KmKeyBlob(keyBlob);
- auto kmClientId = hidlVec2KmBlob(clientId);
- auto kmAppData = hidlVec2KmBlob(appData);
-
- auto rc = keymaster_device_->get_key_characteristics(
- keymaster_device_, keyBlob.size() ? &kmKeyBlob : nullptr,
- clientId.size() ? &kmClientId : nullptr, appData.size() ? &kmAppData : nullptr,
- &key_characteristics);
-
- if (rc == KM_ERROR_OK) {
- resultCharacteristics.softwareEnforced = kmParamSet2Hidl(key_characteristics.sw_enforced);
- resultCharacteristics.teeEnforced = kmParamSet2Hidl(key_characteristics.hw_enforced);
- }
-
- _hidl_cb(legacy_enum_conversion(rc), resultCharacteristics);
-
- keymaster_free_characteristics(&key_characteristics);
-
- return Void();
-}
-
-Return<void> KeymasterDevice::importKey(const hidl_vec<KeyParameter>& params, KeyFormat keyFormat,
- const hidl_vec<uint8_t>& keyData, importKey_cb _hidl_cb) {
- // result variables for the wire
- KeyCharacteristics resultCharacteristics;
- hidl_vec<uint8_t> resultKeyBlob;
-
- // result variables the backend understands
- keymaster_key_blob_t key_blob{nullptr, 0};
- keymaster_key_characteristics_t key_characteristics{{nullptr, 0}, {nullptr, 0}};
-
- auto kmParams = hidlParams2KmParamSet(params);
- auto kmKeyData = hidlVec2KmBlob(keyData);
-
- auto rc = keymaster_device_->import_key(keymaster_device_, &kmParams,
- legacy_enum_conversion(keyFormat), &kmKeyData,
- &key_blob, &key_characteristics);
-
- if (rc == KM_ERROR_OK) {
- // on success convert the result to wire format
- // (Can we assume that key_blob is {nullptr, 0} or a valid buffer description?)
- resultKeyBlob = kmBlob2hidlVec(key_blob);
- resultCharacteristics.softwareEnforced = kmParamSet2Hidl(key_characteristics.sw_enforced);
- resultCharacteristics.teeEnforced = kmParamSet2Hidl(key_characteristics.hw_enforced);
- }
-
- _hidl_cb(legacy_enum_conversion(rc), resultKeyBlob, resultCharacteristics);
-
- // free buffers that we are responsible for
- if (key_blob.key_material) free(const_cast<uint8_t*>(key_blob.key_material));
- keymaster_free_characteristics(&key_characteristics);
-
- return Void();
-}
-
-Return<void> KeymasterDevice::exportKey(KeyFormat exportFormat, const hidl_vec<uint8_t>& keyBlob,
- const hidl_vec<uint8_t>& clientId,
- const hidl_vec<uint8_t>& appData, exportKey_cb _hidl_cb) {
-
- // result variables for the wire
- hidl_vec<uint8_t> resultKeyBlob;
-
- // result variables the backend understands
- keymaster_blob_t out_blob{nullptr, 0};
-
- auto kmKeyBlob = hidlVec2KmKeyBlob(keyBlob);
- auto kmClientId = hidlVec2KmBlob(clientId);
- auto kmAppData = hidlVec2KmBlob(appData);
-
- auto rc = keymaster_device_->export_key(keymaster_device_, legacy_enum_conversion(exportFormat),
- keyBlob.size() ? &kmKeyBlob : nullptr,
- clientId.size() ? &kmClientId : nullptr,
- appData.size() ? &kmAppData : nullptr, &out_blob);
-
- if (rc == KM_ERROR_OK) {
- // on success convert the result to wire format
- // (Can we assume that key_blob is {nullptr, 0} or a valid buffer description?)
- resultKeyBlob = kmBlob2hidlVec(out_blob);
- }
-
- _hidl_cb(legacy_enum_conversion(rc), resultKeyBlob);
-
- // free buffers that we are responsible for
- if (out_blob.data) free(const_cast<uint8_t*>(out_blob.data));
-
- return Void();
-}
-
-Return<void> KeymasterDevice::attestKey(const hidl_vec<uint8_t>& keyToAttest,
- const hidl_vec<KeyParameter>& attestParams,
- attestKey_cb _hidl_cb) {
-
- hidl_vec<hidl_vec<uint8_t>> resultCertChain;
-
- bool foundAttestationApplicationId = false;
- for (size_t i = 0; i < attestParams.size(); ++i) {
- switch (attestParams[i].tag) {
- case Tag::ATTESTATION_ID_BRAND:
- case Tag::ATTESTATION_ID_DEVICE:
- case Tag::ATTESTATION_ID_PRODUCT:
- case Tag::ATTESTATION_ID_SERIAL:
- case Tag::ATTESTATION_ID_IMEI:
- case Tag::ATTESTATION_ID_MEID:
- case Tag::ATTESTATION_ID_MANUFACTURER:
- case Tag::ATTESTATION_ID_MODEL:
- // Device id attestation may only be supported if the device is able to permanently
- // destroy its knowledge of the ids. This device is unable to do this, so it must
- // never perform any device id attestation.
- _hidl_cb(ErrorCode::CANNOT_ATTEST_IDS, resultCertChain);
- return Void();
-
- case Tag::ATTESTATION_APPLICATION_ID:
- foundAttestationApplicationId = true;
- break;
-
- default:
- break;
- }
- }
-
- // KM3 devices reject missing attest application IDs. KM2 devices do not.
- if (!foundAttestationApplicationId) {
- _hidl_cb(ErrorCode::ATTESTATION_APPLICATION_ID_MISSING,
- resultCertChain);
- return Void();
- }
-
- keymaster_cert_chain_t cert_chain{nullptr, 0};
-
- auto kmKeyToAttest = hidlVec2KmKeyBlob(keyToAttest);
- auto kmAttestParams = hidlParams2KmParamSet(attestParams);
-
- auto rc = keymaster_device_->attest_key(keymaster_device_, &kmKeyToAttest, &kmAttestParams,
- &cert_chain);
-
- if (rc == KM_ERROR_OK) {
- resultCertChain = kmCertChain2Hidl(&cert_chain);
- }
-
- _hidl_cb(legacy_enum_conversion(rc), resultCertChain);
-
- keymaster_free_cert_chain(&cert_chain);
-
- return Void();
-}
-
-Return<void> KeymasterDevice::upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade,
- const hidl_vec<KeyParameter>& upgradeParams,
- upgradeKey_cb _hidl_cb) {
-
- // result variables for the wire
- hidl_vec<uint8_t> resultKeyBlob;
-
- // result variables the backend understands
- keymaster_key_blob_t key_blob{nullptr, 0};
-
- auto kmKeyBlobToUpgrade = hidlVec2KmKeyBlob(keyBlobToUpgrade);
- auto kmUpgradeParams = hidlParams2KmParamSet(upgradeParams);
-
- auto rc = keymaster_device_->upgrade_key(keymaster_device_, &kmKeyBlobToUpgrade,
- &kmUpgradeParams, &key_blob);
-
- if (rc == KM_ERROR_OK) {
- // on success convert the result to wire format
- resultKeyBlob = kmBlob2hidlVec(key_blob);
- }
-
- _hidl_cb(legacy_enum_conversion(rc), resultKeyBlob);
-
- if (key_blob.key_material) free(const_cast<uint8_t*>(key_blob.key_material));
-
- return Void();
-}
-
-Return<ErrorCode> KeymasterDevice::deleteKey(const hidl_vec<uint8_t>& keyBlob) {
- if (keymaster_device_->delete_key == nullptr) {
- return ErrorCode::UNIMPLEMENTED;
- }
- auto kmKeyBlob = hidlVec2KmKeyBlob(keyBlob);
- auto rc = legacy_enum_conversion(
- keymaster_device_->delete_key(keymaster_device_, &kmKeyBlob));
- // Keymaster 3.0 requires deleteKey to return ErrorCode::OK if the key
- // blob is unusable after the call. This is equally true if the key blob was
- // unusable before.
- if (rc == ErrorCode::INVALID_KEY_BLOB) return ErrorCode::OK;
- return rc;
-}
-
-Return<ErrorCode> KeymasterDevice::deleteAllKeys() {
- if (keymaster_device_->delete_all_keys == nullptr) {
- return ErrorCode::UNIMPLEMENTED;
- }
- return legacy_enum_conversion(keymaster_device_->delete_all_keys(keymaster_device_));
-}
-
-Return<ErrorCode> KeymasterDevice::destroyAttestationIds() {
- return ErrorCode::UNIMPLEMENTED;
-}
-
-Return<void> KeymasterDevice::begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
- const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) {
-
- // result variables for the wire
- hidl_vec<KeyParameter> resultParams;
- uint64_t resultOpHandle = 0;
-
- // result variables the backend understands
- keymaster_key_param_set_t out_params{nullptr, 0};
- keymaster_operation_handle_t& operation_handle = resultOpHandle;
-
- auto kmKey = hidlVec2KmKeyBlob(key);
- auto kmInParams = hidlParams2KmParamSet(inParams);
-
- auto rc = keymaster_device_->begin(keymaster_device_, legacy_enum_conversion(purpose), &kmKey,
- &kmInParams, &out_params, &operation_handle);
-
- if (rc == KM_ERROR_OK) resultParams = kmParamSet2Hidl(out_params);
-
- _hidl_cb(legacy_enum_conversion(rc), resultParams, resultOpHandle);
-
- keymaster_free_param_set(&out_params);
-
- return Void();
-}
-
-Return<void> KeymasterDevice::update(uint64_t operationHandle,
- const hidl_vec<KeyParameter>& inParams,
- const hidl_vec<uint8_t>& input, update_cb _hidl_cb) {
- // result variables for the wire
- uint32_t resultConsumed = 0;
- hidl_vec<KeyParameter> resultParams;
- hidl_vec<uint8_t> resultBlob;
-
- // result variables the backend understands
- size_t consumed = 0;
- keymaster_key_param_set_t out_params{nullptr, 0};
- keymaster_blob_t out_blob{nullptr, 0};
-
- auto kmInParams = hidlParams2KmParamSet(inParams);
- auto kmInput = hidlVec2KmBlob(input);
-
- auto rc = keymaster_device_->update(keymaster_device_, operationHandle, &kmInParams, &kmInput,
- &consumed, &out_params, &out_blob);
-
- if (rc == KM_ERROR_OK) {
- resultConsumed = consumed;
- resultParams = kmParamSet2Hidl(out_params);
- resultBlob = kmBlob2hidlVec(out_blob);
- }
-
- _hidl_cb(legacy_enum_conversion(rc), resultConsumed, resultParams, resultBlob);
-
- keymaster_free_param_set(&out_params);
- if (out_blob.data) free(const_cast<uint8_t*>(out_blob.data));
-
- return Void();
-}
-
-Return<void> KeymasterDevice::finish(uint64_t operationHandle,
- const hidl_vec<KeyParameter>& inParams,
- const hidl_vec<uint8_t>& input,
- const hidl_vec<uint8_t>& signature, finish_cb _hidl_cb) {
- // result variables for the wire
- hidl_vec<KeyParameter> resultParams;
- hidl_vec<uint8_t> resultBlob;
-
- // result variables the backend understands
- keymaster_key_param_set_t out_params{nullptr, 0};
- keymaster_blob_t out_blob{nullptr, 0};
-
- auto kmInParams = hidlParams2KmParamSet(inParams);
- auto kmInput = hidlVec2KmBlob(input);
- auto kmSignature = hidlVec2KmBlob(signature);
-
- auto rc = keymaster_device_->finish(keymaster_device_, operationHandle, &kmInParams, &kmInput,
- &kmSignature, &out_params, &out_blob);
-
- if (rc == KM_ERROR_OK) {
- resultParams = kmParamSet2Hidl(out_params);
- resultBlob = kmBlob2hidlVec(out_blob);
- }
-
- _hidl_cb(legacy_enum_conversion(rc), resultParams, resultBlob);
-
- keymaster_free_param_set(&out_params);
- if (out_blob.data) free(const_cast<uint8_t*>(out_blob.data));
-
- return Void();
-}
-
-Return<ErrorCode> KeymasterDevice::abort(uint64_t operationHandle) {
- return legacy_enum_conversion(keymaster_device_->abort(keymaster_device_, operationHandle));
}
IKeymasterDevice* HIDL_FETCH_IKeymasterDevice(const char* name) {
- keymaster2_device_t* dev = nullptr;
-
ALOGI("Fetching keymaster device name %s", name);
- uint32_t version = -1;
- bool supports_ec = false;
- bool supports_all_digests = false;
-
if (name && strcmp(name, "softwareonly") == 0) {
- dev = (new SoftKeymasterDevice(new SoftwareOnlyHidlKeymasterContext))->keymaster2_device();
+ return ::keymaster::ng::CreateKeymasterDevice();
} else if (name && strcmp(name, "default") == 0) {
- auto rc = keymaster_device_initialize(&dev, &version, &supports_ec, &supports_all_digests);
- if (rc) return nullptr;
+ return createKeymaster3Device();
}
-
- auto kmrc = ::keymaster::ConfigureDevice(dev);
- if (kmrc != KM_ERROR_OK) {
- dev->common.close(&dev->common);
- return nullptr;
- }
-
- return new KeymasterDevice(dev, version, supports_ec, supports_all_digests);
+ return nullptr;
}
} // namespace implementation
diff --git a/keymaster/3.0/default/KeymasterDevice.h b/keymaster/3.0/default/KeymasterDevice.h
index e048d5b..267bf85 100644
--- a/keymaster/3.0/default/KeymasterDevice.h
+++ b/keymaster/3.0/default/KeymasterDevice.h
@@ -18,78 +18,14 @@
#ifndef HIDL_GENERATED_android_hardware_keymaster_V3_0_KeymasterDevice_H_
#define HIDL_GENERATED_android_hardware_keymaster_V3_0_KeymasterDevice_H_
-#include <hardware/keymaster2.h>
-
#include <android/hardware/keymaster/3.0/IKeymasterDevice.h>
-#include <hidl/Status.h>
-#include <hidl/MQDescriptor.h>
namespace android {
namespace hardware {
namespace keymaster {
namespace V3_0 {
namespace implementation {
-using ::android::hardware::keymaster::V3_0::ErrorCode;
-using ::android::hardware::keymaster::V3_0::IKeymasterDevice;
-using ::android::hardware::keymaster::V3_0::KeyCharacteristics;
-using ::android::hardware::keymaster::V3_0::KeyFormat;
-using ::android::hardware::keymaster::V3_0::KeyParameter;
-using ::android::hardware::keymaster::V3_0::KeyPurpose;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::hidl_string;
-using ::android::sp;
-
-class KeymasterDevice : public IKeymasterDevice {
- public:
- KeymasterDevice(keymaster2_device_t* dev, uint32_t hardware_version, bool hardware_supports_ec,
- bool hardware_supports_all_digests)
- : keymaster_device_(dev), hardware_version_(hardware_version),
- hardware_supports_ec_(hardware_supports_ec),
- hardware_supports_all_digests_(hardware_supports_all_digests) {}
- virtual ~KeymasterDevice();
-
- // Methods from ::android::hardware::keymaster::V3_0::IKeymasterDevice follow.
- Return<void> getHardwareFeatures(getHardwareFeatures_cb _hidl_cb);
- Return<ErrorCode> addRngEntropy(const hidl_vec<uint8_t>& data) override;
- Return<void> generateKey(const hidl_vec<KeyParameter>& keyParams,
- generateKey_cb _hidl_cb) override;
- Return<void> getKeyCharacteristics(const hidl_vec<uint8_t>& keyBlob,
- const hidl_vec<uint8_t>& clientId,
- const hidl_vec<uint8_t>& appData,
- getKeyCharacteristics_cb _hidl_cb) override;
- Return<void> importKey(const hidl_vec<KeyParameter>& params, KeyFormat keyFormat,
- const hidl_vec<uint8_t>& keyData, importKey_cb _hidl_cb) override;
- Return<void> exportKey(KeyFormat exportFormat, const hidl_vec<uint8_t>& keyBlob,
- const hidl_vec<uint8_t>& clientId, const hidl_vec<uint8_t>& appData,
- exportKey_cb _hidl_cb) override;
- Return<void> attestKey(const hidl_vec<uint8_t>& keyToAttest,
- const hidl_vec<KeyParameter>& attestParams,
- attestKey_cb _hidl_cb) override;
- Return<void> upgradeKey(const hidl_vec<uint8_t>& keyBlobToUpgrade,
- const hidl_vec<KeyParameter>& upgradeParams,
- upgradeKey_cb _hidl_cb) override;
- Return<ErrorCode> deleteKey(const hidl_vec<uint8_t>& keyBlob) override;
- Return<ErrorCode> deleteAllKeys() override;
- Return<ErrorCode> destroyAttestationIds() override;
- Return<void> begin(KeyPurpose purpose, const hidl_vec<uint8_t>& key,
- const hidl_vec<KeyParameter>& inParams, begin_cb _hidl_cb) override;
- Return<void> update(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
- const hidl_vec<uint8_t>& input, update_cb _hidl_cb) override;
- Return<void> finish(uint64_t operationHandle, const hidl_vec<KeyParameter>& inParams,
- const hidl_vec<uint8_t>& input, const hidl_vec<uint8_t>& signature,
- finish_cb _hidl_cb) override;
- Return<ErrorCode> abort(uint64_t operationHandle) override;
-
- private:
- keymaster2_device_t* keymaster_device_;
- uint32_t hardware_version_;
- bool hardware_supports_ec_;
- bool hardware_supports_all_digests_;
-};
-
extern "C" IKeymasterDevice* HIDL_FETCH_IKeymasterDevice(const char* name);
} // namespace implementation
diff --git a/keymaster/3.0/default/OWNERS b/keymaster/3.0/default/OWNERS
new file mode 100644
index 0000000..335660d
--- /dev/null
+++ b/keymaster/3.0/default/OWNERS
@@ -0,0 +1,2 @@
+jdanis@google.com
+swillden@google.com
diff --git a/keymaster/3.0/vts/OWNERS b/keymaster/3.0/vts/OWNERS
new file mode 100644
index 0000000..d53aadd
--- /dev/null
+++ b/keymaster/3.0/vts/OWNERS
@@ -0,0 +1,4 @@
+jdanis@google.com
+swillden@google.com
+yim@google.com
+ryanjcampbell@google.com
diff --git a/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp b/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp
index ea98264..7948015 100644
--- a/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp
+++ b/keymaster/3.0/vts/functional/keymaster_hidl_hal_test.cpp
@@ -898,13 +898,20 @@
}
}
- void CheckOrigin() {
+ void CheckOrigin(bool asymmetric = false) {
SCOPED_TRACE("CheckOrigin");
if (is_secure_ && supports_symmetric_) {
EXPECT_TRUE(
contains(key_characteristics_.teeEnforced, TAG_ORIGIN, KeyOrigin::IMPORTED));
} else if (is_secure_) {
- EXPECT_TRUE(contains(key_characteristics_.teeEnforced, TAG_ORIGIN, KeyOrigin::UNKNOWN));
+ // wrapped KM0
+ if (asymmetric) {
+ EXPECT_TRUE(
+ contains(key_characteristics_.teeEnforced, TAG_ORIGIN, KeyOrigin::UNKNOWN));
+ } else {
+ EXPECT_TRUE(contains(key_characteristics_.softwareEnforced, TAG_ORIGIN,
+ KeyOrigin::IMPORTED));
+ }
} else {
EXPECT_TRUE(
contains(key_characteristics_.softwareEnforced, TAG_ORIGIN, KeyOrigin::IMPORTED));
@@ -993,8 +1000,8 @@
HidlBuf(app_id));
if (!KeymasterHidlTest::IsSecure()) {
- // SW is KM2
- EXPECT_EQ(att_keymaster_version, 2U);
+ // SW is KM3
+ EXPECT_EQ(att_keymaster_version, 3U);
}
if (KeymasterHidlTest::SupportsSymmetric()) {
@@ -1059,13 +1066,17 @@
class NewKeyGenerationTest : public KeymasterHidlTest {
protected:
- void CheckBaseParams(const KeyCharacteristics& keyCharacteristics) {
+ void CheckBaseParams(const KeyCharacteristics& keyCharacteristics, bool asymmetric = false) {
// TODO(swillden): Distinguish which params should be in which auth list.
AuthorizationSet auths(keyCharacteristics.teeEnforced);
auths.push_back(AuthorizationSet(keyCharacteristics.softwareEnforced));
- EXPECT_TRUE(auths.Contains(TAG_ORIGIN, KeyOrigin::GENERATED));
+ if (!SupportsSymmetric() && asymmetric) {
+ EXPECT_TRUE(auths.Contains(TAG_ORIGIN, KeyOrigin::UNKNOWN));
+ } else {
+ EXPECT_TRUE(auths.Contains(TAG_ORIGIN, KeyOrigin::GENERATED));
+ }
EXPECT_TRUE(auths.Contains(TAG_PURPOSE, KeyPurpose::SIGN));
EXPECT_TRUE(auths.Contains(TAG_PURPOSE, KeyPurpose::VERIFY));
@@ -1114,7 +1125,7 @@
&key_blob, &key_characteristics));
ASSERT_GT(key_blob.size(), 0U);
- CheckBaseParams(key_characteristics);
+ CheckBaseParams(key_characteristics, true /* asymmetric */);
AuthorizationSet crypto_params;
if (IsSecure()) {
@@ -1160,7 +1171,7 @@
.Authorizations(UserAuths()),
&key_blob, &key_characteristics));
ASSERT_GT(key_blob.size(), 0U);
- CheckBaseParams(key_characteristics);
+ CheckBaseParams(key_characteristics, true /* asymmetric */);
AuthorizationSet crypto_params;
if (IsSecure()) {
@@ -1565,7 +1576,9 @@
.Digest(Digest::NONE)
.Padding(PaddingMode::RSA_PKCS1_1_5_SIGN)));
string result;
- EXPECT_EQ(ErrorCode::INVALID_INPUT_LENGTH, Finish(message, &result));
+ ErrorCode finish_error_code = Finish(message, &result);
+ EXPECT_TRUE(finish_error_code == ErrorCode::INVALID_INPUT_LENGTH ||
+ finish_error_code == ErrorCode::INVALID_ARGUMENT);
// Very large message that should exceed the transfer buffer size of any reasonable TEE.
message = string(128 * 1024, 'a');
@@ -1573,7 +1586,9 @@
Begin(KeyPurpose::SIGN, AuthorizationSetBuilder()
.Digest(Digest::NONE)
.Padding(PaddingMode::RSA_PKCS1_1_5_SIGN)));
- EXPECT_EQ(ErrorCode::INVALID_INPUT_LENGTH, Finish(message, &result));
+ finish_error_code = Finish(message, &result);
+ EXPECT_TRUE(finish_error_code == ErrorCode::INVALID_INPUT_LENGTH ||
+ finish_error_code == ErrorCode::INVALID_ARGUMENT);
}
/*
@@ -2355,7 +2370,7 @@
CheckKm0CryptoParam(TAG_RSA_PUBLIC_EXPONENT, 65537U);
CheckKm1CryptoParam(TAG_DIGEST, Digest::SHA_2_256);
CheckKm1CryptoParam(TAG_PADDING, PaddingMode::RSA_PSS);
- CheckOrigin();
+ CheckOrigin(true /* asymmetric */);
string message(1024 / 8, 'a');
auto params = AuthorizationSetBuilder().Digest(Digest::SHA_2_256).Padding(PaddingMode::RSA_PSS);
@@ -2411,7 +2426,7 @@
CheckKm1CryptoParam(TAG_DIGEST, Digest::SHA_2_256);
CheckKm2CryptoParam(TAG_EC_CURVE, EcCurve::P_256);
- CheckOrigin();
+ CheckOrigin(true /* asymmetric */);
string message(32, 'a');
auto params = AuthorizationSetBuilder().Digest(Digest::SHA_2_256);
@@ -2437,7 +2452,7 @@
CheckKm1CryptoParam(TAG_DIGEST, Digest::SHA_2_256);
CheckKm2CryptoParam(TAG_EC_CURVE, EcCurve::P_521);
- CheckOrigin();
+ CheckOrigin(true /* asymmetric */);
string message(32, 'a');
auto params = AuthorizationSetBuilder().Digest(Digest::SHA_2_256);
diff --git a/light/2.0/Android.bp b/light/2.0/Android.bp
index 7cc7f84..f1ce520 100644
--- a/light/2.0/Android.bp
+++ b/light/2.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.light@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0",
+ srcs: [
+ ":android.hardware.light@2.0_hal",
+ ],
+ out: [
+ "android/hardware/light/2.0/ALight.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.light@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0",
+ srcs: [
+ ":android.hardware.light@2.0_hal",
+ ],
+ out: [
+ "android/hardware/light/2.0/ALight.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.light@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.light@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.light@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.light@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.light@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.light@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.light@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.light@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.light@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.light@2.0",
+ "android.hardware.light@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.light@2.0-adapter_genc++"],
+}
diff --git a/media/omx/1.0/Android.bp b/media/omx/1.0/Android.bp
index f8bed6e..7367409 100644
--- a/media/omx/1.0/Android.bp
+++ b/media/omx/1.0/Android.bp
@@ -105,3 +105,99 @@
"android.hardware.media@1.0",
],
}
+
+genrule {
+ name: "android.hardware.media.omx@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.media.omx@1.0",
+ srcs: [
+ ":android.hardware.media.omx@1.0_hal",
+ ],
+ out: [
+ "android/hardware/media/omx/1.0/AGraphicBufferSource.cpp",
+ "android/hardware/media/omx/1.0/AOmx.cpp",
+ "android/hardware/media/omx/1.0/AOmxBufferSource.cpp",
+ "android/hardware/media/omx/1.0/AOmxNode.cpp",
+ "android/hardware/media/omx/1.0/AOmxObserver.cpp",
+ "android/hardware/media/omx/1.0/AOmxStore.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.media.omx@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.media.omx@1.0",
+ srcs: [
+ ":android.hardware.media.omx@1.0_hal",
+ ],
+ out: [
+ "android/hardware/media/omx/1.0/AGraphicBufferSource.h",
+ "android/hardware/media/omx/1.0/AOmx.h",
+ "android/hardware/media/omx/1.0/AOmxBufferSource.h",
+ "android/hardware/media/omx/1.0/AOmxNode.h",
+ "android/hardware/media/omx/1.0/AOmxObserver.h",
+ "android/hardware/media/omx/1.0/AOmxStore.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.media.omx@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.media.omx@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.media.omx@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.media.omx@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.media.omx@1.0",
+ "android.hardware.media@1.0",
+ "android.hardware.graphics.bufferqueue@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.media.omx@1.0",
+ "android.hardware.media@1.0",
+ "android.hardware.graphics.bufferqueue@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.media.omx@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.media.omx@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.media.omx@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.media.omx@1.0",
+ "android.hardware.media@1.0",
+ "android.hardware.media.omx@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.media.omx@1.0-adapter_genc++"],
+}
diff --git a/media/omx/1.0/IOmxStore.hal b/media/omx/1.0/IOmxStore.hal
index a224b0e..3ec0535 100644
--- a/media/omx/1.0/IOmxStore.hal
+++ b/media/omx/1.0/IOmxStore.hal
@@ -39,7 +39,7 @@
* string: arbitrary string
* size: <num>x<num>
* ratio: <num>:<num>
- * range<type>: <type>-<type>
+ * range<type>: <type> | <type>-<type>
* list<type>: <type> | <type>,<list<type>>
*/
struct Attribute {
@@ -97,7 +97,7 @@
*
* Required node attributes for video nodes that are required by Android to
* describe measured values for this device:
- * key: 'measured-frame-rate-<width>-<height>-range',
+ * key: 'measured-frame-rate-<width>x<height>-range',
* value-type: range<num>; where width: num, height: num
*
* Optional node attributes for decoders to describe supported values:
@@ -111,7 +111,7 @@
* Optional node attributes for encoders to describe supported values:
* key: 'complexity-default', value-type: num
* key: 'complexity-range', value-type: range<num>
- * key: 'feature-bitrate-control', value-type: list<enum<VBR,CBR,CQ>>
+ * key: 'feature-bitrate-modes', value-type: list<enum<VBR,CBR,CQ>>
* key: 'feature-intra-refresh', value-type: enum<0,1>
* key: 'quality-default', value-type: num
* key: 'quality-range', value-type: range<num>
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
index 6ea5943..1161444 100644
--- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
+++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp
@@ -15,6 +15,10 @@
*/
#define LOG_TAG "media_omx_hidl_audio_dec_test"
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
#include <android-base/logging.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
@@ -171,7 +175,7 @@
{"mp3", mp3}, {"amrnb", amrnb}, {"amrwb", amrwb},
{"aac", aac}, {"vorbis", vorbis}, {"opus", opus},
{"pcm", pcm}, {"g711alaw", g711alaw}, {"g711mlaw", g711mlaw},
- {"gsm", gsm}, {"raw", raw},
+ {"gsm", gsm}, {"raw", raw}, {"flac", flac},
};
const size_t kNumStringToName =
sizeof(kStringToName) / sizeof(kStringToName[0]);
@@ -204,6 +208,7 @@
{g711mlaw, OMX_AUDIO_CodingG711},
{gsm, OMX_AUDIO_CodingGSMFR},
{raw, OMX_AUDIO_CodingPCM},
+ {flac, OMX_AUDIO_CodingFLAC},
};
static const size_t kNumCompToCoding =
sizeof(kCompToCoding) / sizeof(kCompToCoding[0]);
@@ -219,7 +224,7 @@
framesReceived = 0;
timestampUs = 0;
timestampDevTest = false;
- if (disableTest) std::cerr << "[ ] Warning ! Test Disabled\n";
+ if (disableTest) std::cout << "[ WARN ] Test Disabled \n";
}
virtual void TearDown() override {
@@ -263,9 +268,8 @@
EXPECT_EQ(tsHit, true)
<< "TimeStamp not recognized";
} else {
- std::cerr
- << "[ ] Warning ! Received non-zero "
- "output / TimeStamp not recognized \n";
+ std::cout << "[ INFO ] Received non-zero "
+ "output / TimeStamp not recognized \n";
}
}
}
@@ -301,6 +305,7 @@
g711mlaw,
gsm,
raw,
+ flac,
unknown_comp,
};
@@ -431,6 +436,16 @@
*nSampleRate = param.nSampleRate;
break;
}
+ case OMX_AUDIO_CodingFLAC: {
+ OMX_AUDIO_PARAM_FLACTYPE param;
+ status = getPortParam(omxNode, OMX_IndexParamAudioFlac,
+ kPortIndexInput, ¶m);
+ ASSERT_EQ(status,
+ ::android::hardware::media::omx::V1_0::Status::OK);
+ *nChannels = param.nChannels;
+ *nSampleRate = param.nSampleRate;
+ break;
+ }
default:
ASSERT_TRUE(false);
break;
@@ -472,6 +487,9 @@
"bbb_gsm_1ch_8khz_13kbps.info"},
{AudioDecHidlTest::standardComp::raw, "bbb_raw_1ch_8khz_s32le.raw",
"bbb_raw_1ch_8khz_s32le.info"},
+ {AudioDecHidlTest::standardComp::flac,
+ "bbb_flac_stereo_680kbps_48000hz.flac",
+ "bbb_flac_stereo_680kbps_48000hz.info"},
};
for (size_t i = 0; i < sizeof(kCompToURL) / sizeof(kCompToURL[0]); ++i) {
@@ -628,39 +646,16 @@
AudioDecHidlTest::standardComp comp, bool signalEOS = true) {
android::hardware::media::omx::V1_0::Status status;
Message msg;
-
- // dispatch output buffers
- for (size_t i = 0; i < oBuffer->size(); i++) {
- dispatchOutputBuffer(omxNode, oBuffer, i);
- }
- // dispatch input buffers
+ size_t index;
uint32_t flags = 0;
int frameID = offset;
- for (size_t i = 0; (i < iBuffer->size()) && (frameID < (int)Info->size()) &&
- (frameID < (offset + range));
- i++) {
- char* ipBuffer = static_cast<char*>(
- static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
- ASSERT_LE((*Info)[frameID].bytesCount,
- static_cast<int>((*iBuffer)[i].mMemory->getSize()));
- eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
- ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
- flags = (*Info)[frameID].flags;
- if (signalEOS && ((frameID == (int)Info->size() - 1) ||
- (frameID == (offset + range - 1))))
- flags |= OMX_BUFFERFLAG_EOS;
- dispatchInputBuffer(omxNode, iBuffer, i, (*Info)[frameID].bytesCount,
- flags, (*Info)[frameID].timestamp);
- frameID++;
- }
-
int timeOut = TIMEOUT_COUNTER_Q;
bool iQueued, oQueued;
+
while (1) {
iQueued = oQueued = false;
status =
observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer);
-
// Port Reconfiguration
if (status == android::hardware::media::omx::V1_0::Status::OK &&
msg.type == Message::Type::EVENT) {
@@ -673,7 +668,6 @@
if (frameID == (int)Info->size() || frameID == (offset + range)) break;
// Dispatch input buffer
- size_t index = 0;
if ((index = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
char* ipBuffer = static_cast<char*>(
static_cast<void*>((*iBuffer)[index].mMemory->getPointer()));
@@ -682,6 +676,11 @@
eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
flags = (*Info)[frameID].flags;
+ // Indicate to omx core that the buffer contains a full frame worth
+ // of data
+ flags |= OMX_BUFFERFLAG_ENDOFFRAME;
+ // Indicate the omx core that this is the last buffer it needs to
+ // process
if (signalEOS && ((frameID == (int)Info->size() - 1) ||
(frameID == (offset + range - 1))))
flags |= OMX_BUFFERFLAG_EOS;
@@ -691,10 +690,12 @@
frameID++;
iQueued = true;
}
+ // Dispatch output buffer
if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
dispatchOutputBuffer(omxNode, oBuffer, index);
oQueued = true;
}
+ // Reset Counters when either input or output buffer is dispatched
if (iQueued || oQueued)
timeOut = TIMEOUT_COUNTER_Q;
else
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
index 6267d41..66c4637 100644
--- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
+++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp
@@ -15,6 +15,10 @@
*/
#define LOG_TAG "media_omx_hidl_audio_enc_test"
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
#include <android-base/logging.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
@@ -206,7 +210,7 @@
}
if (i == kNumCompToCoding) disableTest = true;
eosFlag = false;
- if (disableTest) std::cerr << "[ ] Warning ! Test Disabled\n";
+ if (disableTest) std::cout << "[ WARN ] Test Disabled \n";
}
virtual void TearDown() override {
@@ -376,44 +380,25 @@
bool signalEOS = true) {
android::hardware::media::omx::V1_0::Status status;
Message msg;
-
- // dispatch output buffers
- for (size_t i = 0; i < oBuffer->size(); i++) {
- dispatchOutputBuffer(omxNode, oBuffer, i);
- }
- // dispatch input buffers
+ size_t index;
int bytesCount = samplesPerFrame * nChannels * 2;
int32_t timestampIncr =
(int)(((float)samplesPerFrame / nSampleRate) * 1000000);
uint64_t timestamp = 0;
uint32_t flags = 0;
- for (size_t i = 0; i < iBuffer->size() && nFrames != 0; i++) {
- char* ipBuffer = static_cast<char*>(
- static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
- ASSERT_LE(bytesCount,
- static_cast<int>((*iBuffer)[i].mMemory->getSize()));
- eleStream.read(ipBuffer, bytesCount);
- if (eleStream.gcount() != bytesCount) break;
- if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
- dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, flags, timestamp);
- timestamp += timestampIncr;
- nFrames--;
- }
-
int timeOut = TIMEOUT_COUNTER_Q;
bool iQueued, oQueued;
+
while (1) {
iQueued = oQueued = false;
status =
observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer);
-
if (status == android::hardware::media::omx::V1_0::Status::OK)
ASSERT_TRUE(false);
if (nFrames == 0) break;
// Dispatch input buffer
- size_t index = 0;
if ((index = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
char* ipBuffer = static_cast<char*>(
static_cast<void*>((*iBuffer)[index].mMemory->getPointer()));
@@ -421,7 +406,8 @@
static_cast<int>((*iBuffer)[index].mMemory->getSize()));
eleStream.read(ipBuffer, bytesCount);
if (eleStream.gcount() != bytesCount) break;
- if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
+ flags = OMX_BUFFERFLAG_ENDOFFRAME;
+ if (signalEOS && (nFrames == 1)) flags |= OMX_BUFFERFLAG_EOS;
dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, flags,
timestamp);
timestamp += timestampIncr;
@@ -433,6 +419,7 @@
dispatchOutputBuffer(omxNode, oBuffer, index);
oQueued = true;
}
+ // Reset Counters when either input or output buffer is dispatched
if (iQueued || oQueued)
timeOut = TIMEOUT_COUNTER_Q;
else
diff --git a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
index 4c68219..9500094 100644
--- a/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/audio/media_audio_hidl_test_common.cpp
@@ -15,6 +15,10 @@
*/
#define LOG_TAG "media_omx_hidl_audio_test_common"
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
#include <android-base/logging.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
diff --git a/media/omx/1.0/vts/functional/common/Android.bp b/media/omx/1.0/vts/functional/common/Android.bp
index af55e3a..cdc52fb 100644
--- a/media/omx/1.0/vts/functional/common/Android.bp
+++ b/media/omx/1.0/vts/functional/common/Android.bp
@@ -28,6 +28,7 @@
"android.hidl.allocator@1.0",
"android.hidl.memory@1.0",
"android.hardware.media.omx@1.0",
+ "android.hardware.graphics.allocator@2.0",
],
}
@@ -38,6 +39,8 @@
// Link to these statically as they are not guaranteed to be on the device.
static_libs: [
"VtsHalMediaOmxV1_0CommonUtil",
+ "android.hardware.graphics.allocator@2.0",
+ "android.hardware.graphics.mapper@2.0",
"android.hardware.graphics.bufferqueue@1.0",
"android.hardware.graphics.common@1.0",
"android.hardware.media.omx@1.0",
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
index 1ef645c..28616e2 100644
--- 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
@@ -15,13 +15,15 @@
*/
#define LOG_TAG "media_omx_hidl_video_test_common"
-
#ifdef __LP64__
#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
#endif
#include <android-base/logging.h>
+#include <android/hardware/graphics/allocator/2.0/IAllocator.h>
+#include <android/hardware/graphics/mapper/2.0/IMapper.h>
+#include <android/hardware/graphics/mapper/2.0/types.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
#include <android/hardware/media/omx/1.0/IOmxNode.h>
#include <android/hardware/media/omx/1.0/IOmxObserver.h>
@@ -29,7 +31,10 @@
#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;
using ::android::hardware::media::omx::V1_0::IOmx;
using ::android::hardware::media::omx::V1_0::IOmxObserver;
using ::android::hardware::media::omx::V1_0::IOmxNode;
@@ -186,6 +191,73 @@
return status;
}
+void allocateGraphicBuffers(sp<IOmxNode> omxNode, OMX_U32 portIndex,
+ BufferInfo* buffer, uint32_t nFrameWidth,
+ uint32_t nFrameHeight, int32_t* nStride,
+ int format) {
+ 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();
+ ASSERT_NE(nullptr, allocator.get());
+
+ sp<android::hardware::graphics::mapper::V2_0::IMapper> mapper =
+ android::hardware::graphics::mapper::V2_0::IMapper::getService();
+ ASSERT_NE(mapper.get(), nullptr);
+
+ android::hardware::graphics::mapper::V2_0::IMapper::BufferDescriptorInfo
+ descriptorInfo;
+ uint32_t usage;
+
+ descriptorInfo.width = nFrameWidth;
+ descriptorInfo.height = nFrameHeight;
+ descriptorInfo.layerCount = 1;
+ descriptorInfo.format = static_cast<PixelFormat>(format);
+ descriptorInfo.usage = static_cast<uint64_t>(BufferUsage::CPU_READ_OFTEN);
+ omxNode->getGraphicBufferUsage(
+ portIndex,
+ [&status, &usage](android::hardware::media::omx::V1_0::Status _s,
+ uint32_t _n1) {
+ status = _s;
+ usage = _n1;
+ });
+ if (status == android::hardware::media::omx::V1_0::Status::OK) {
+ descriptorInfo.usage |= usage;
+ }
+
+ ::android::hardware::hidl_vec<uint32_t> descriptor;
+ android::hardware::graphics::mapper::V2_0::Error error;
+ mapper->createDescriptor(
+ descriptorInfo, [&error, &descriptor](
+ android::hardware::graphics::mapper::V2_0::Error _s,
+ ::android::hardware::hidl_vec<uint32_t> _n1) {
+ error = _s;
+ descriptor = _n1;
+ });
+ EXPECT_EQ(error, android::hardware::graphics::mapper::V2_0::Error::NONE);
+
+ static volatile int32_t nextId = 0;
+ uint64_t id = static_cast<uint64_t>(getpid()) << 32;
+ allocator->allocate(
+ descriptor, 1,
+ [&](android::hardware::graphics::mapper::V2_0::Error _s, uint32_t _n1,
+ const ::android::hardware::hidl_vec<
+ ::android::hardware::hidl_handle>& _n2) {
+ ASSERT_EQ(android::hardware::graphics::mapper::V2_0::Error::NONE,
+ _s);
+ *nStride = _n1;
+ buffer->omxBuffer.nativeHandle = _n2[0];
+ buffer->omxBuffer.attr.anwBuffer.width = nFrameWidth;
+ buffer->omxBuffer.attr.anwBuffer.height = nFrameHeight;
+ buffer->omxBuffer.attr.anwBuffer.stride = _n1;
+ buffer->omxBuffer.attr.anwBuffer.format = descriptorInfo.format;
+ buffer->omxBuffer.attr.anwBuffer.usage = descriptorInfo.usage;
+ buffer->omxBuffer.attr.anwBuffer.layerCount =
+ descriptorInfo.layerCount;
+ buffer->omxBuffer.attr.anwBuffer.id =
+ id | static_cast<uint32_t>(android_atomic_inc(&nextId));
+ });
+}
+
// allocate buffers needed on a component port
void allocateBuffer(sp<IOmxNode> omxNode, BufferInfo* buffer, OMX_U32 portIndex,
OMX_U32 nBufferSize, PortMode portMode) {
@@ -243,13 +315,32 @@
buffer->id = id;
});
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ } else if (portMode == PortMode::PRESET_ANW_BUFFER) {
+ OMX_PARAM_PORTDEFINITIONTYPE portDef;
+ status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex,
+ &portDef);
+ int32_t nStride;
+ buffer->owner = client;
+ buffer->omxBuffer.type = CodecBuffer::Type::ANW_BUFFER;
+ allocateGraphicBuffers(omxNode, portIndex, buffer,
+ portDef.format.video.nFrameWidth,
+ portDef.format.video.nFrameHeight, &nStride,
+ portDef.format.video.eColorFormat);
+ omxNode->useBuffer(
+ portIndex, buffer->omxBuffer,
+ [&status, &buffer](android::hardware::media::omx::V1_0::Status _s,
+ uint32_t id) {
+ status = _s;
+ buffer->id = id;
+ });
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
}
}
// allocate buffers needed on a component port
void allocatePortBuffers(sp<IOmxNode> omxNode,
android::Vector<BufferInfo>* buffArray,
- OMX_U32 portIndex, PortMode portMode) {
+ OMX_U32 portIndex, PortMode portMode, bool allocGrap) {
android::hardware::media::omx::V1_0::Status status;
OMX_PARAM_PORTDEFINITIONTYPE portDef;
@@ -263,6 +354,13 @@
BufferInfo buffer;
allocateBuffer(omxNode, &buffer, portIndex, portDef.nBufferSize,
portMode);
+ if (allocGrap && portMode == PortMode::DYNAMIC_ANW_BUFFER) {
+ int32_t nStride;
+ allocateGraphicBuffers(omxNode, portIndex, &buffer,
+ portDef.format.video.nFrameWidth,
+ portDef.format.video.nFrameHeight, &nStride,
+ portDef.format.video.eColorFormat);
+ }
buffArray->push(buffer);
}
}
@@ -274,7 +372,7 @@
android::Vector<BufferInfo>* iBuffer,
android::Vector<BufferInfo>* oBuffer,
OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
- PortMode* portMode) {
+ PortMode* portMode, bool allocGrap) {
android::hardware::media::omx::V1_0::Status status;
Message msg;
PortMode defaultPortMode[2], *pm;
@@ -293,14 +391,14 @@
ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
// allocate buffers on input port
- allocatePortBuffers(omxNode, iBuffer, kPortIndexInput, pm[0]);
+ allocatePortBuffers(omxNode, iBuffer, kPortIndexInput, pm[0], allocGrap);
// Dont switch states until the ports are populated
status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT);
// allocate buffers on output port
- allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput, pm[1]);
+ allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput, pm[1], allocGrap);
// As the ports are populated, check if the state transition is complete
status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer);
@@ -440,6 +538,7 @@
status =
omxNode->fillBuffer((*buffArray)[bufferIndex].id, t, fenceNh);
break;
+ case PortMode::PRESET_ANW_BUFFER:
case PortMode::PRESET_SECURE_BUFFER:
case PortMode::PRESET_BYTE_BUFFER:
t.sharedMemory = android::hardware::hidl_memory();
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 94a0194..de043b2 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
@@ -126,13 +126,14 @@
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;
+ if (callBack) callBack(*it, nullptr);
it = msgQueue.erase(it);
// OMX_EventBufferFlag event is sent when the component has
// processed a buffer with its EOS flag set. This event is
@@ -302,13 +303,15 @@
void allocatePortBuffers(sp<IOmxNode> omxNode,
android::Vector<BufferInfo>* buffArray,
OMX_U32 portIndex,
- PortMode portMode = PortMode::PRESET_BYTE_BUFFER);
+ PortMode portMode = PortMode::PRESET_BYTE_BUFFER,
+ bool allocGrap = false);
void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
android::Vector<BufferInfo>* iBuffer,
android::Vector<BufferInfo>* oBuffer,
OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput,
- PortMode* portMode = nullptr);
+ PortMode* portMode = nullptr,
+ bool allocGrap = false);
void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
android::Vector<BufferInfo>* iBuffer,
diff --git a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
index d88d444..5d0ac35 100644
--- a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
+++ b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp
@@ -15,6 +15,10 @@
*/
#define LOG_TAG "media_omx_hidl_component_test"
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
#include <android-base/logging.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
@@ -181,7 +185,7 @@
strlen(gEnv->getComponent().c_str()) - suffixLen,
".secure");
}
- if (disableTest) std::cerr << "[ ] Warning ! Test Disabled\n";
+ if (disableTest) std::cout << "[ WARN ] Test Disabled \n";
}
virtual void TearDown() override {
@@ -350,7 +354,7 @@
}
// get/set default port settings of a component
-TEST_F(ComponentHidlTest, SetDefaultPortParams) {
+TEST_F(ComponentHidlTest, DISABLED_SetDefaultPortParams) {
description(
"Test Component on Mandatory Port Parameters (Port Definition)");
if (disableTest) return;
@@ -397,14 +401,44 @@
EXPECT_NE(status,
::android::hardware::media::omx::V1_0::Status::OK);
- // Edit Read-Only fields.
+ // Port Direction - Read Only
portDef = mirror;
portDef.eDir = static_cast<OMX_DIRTYPE>(RANDOM_INDEX);
setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
- EXPECT_EQ(portDef.eDir, mirror.eDir);
+ if (portDef.eDir != mirror.eDir) {
+ std::cerr << "[ ERROR ] port direction has to be read only "
+ "but is changeable \n";
+ }
setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror);
+ // Port Min BufferCount - Read Only
+ portDef = mirror;
+ portDef.nBufferCountMin += 1;
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ if (portDef.nBufferCountMin != mirror.nBufferCountMin) {
+ std::cerr << "[ ERROR ] port Min BufferCount has to be "
+ "read only but is changeable \n";
+ }
+ EXPECT_EQ(portDef.nBufferCountMin, mirror.nBufferCountMin);
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror);
+
+ // Port Actual BufferCount
+ portDef = mirror;
+ portDef.nBufferCountActual += 1;
+ status = setPortParam(omxNode, OMX_IndexParamPortDefinition, i,
+ &portDef);
+ if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+ status = getPortParam(omxNode, OMX_IndexParamPortDefinition, i,
+ &portDef);
+ EXPECT_EQ(portDef.nBufferCountActual,
+ mirror.nBufferCountActual + 1);
+ }
+
+ // Port BufferSize is although read only as per OMX-IL 1.2, android
+ // doesnt abide by this.
+ // Decrease buffer size
portDef = mirror;
OMX_U32 nBufferSize = portDef.nBufferSize >> 1;
if (nBufferSize != 0) {
@@ -428,43 +462,21 @@
(compClass == video_decoder && i == kPortIndexInput)) {
double dev = (portDef.nBufferSize / (double)nBufferSize);
dev -= 1;
- if (dev < 0 || dev > 0.1) EXPECT_TRUE(false);
+ if (dev < 0 || dev > 0.1) {
+ std::cerr << "[ ERROR ] port buffer size deviation "
+ "larger than expected \n";
+ }
} else {
EXPECT_EQ(portDef.nBufferSize, mirror.nBufferSize);
}
setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror);
- portDef = mirror;
- portDef.nBufferCountMin += 1;
- setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
- getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
- EXPECT_EQ(portDef.nBufferCountMin, mirror.nBufferCountMin);
- setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror);
-
- portDef = mirror;
- portDef.nBufferCountActual += 1;
- status = setPortParam(omxNode, OMX_IndexParamPortDefinition, i,
- &portDef);
- if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition, i,
- &portDef);
- EXPECT_EQ(portDef.nBufferCountActual,
- mirror.nBufferCountActual + 1);
- }
-
+ // Increase buffer size
portDef = mirror;
portDef.nBufferSize = mirror.nBufferSize << 1;
- status = setPortParam(omxNode, OMX_IndexParamPortDefinition, i,
- &portDef);
- if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition, i,
- &portDef);
- if (portDef.nBufferSize != mirror.nBufferSize) {
- std::cout
- << "[ ] Warning ! Component input port does "
- "not preserve Read-Only fields \n";
- }
- }
+ setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ getPortParam(omxNode, OMX_IndexParamPortDefinition, i, &portDef);
+ EXPECT_EQ(portDef.nBufferSize, (mirror.nBufferSize << 1));
}
}
}
@@ -583,6 +595,109 @@
kPortIndexInput, kPortIndexOutput);
}
+// Flush test - monkeying
+TEST_F(ComponentHidlTest, Flush_M) {
+ description("Test Flush monkeying");
+ if (disableTest) return;
+ android::hardware::media::omx::V1_0::Status status;
+ uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+ Message msg;
+
+ status = setRole(omxNode, gEnv->getRole().c_str());
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ OMX_PORT_PARAM_TYPE params;
+ if (compClass == audio_decoder || compClass == audio_encoder) {
+ status = getParam(omxNode, OMX_IndexParamAudioInit, ¶ms);
+ } else {
+ status = getParam(omxNode, OMX_IndexParamVideoInit, ¶ms);
+ }
+ if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+ ASSERT_EQ(params.nPorts, 2U);
+ kPortIndexInput = params.nStartPortNumber;
+ kPortIndexOutput = kPortIndexInput + 1;
+ }
+
+ android::Vector<BufferInfo> iBuffer, oBuffer;
+
+ // set port mode
+ PortMode portMode[2];
+ initPortMode(portMode, isSecure, compClass);
+ status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+
+ // // Flush all ports ; receive error OMX_ErrorIncorrectStateOperation
+ // status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
+ // OMX_ALL);
+ // ASSERT_NE(status, android::hardware::media::omx::V1_0::Status::OK);
+
+ // set state to idle
+ changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+ kPortIndexInput, kPortIndexOutput, portMode);
+
+ // // Flush all ports ; receive error OMX_ErrorIncorrectStateOperation
+ // status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
+ // OMX_ALL);
+ // ASSERT_NE(status, android::hardware::media::omx::V1_0::Status::OK);
+
+ // set state to executing
+ changeStateIdletoExecute(omxNode, observer);
+ // dispatch buffers
+ for (size_t i = 0; i < oBuffer.size(); i++) {
+ dispatchOutputBuffer(omxNode, &oBuffer, i, portMode[1]);
+ }
+
+ // // flush invalid port, expecting OMX_ErrorBadPortIndex
+ // status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush),
+ // RANDOM_INDEX);
+ // ASSERT_NE(status, android::hardware::media::omx::V1_0::Status::OK);
+
+ // Flush all ports
+ status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush), OMX_ALL);
+ ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+
+ for (int j = 0; j < 2; j++) {
+ status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_PE, &iBuffer,
+ &oBuffer);
+ ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK);
+ ASSERT_EQ(msg.type, Message::Type::EVENT);
+ ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+ ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
+ if (msg.data.eventData.data2 == kPortIndexInput) {
+ // test if client got all its buffers back
+ for (size_t i = 0; i < iBuffer.size(); ++i) {
+ EXPECT_EQ(iBuffer[i].owner, client);
+ }
+ } else if (msg.data.eventData.data2 == kPortIndexOutput) {
+ // test if client got all its buffers back
+ for (size_t i = 0; i < oBuffer.size(); ++i) {
+ EXPECT_EQ(oBuffer[i].owner, client);
+ }
+ } else {
+ EXPECT_TRUE(false) << "Bad port Index";
+ }
+ }
+
+ // SPECIAL CASE: When OMX_ALL is used as argument, Android OMX Core sends
+ // an additional flush event with argument OMX_ALL. This we believe is
+ // not recognized by OMX-IL Spec. So read this event and ignore it
+ status =
+ observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_PE, &iBuffer, &oBuffer);
+ if (status == android::hardware::media::omx::V1_0::Status::OK) {
+ ASSERT_EQ(msg.type, Message::Type::EVENT);
+ ASSERT_EQ(msg.data.eventData.event, OMX_EventCmdComplete);
+ ASSERT_EQ(msg.data.eventData.data1, OMX_CommandFlush);
+ ASSERT_EQ(msg.data.eventData.data2, OMX_ALL);
+ }
+
+ // set state to idle
+ changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+ // set state to loaded
+ changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+ kPortIndexInput, kPortIndexOutput);
+}
+
// test port mode configuration when the component is in various states
TEST_F(ComponentHidlTest, PortModeConfig) {
description("Test Port Mode Configuration");
diff --git a/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp b/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp
index e8f5f77..7cffea8 100644
--- a/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp
+++ b/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp
@@ -15,6 +15,10 @@
*/
#define LOG_TAG "media_omx_hidl_master_test"
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
#include <android-base/logging.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
diff --git a/media/omx/1.0/vts/functional/video/Android.bp b/media/omx/1.0/vts/functional/video/Android.bp
index e251a15..f0da2b3 100644
--- a/media/omx/1.0/vts/functional/video/Android.bp
+++ b/media/omx/1.0/vts/functional/video/Android.bp
@@ -21,10 +21,6 @@
"VtsHalMediaOmxV1_0TargetVideoDecTest.cpp",
"media_video_hidl_test_common.cpp"
],
- static_libs: [
- "android.hardware.graphics.allocator@2.0",
- "android.hardware.graphics.mapper@2.0",
- ],
}
cc_test {
@@ -36,6 +32,5 @@
],
static_libs: [
"libnativewindow",
- "android.hardware.graphics.mapper@2.0",
],
}
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 a5b5524..3e09353 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp
@@ -15,11 +15,12 @@
*/
#define LOG_TAG "media_omx_hidl_video_dec_test"
+#ifdef __LP64__
+#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
+#endif
+
#include <android-base/logging.h>
-#include <android/hardware/graphics/allocator/2.0/IAllocator.h>
-#include <android/hardware/graphics/mapper/2.0/IMapper.h>
-#include <android/hardware/graphics/mapper/2.0/types.h>
#include <android/hardware/media/omx/1.0/IOmx.h>
#include <android/hardware/media/omx/1.0/IOmxNode.h>
#include <android/hardware/media/omx/1.0/IOmxObserver.h>
@@ -27,10 +28,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;
using ::android::hardware::media::omx::V1_0::IOmx;
using ::android::hardware::media::omx::V1_0::IOmxObserver;
using ::android::hardware::media::omx::V1_0::IOmxNode;
@@ -219,6 +217,7 @@
timestampUs = 0;
timestampDevTest = false;
isSecure = false;
+ portSettingsChange = false;
size_t suffixLen = strlen(".secure");
if (strlen(gEnv->getComponent().c_str()) >= suffixLen) {
isSecure =
@@ -227,7 +226,7 @@
".secure");
}
if (isSecure) disableTest = true;
- if (disableTest) std::cout << "[ ] Warning ! Test Disabled\n";
+ if (disableTest) std::cout << "[ WARN ] Test Disabled \n";
}
virtual void TearDown() override {
@@ -271,9 +270,8 @@
EXPECT_EQ(tsHit, true)
<< "TimeStamp not recognized";
} else {
- std::cout
- << "[ ] Warning ! Received non-zero "
- "output / TimeStamp not recognized \n";
+ std::cout << "[ INFO ] Received non-zero "
+ "output / TimeStamp not recognized \n";
}
}
}
@@ -295,6 +293,13 @@
}
#endif
}
+ } else if (msg.type == Message::Type::EVENT) {
+ if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
+ if ((msg.data.eventData.data2 == OMX_IndexParamPortDefinition ||
+ msg.data.eventData.data2 == 0)) {
+ portSettingsChange = true;
+ }
+ }
}
}
@@ -322,6 +327,7 @@
::android::List<uint64_t> timestampUslist;
bool timestampDevTest;
bool isSecure;
+ bool portSettingsChange;
protected:
static void description(const std::string& description) {
@@ -369,122 +375,61 @@
}
}
+// number of elementary streams per component
+#define STREAM_COUNT 2
// LookUpTable of clips and metadata for component testing
void GetURLForComponent(VideoDecHidlTest::standardComp comp, char* mURL,
- char* info) {
+ char* info, size_t streamIndex = 1) {
struct CompToURL {
VideoDecHidlTest::standardComp comp;
- const char* mURL;
- const char* info;
+ const char mURL[STREAM_COUNT][512];
+ const char info[STREAM_COUNT][512];
};
+ ASSERT_TRUE(streamIndex < STREAM_COUNT);
+
static const CompToURL kCompToURL[] = {
{VideoDecHidlTest::standardComp::avc,
- "bbb_avc_1920x1080_5000kbps_30fps.h264",
- "bbb_avc_1920x1080_5000kbps_30fps.info"},
+ {"bbb_avc_176x144_300kbps_60fps.h264",
+ "bbb_avc_1920x1080_5000kbps_30fps.h264"},
+ {"bbb_avc_176x144_300kbps_60fps.info",
+ "bbb_avc_1920x1080_5000kbps_30fps.info"}},
{VideoDecHidlTest::standardComp::hevc,
- "bbb_hevc_640x360_1600kbps_30fps.hevc",
- "bbb_hevc_640x360_1600kbps_30fps.info"},
+ {"bbb_hevc_176x144_176kbps_60fps.hevc",
+ "bbb_hevc_640x360_1600kbps_30fps.hevc"},
+ {"bbb_hevc_176x144_176kbps_60fps.info",
+ "bbb_hevc_640x360_1600kbps_30fps.info"}},
{VideoDecHidlTest::standardComp::mpeg2,
- "bbb_mpeg2_176x144_105kbps_25fps.m2v",
- "bbb_mpeg2_176x144_105kbps_25fps.info"},
+ {"bbb_mpeg2_176x144_105kbps_25fps.m2v",
+ "bbb_mpeg2_352x288_1mbps_60fps.m2v"},
+ {"bbb_mpeg2_176x144_105kbps_25fps.info",
+ "bbb_mpeg2_352x288_1mbps_60fps.info"}},
{VideoDecHidlTest::standardComp::h263,
- "bbb_h263_352x288_300kbps_12fps.h263",
- "bbb_h263_352x288_300kbps_12fps.info"},
+ {"", "bbb_h263_352x288_300kbps_12fps.h263"},
+ {"", "bbb_h263_352x288_300kbps_12fps.info"}},
{VideoDecHidlTest::standardComp::mpeg4,
- "bbb_mpeg4_1280x720_1000kbps_25fps.m4v",
- "bbb_mpeg4_1280x720_1000kbps_25fps.info"},
- {VideoDecHidlTest::standardComp::vp8, "bbb_vp8_640x360_2mbps_30fps.vp8",
- "bbb_vp8_640x360_2mbps_30fps.info"},
+ {"", "bbb_mpeg4_1280x720_1000kbps_25fps.m4v"},
+ {"", "bbb_mpeg4_1280x720_1000kbps_25fps.info"}},
+ {VideoDecHidlTest::standardComp::vp8,
+ {"bbb_vp8_176x144_240kbps_60fps.vp8",
+ "bbb_vp8_640x360_2mbps_30fps.vp8"},
+ {"bbb_vp8_176x144_240kbps_60fps.info",
+ "bbb_vp8_640x360_2mbps_30fps.info"}},
{VideoDecHidlTest::standardComp::vp9,
- "bbb_vp9_640x360_1600kbps_30fps.vp9",
- "bbb_vp9_640x360_1600kbps_30fps.info"},
+ {"bbb_vp9_176x144_285kbps_60fps.vp9",
+ "bbb_vp9_640x360_1600kbps_30fps.vp9"},
+ {"bbb_vp9_176x144_285kbps_60fps.info",
+ "bbb_vp9_640x360_1600kbps_30fps.info"}},
};
for (size_t i = 0; i < sizeof(kCompToURL) / sizeof(kCompToURL[0]); ++i) {
if (kCompToURL[i].comp == comp) {
- strcat(mURL, kCompToURL[i].mURL);
- strcat(info, kCompToURL[i].info);
+ strcat(mURL, kCompToURL[i].mURL[streamIndex]);
+ strcat(info, kCompToURL[i].info[streamIndex]);
return;
}
}
}
-void allocateGraphicBuffers(sp<IOmxNode> omxNode, OMX_U32 portIndex,
- android::Vector<BufferInfo>* buffArray,
- uint32_t nFrameWidth, uint32_t nFrameHeight,
- 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();
- ASSERT_NE(nullptr, allocator.get());
-
- sp<android::hardware::graphics::mapper::V2_0::IMapper> mapper =
- android::hardware::graphics::mapper::V2_0::IMapper::getService();
- ASSERT_NE(mapper.get(), nullptr);
-
- android::hardware::graphics::mapper::V2_0::IMapper::BufferDescriptorInfo
- descriptorInfo;
- uint32_t usage;
-
- descriptorInfo.width = nFrameWidth;
- descriptorInfo.height = nFrameHeight;
- descriptorInfo.layerCount = 1;
- descriptorInfo.format = static_cast<PixelFormat>(format);
- descriptorInfo.usage = static_cast<uint64_t>(BufferUsage::CPU_READ_OFTEN);
- omxNode->getGraphicBufferUsage(
- portIndex,
- [&status, &usage](android::hardware::media::omx::V1_0::Status _s,
- uint32_t _n1) {
- status = _s;
- usage = _n1;
- });
- if (status == android::hardware::media::omx::V1_0::Status::OK) {
- descriptorInfo.usage |= usage;
- }
-
- ::android::hardware::hidl_vec<uint32_t> descriptor;
- android::hardware::graphics::mapper::V2_0::Error error;
- mapper->createDescriptor(
- descriptorInfo, [&error, &descriptor](
- android::hardware::graphics::mapper::V2_0::Error _s,
- ::android::hardware::hidl_vec<uint32_t> _n1) {
- error = _s;
- descriptor = _n1;
- });
- 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,
- const ::android::hardware::hidl_vec<
- ::android::hardware::hidl_handle>& _n2) {
- ASSERT_EQ(android::hardware::graphics::mapper::V2_0::Error::NONE,
- _s);
- *nStride = _n1;
- ASSERT_EQ(count, _n2.size());
- for (uint32_t i = 0; i < count; i++) {
- buffArray->editItemAt(i).omxBuffer.nativeHandle = _n2[i];
- buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.width =
- nFrameWidth;
- buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.height =
- nFrameHeight;
- buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.stride = _n1;
- buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.format =
- descriptorInfo.format;
- buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.usage =
- descriptorInfo.usage;
- buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.layerCount =
- descriptorInfo.layerCount;
- buffArray->editItemAt(i).omxBuffer.attr.anwBuffer.id =
- id | static_cast<uint32_t>(android_atomic_inc(&nextId));
- }
- });
-}
-
// port settings reconfiguration during runtime. reconfigures frame dimensions
void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
android::Vector<BufferInfo>* iBuffer,
@@ -568,22 +513,7 @@
android::hardware::media::omx::V1_0::Status::TIMED_OUT);
allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput,
- oPortMode);
- if (oPortMode != PortMode::PRESET_BYTE_BUFFER) {
- OMX_PARAM_PORTDEFINITIONTYPE portDef;
-
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexOutput, &portDef);
- ASSERT_EQ(
- status,
- ::android::hardware::media::omx::V1_0::Status::OK);
- allocateGraphicBuffers(omxNode, kPortIndexOutput, oBuffer,
- portDef.format.video.nFrameWidth,
- portDef.format.video.nFrameHeight,
- &portDef.format.video.nStride,
- portDef.format.video.eColorFormat,
- portDef.nBufferCountActual);
- }
+ oPortMode, true);
status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
iBuffer, oBuffer);
ASSERT_EQ(status,
@@ -611,14 +541,14 @@
}
} else if (msg.data.eventData.data2 ==
OMX_IndexConfigCommonOutputCrop) {
- std::cout << "[ ] Warning ! OMX_EventPortSettingsChanged/ "
+ std::cout << "[ INFO ] OMX_EventPortSettingsChanged/ "
"OMX_IndexConfigCommonOutputCrop not handled \n";
} else if (msg.data.eventData.data2 == OMX_IndexVendorStartUnused + 3) {
- std::cout << "[ ] Warning ! OMX_EventPortSettingsChanged/ "
+ std::cout << "[ INFO ] OMX_EventPortSettingsChanged/ "
"kDescribeColorAspectsIndex not handled \n";
}
} else if (msg.data.eventData.event == OMX_EventError) {
- std::cout << "[ ] Warning ! OMX_EventError/ "
+ std::cerr << "[ ERROR ] OMX_EventError/ "
"Decode Frame Call might be failed \n";
return;
} else {
@@ -674,39 +604,16 @@
bool signalEOS = true) {
android::hardware::media::omx::V1_0::Status status;
Message msg;
-
- // dispatch output buffers
- for (size_t i = 0; i < oBuffer->size(); i++) {
- dispatchOutputBuffer(omxNode, oBuffer, i, oPortMode);
- }
- // dispatch input buffers
+ size_t index;
uint32_t flags = 0;
int frameID = offset;
- for (size_t i = 0; (i < iBuffer->size()) && (frameID < (int)Info->size()) &&
- (frameID < (offset + range));
- i++) {
- char* ipBuffer = static_cast<char*>(
- static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
- ASSERT_LE((*Info)[frameID].bytesCount,
- static_cast<int>((*iBuffer)[i].mMemory->getSize()));
- eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
- ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
- flags = (*Info)[frameID].flags;
- if (signalEOS && ((frameID == (int)Info->size() - 1) ||
- (frameID == (offset + range - 1))))
- flags |= OMX_BUFFERFLAG_EOS;
- dispatchInputBuffer(omxNode, iBuffer, i, (*Info)[frameID].bytesCount,
- flags, (*Info)[frameID].timestamp);
- frameID++;
- }
-
int timeOut = TIMEOUT_COUNTER_Q;
bool iQueued, oQueued;
+
while (1) {
iQueued = oQueued = false;
status =
observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer);
-
// Port Reconfiguration
if (status == android::hardware::media::omx::V1_0::Status::OK &&
msg.type == Message::Type::EVENT) {
@@ -718,7 +625,6 @@
if (frameID == (int)Info->size() || frameID == (offset + range)) break;
// Dispatch input buffer
- size_t index = 0;
if ((index = getEmptyBufferID(iBuffer)) < iBuffer->size()) {
char* ipBuffer = static_cast<char*>(
static_cast<void*>((*iBuffer)[index].mMemory->getPointer()));
@@ -727,6 +633,11 @@
eleStream.read(ipBuffer, (*Info)[frameID].bytesCount);
ASSERT_EQ(eleStream.gcount(), (*Info)[frameID].bytesCount);
flags = (*Info)[frameID].flags;
+ // Indicate to omx core that the buffer contains a full frame worth
+ // of data
+ flags |= OMX_BUFFERFLAG_ENDOFFRAME;
+ // Indicate the omx core that this is the last buffer it needs to
+ // process
if (signalEOS && ((frameID == (int)Info->size() - 1) ||
(frameID == (offset + range - 1))))
flags |= OMX_BUFFERFLAG_EOS;
@@ -736,10 +647,12 @@
frameID++;
iQueued = true;
}
+ // Dispatch output buffer
if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
dispatchOutputBuffer(omxNode, oBuffer, index, oPortMode);
oQueued = true;
}
+ // Reset Counters when either input or output buffer is dispatched
if (iQueued || oQueued)
timeOut = TIMEOUT_COUNTER_Q;
else
@@ -944,6 +857,20 @@
status = setPortBufferSize(omxNode, kPortIndexInput, maxBytesCount);
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ // Change the port modes arbitrarily at the start before finialising on the
+ // desired values.
+ PortMode dummyPM[] = {
+ PortMode::PRESET_BYTE_BUFFER, PortMode::PRESET_ANW_BUFFER,
+ PortMode::PRESET_SECURE_BUFFER, PortMode::DYNAMIC_ANW_BUFFER,
+ PortMode::DYNAMIC_NATIVE_HANDLE,
+ };
+ for (size_t k = 0; k < sizeof(dummyPM) / sizeof(dummyPM[0]); k++) {
+ // ports may or may not support these modes. These are not the final
+ // values. This init is done to test if causes any problems.
+ status = omxNode->setPortMode(kPortIndexInput, dummyPM[k]);
+ status = omxNode->setPortMode(kPortIndexOutput, dummyPM[k]);
+ }
+
// set port mode
portMode[0] = PortMode::PRESET_BYTE_BUFFER;
portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
@@ -972,30 +899,14 @@
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;
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
- kPortIndexInput, kPortIndexOutput, portMode);
+ kPortIndexInput, kPortIndexOutput, portMode, true);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
- if (portMode[1] != PortMode::PRESET_BYTE_BUFFER) {
- OMX_PARAM_PORTDEFINITIONTYPE portDef;
-
- status = getPortParam(omxNode, OMX_IndexParamPortDefinition,
- kPortIndexOutput, &portDef);
- ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
- allocateGraphicBuffers(
- omxNode, kPortIndexOutput, &oBuffer,
- portDef.format.video.nFrameWidth, portDef.format.video.nFrameHeight,
- &portDef.format.video.nStride, portDef.format.video.eColorFormat,
- portDef.nBufferCountActual);
- }
-
// Port Reconfiguration
eleStream.open(mURL, std::ifstream::binary);
ASSERT_EQ(eleStream.is_open(), true);
@@ -1015,6 +926,148 @@
kPortIndexInput, kPortIndexOutput);
}
+// Test for adaptive playback support
+TEST_F(VideoDecHidlTest, AdaptivePlaybackTest) {
+ description("Tests for Adaptive Playback support");
+ if (disableTest) return;
+ if (!(compName == avc || compName == hevc || compName == vp8 ||
+ compName == vp9 || compName == mpeg2))
+ return;
+ android::hardware::media::omx::V1_0::Status status;
+ uint32_t kPortIndexInput = 0, kPortIndexOutput = 1;
+ status = setRole(omxNode, gEnv->getRole().c_str());
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ OMX_PORT_PARAM_TYPE params;
+ status = getParam(omxNode, OMX_IndexParamVideoInit, ¶ms);
+ if (status == ::android::hardware::media::omx::V1_0::Status::OK) {
+ ASSERT_EQ(params.nPorts, 2U);
+ kPortIndexInput = params.nStartPortNumber;
+ kPortIndexOutput = kPortIndexInput + 1;
+ }
+
+ // set port mode
+ portMode[0] = PortMode::PRESET_BYTE_BUFFER;
+ portMode[1] = PortMode::DYNAMIC_ANW_BUFFER;
+ status = omxNode->setPortMode(kPortIndexInput, portMode[0]);
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ if (status != ::android::hardware::media::omx::V1_0::Status::OK) {
+ portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+ status = omxNode->setPortMode(kPortIndexOutput, portMode[1]);
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ }
+
+ // prepare for adaptive playback
+ uint32_t adaptiveMaxWidth = 320;
+ uint32_t adaptiveMaxHeight = 240;
+ status = omxNode->prepareForAdaptivePlayback(
+ kPortIndexOutput, true, adaptiveMaxWidth, adaptiveMaxHeight);
+ if (strncmp(gEnv->getComponent().c_str(), "OMX.google.", 11) == 0) {
+ // SoftOMX Decoders donot support graphic buffer modes. So for them
+ // support for adaptive play back is mandatory in Byte Buffer mode
+ ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
+ } else {
+ // for vendor codecs, support for adaptive play back is optional
+ // in byte buffer mode.
+ if (portMode[1] == PortMode::PRESET_BYTE_BUFFER) return;
+ if (status != ::android::hardware::media::omx::V1_0::Status::OK) return;
+ }
+
+ // TODO: Handle this better !!!
+ // Without the knowledge of the maximum resolution of the frame to be
+ // decoded it is not possible to choose the size of the input buffer.
+ // The value below is based on the info. files of clips in res folder.
+ status = setPortBufferSize(omxNode, kPortIndexInput, 482304);
+ 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
+ changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
+ kPortIndexInput, kPortIndexOutput, portMode, true);
+ // set state to executing
+ changeStateIdletoExecute(omxNode, observer);
+
+ timestampDevTest = true;
+ uint32_t timestampOffset = 0;
+ for (uint32_t i = 0; i < STREAM_COUNT * 2; i++) {
+ std::ifstream eleStream, eleInfo;
+ char mURL[512], info[512];
+ android::Vector<FrameData> Info;
+ strcpy(mURL, gEnv->getRes().c_str());
+ strcpy(info, gEnv->getRes().c_str());
+ GetURLForComponent(compName, mURL, info, i % STREAM_COUNT);
+ eleInfo.open(info);
+ ASSERT_EQ(eleInfo.is_open(), true);
+ int bytesCount = 0;
+ uint32_t flags = 0;
+ uint32_t timestamp = 0;
+ uint32_t timestampMax = 0;
+ while (1) {
+ if (!(eleInfo >> bytesCount)) break;
+ eleInfo >> flags;
+ eleInfo >> timestamp;
+ timestamp += timestampOffset;
+ Info.push_back({bytesCount, flags, timestamp});
+ if (timestampDevTest && (flags != OMX_BUFFERFLAG_CODECCONFIG))
+ timestampUslist.push_back(timestamp);
+ if (timestampMax < timestamp) timestampMax = timestamp;
+ }
+ timestampOffset = timestampMax;
+ eleInfo.close();
+
+ // Port Reconfiguration
+ eleStream.open(mURL, std::ifstream::binary);
+ ASSERT_EQ(eleStream.is_open(), true);
+ decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput,
+ kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(),
+ portMode[1], false);
+ eleStream.close();
+
+ getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth,
+ &nFrameHeight, &xFramerate);
+ if ((nFrameWidth > adaptiveMaxWidth) ||
+ (nFrameHeight > adaptiveMaxHeight)) {
+ if (nFrameWidth > adaptiveMaxWidth) adaptiveMaxWidth = nFrameWidth;
+ if (nFrameHeight > adaptiveMaxHeight)
+ adaptiveMaxHeight = nFrameHeight;
+ EXPECT_TRUE(portSettingsChange);
+ } else {
+ // In DynamicANW Buffer mode, its ok to do a complete
+ // reconfiguration even if a partial reconfiguration is sufficient.
+ if (portMode[1] != PortMode::DYNAMIC_ANW_BUFFER)
+ EXPECT_FALSE(portSettingsChange);
+ }
+ portSettingsChange = false;
+ }
+ waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer,
+ kPortIndexInput, kPortIndexOutput, portMode[1]);
+ testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode,
+ portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr);
+ if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true);
+ // set state to idle
+ changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer);
+ // set state to executing
+ changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
+ kPortIndexInput, kPortIndexOutput);
+}
+
// end of sequence test
TEST_F(VideoDecHidlTest, EOSTest_M) {
description("Test End of stream monkeying");
@@ -1057,7 +1110,7 @@
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
- kPortIndexInput, kPortIndexOutput, portMode);
+ kPortIndexInput, kPortIndexOutput, portMode, true);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
@@ -1145,7 +1198,7 @@
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
- kPortIndexInput, kPortIndexOutput, portMode);
+ kPortIndexInput, kPortIndexOutput, portMode, true);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
@@ -1233,10 +1286,16 @@
ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK);
// set port mode
+ portMode[0] = PortMode::PRESET_BYTE_BUFFER;
+ portMode[1] = PortMode::PRESET_ANW_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);
+ if (status != ::android::hardware::media::omx::V1_0::Status::OK) {
+ portMode[1] = PortMode::PRESET_BYTE_BUFFER;
+ 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;
@@ -1258,7 +1317,7 @@
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
- kPortIndexInput, kPortIndexOutput, portMode);
+ kPortIndexInput, kPortIndexOutput, portMode, true);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
@@ -1353,7 +1412,7 @@
// set state to idle
changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer,
- kPortIndexInput, kPortIndexOutput, portMode);
+ kPortIndexInput, kPortIndexOutput, portMode, true);
// set state to executing
changeStateIdletoExecute(omxNode, observer);
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
index 23f051d..df90ccc 100644
--- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
+++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp
@@ -237,7 +237,7 @@
".secure");
}
if (isSecure) disableTest = true;
- if (disableTest) std::cerr << "[ ] Warning ! Test Disabled\n";
+ if (disableTest) std::cout << "[ WARN ] Test Disabled \n";
}
virtual void TearDown() override {
@@ -278,9 +278,8 @@
EXPECT_EQ(tsHit, true)
<< "TimeStamp not recognized";
} else {
- std::cerr
- << "[ ] Warning ! Received non-zero "
- "output / TimeStamp not recognized \n";
+ std::cout << "[ INFO ] Received non-zero "
+ "output / TimeStamp not recognized \n";
}
}
}
@@ -442,7 +441,7 @@
status = setPortConfig(omxNode, OMX_IndexConfigVideoIntraVOPRefresh,
portIndex, ¶m);
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr << "[ ] Warning ! unable to request IDR \n";
+ std::cout << "[ INFO ] unable to request IDR \n";
}
// modify bitrate
@@ -453,7 +452,7 @@
status =
setPortConfig(omxNode, OMX_IndexConfigVideoBitrate, portIndex, ¶m);
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr << "[ ] Warning ! unable to change Bitrate \n";
+ std::cout << "[ INFO ] unable to change Bitrate \n";
}
// modify framerate
@@ -465,7 +464,7 @@
status = setPortConfig(omxNode, OMX_IndexConfigVideoFramerate, portIndex,
¶m);
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr << "[ ] Warning ! unable to change Framerate \n";
+ std::cout << "[ INFO ] unable to change Framerate \n";
return status;
}
@@ -479,7 +478,7 @@
(OMX_INDEXTYPE)OMX_IndexConfigAndroidIntraRefresh,
portIndex, ¶m);
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr << "[ ] Warning ! unable to change Refresh Period\n";
+ std::cout << "[ INFO ] unable to change Refresh Period\n";
}
// set intra refresh interval
@@ -505,7 +504,7 @@
status = setPortParam(omxNode, OMX_IndexParamVideoIntraRefresh, portIndex,
¶m);
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr << "[ ] Warning ! unable to set Refresh Period \n";
+ std::cout << "[ INFO ] unable to set Refresh Period \n";
}
void setLatency(sp<IOmxNode> omxNode, OMX_U32 portIndex, uint32_t latency) {
@@ -515,7 +514,7 @@
status = setPortConfig(omxNode, (OMX_INDEXTYPE)OMX_IndexConfigLatency,
portIndex, ¶m);
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr << "[ ] Warning ! unable to set latency\n";
+ std::cout << "[ INFO ] unable to set latency\n";
}
void getLatency(sp<IOmxNode> omxNode, OMX_U32 portIndex, uint32_t* latency) {
@@ -524,7 +523,7 @@
status = getPortConfig(omxNode, (OMX_INDEXTYPE)OMX_IndexConfigLatency,
portIndex, ¶m);
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr << "[ ] Warning ! unable to get latency\n";
+ std::cout << "[ INFO ] unable to get latency\n";
else
*latency = param.nU32;
}
@@ -983,58 +982,25 @@
sp<CodecProducerListener> listener = nullptr) {
android::hardware::media::omx::V1_0::Status status;
Message msg;
- uint32_t ipCount = 0;
+ uint64_t timestamp = 0;
+ uint32_t flags = 0;
+ int timeOut = TIMEOUT_COUNTER_Q;
+ bool iQueued, oQueued;
+ uint32_t ipCount = 0;
if (ipCount == 0) {
status = changeFrameRate(omxNode, portIndexOutput, (24U << 16));
if (status == ::android::hardware::media::omx::V1_0::Status::OK)
xFramerate = (24U << 16);
}
-
- // dispatch output buffers
- for (size_t i = 0; i < oBuffer->size(); i++) {
- dispatchOutputBuffer(omxNode, oBuffer, i);
- }
- // dispatch input buffers
int32_t timestampIncr = (int)((float)1000000 / (xFramerate >> 16));
- // timestamp scale = Nano sec
- if (inputDataIsMeta) timestampIncr *= 1000;
- uint64_t timestamp = 0;
- uint32_t flags = 0;
- for (size_t i = 0; i < iBuffer->size() && nFrames != 0; i++) {
- if (inputDataIsMeta) {
- if (listener->freeBuffers > listener->minUnDequeuedCount) {
- if (dispatchGraphicBuffer(omxNode, producer, listener, iBuffer,
- portIndexInput, eleStream, timestamp))
- break;
- timestamp += timestampIncr;
- nFrames--;
- ipCount++;
- }
- } else {
- char* ipBuffer = static_cast<char*>(
- static_cast<void*>((*iBuffer)[i].mMemory->getPointer()));
- ASSERT_LE(bytesCount,
- static_cast<int>((*iBuffer)[i].mMemory->getSize()));
- if (fillByteBuffer(omxNode, ipBuffer, portIndexInput, eleStream))
- break;
- if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
- dispatchInputBuffer(omxNode, iBuffer, i, bytesCount, flags,
- timestamp);
- if (timestampUslist) timestampUslist->push_back(timestamp);
- timestamp += timestampIncr;
- nFrames--;
- ipCount++;
- }
- }
+ if (inputDataIsMeta) timestampIncr *= 1000; // timestamp scale: Nano sec
- int timeOut = TIMEOUT_COUNTER_Q;
- bool iQueued, oQueued;
while (1) {
iQueued = oQueued = false;
status =
observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer);
-
+ // Port Reconfiguration
if (status == android::hardware::media::omx::V1_0::Status::OK) {
ASSERT_EQ(msg.type, Message::Type::EVENT);
if (msg.data.eventData.event == OMX_EventPortSettingsChanged) {
@@ -1046,7 +1012,7 @@
break;
} else if (msg.data.eventData.event == OMX_EventDataSpaceChanged) {
// TODO: how am i supposed to respond now?
- std::cout << "[ ] Info ! OMX_EventDataSpaceChanged \n";
+ std::cout << "[ INFO ] OMX_EventDataSpaceChanged \n";
} else {
ASSERT_TRUE(false);
}
@@ -1076,7 +1042,8 @@
if (fillByteBuffer(omxNode, ipBuffer, portIndexInput,
eleStream))
break;
- if (signalEOS && (nFrames == 1)) flags = OMX_BUFFERFLAG_EOS;
+ flags = OMX_BUFFERFLAG_ENDOFFRAME;
+ if (signalEOS && (nFrames == 1)) flags |= OMX_BUFFERFLAG_EOS;
dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, flags,
timestamp);
if (timestampUslist) timestampUslist->push_back(timestamp);
@@ -1086,10 +1053,12 @@
iQueued = true;
}
}
+ // Dispatch output buffer
if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) {
dispatchOutputBuffer(omxNode, oBuffer, index);
oQueued = true;
}
+ // Reset Counters when either input or output buffer is dispatched
if (iQueued || oQueued)
timeOut = TIMEOUT_COUNTER_Q;
else
@@ -1098,6 +1067,7 @@
EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite";
break;
}
+ // Runtime Param Configuration
if (ipCount == 15) {
changeBitrate(omxNode, portIndexOutput, 768000);
requestIDR(omxNode, portIndexOutput);
@@ -1266,8 +1236,7 @@
status = setParam(omxNode, static_cast<OMX_INDEXTYPE>(index), ¶m);
}
if (status != ::android::hardware::media::omx::V1_0::Status::OK)
- std::cerr
- << "[ ] Warning ! unable to prependSPSPPSToIDRFrames\n";
+ std::cout << "[ INFO ] unable to prependSPSPPSToIDRFrames\n";
else
prependSPSPPS = true;
diff --git a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
index 91aecf2..e1b6022 100644
--- a/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
+++ b/media/omx/1.0/vts/functional/video/media_video_hidl_test_common.cpp
@@ -15,7 +15,6 @@
*/
#define LOG_TAG "media_omx_hidl_video_test_common"
-
#ifdef __LP64__
#define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
#endif
diff --git a/media/res/bbb_avc_176x144_300kbps_60fps.h264 b/media/res/bbb_avc_176x144_300kbps_60fps.h264
new file mode 100644
index 0000000..da1e75d
--- /dev/null
+++ b/media/res/bbb_avc_176x144_300kbps_60fps.h264
Binary files differ
diff --git a/media/res/bbb_avc_176x144_300kbps_60fps.info b/media/res/bbb_avc_176x144_300kbps_60fps.info
new file mode 100644
index 0000000..d88b540
--- /dev/null
+++ b/media/res/bbb_avc_176x144_300kbps_60fps.info
@@ -0,0 +1,62 @@
+28 128 0
+10 128 0
+4780 32 33333
+960 0 100000
+480 0 66666
+246 0 50000
+264 0 83333
+1160 0 166666
+404 0 133333
+237 0 116666
+193 0 150000
+936 0 233333
+384 0 200000
+199 0 183333
+275 0 216666
+1086 0 300000
+520 0 266666
+301 0 250000
+270 0 283333
+1232 0 366666
+559 0 333333
+287 0 316666
+274 0 350000
+1084 0 433333
+485 0 400000
+307 0 383333
+284 0 416666
+1052 0 500000
+504 0 466666
+298 0 450000
+327 0 483333
+1189 0 566666
+358 0 533333
+172 0 516666
+185 0 550000
+1115 0 633333
+463 0 600000
+218 0 583333
+255 0 616666
+1155 0 700000
+622 0 666666
+356 0 650000
+341 0 683333
+1240 0 766666
+610 0 733333
+341 0 716666
+380 0 750000
+1326 0 833333
+620 0 800000
+396 0 783333
+353 0 816666
+1196 0 900000
+623 0 866666
+375 0 850000
+362 0 883333
+1192 0 966666
+654 0 933333
+359 0 916666
+352 0 950000
+828 0 1016666
+436 0 983333
+401 0 1000000
diff --git a/media/res/bbb_flac_stereo_680kbps_48000hz.flac b/media/res/bbb_flac_stereo_680kbps_48000hz.flac
new file mode 100644
index 0000000..db94d8e
--- /dev/null
+++ b/media/res/bbb_flac_stereo_680kbps_48000hz.flac
Binary files differ
diff --git a/media/res/bbb_flac_stereo_680kbps_48000hz.info b/media/res/bbb_flac_stereo_680kbps_48000hz.info
new file mode 100644
index 0000000..c572430
--- /dev/null
+++ b/media/res/bbb_flac_stereo_680kbps_48000hz.info
@@ -0,0 +1,415 @@
+42 128 0
+1386 32 0
+2401 32 24000
+2321 32 48000
+2367 32 72000
+2370 32 96000
+2334 32 120000
+2396 32 144000
+2375 32 168000
+2431 32 192000
+2428 32 216000
+2334 32 240000
+2261 32 264000
+2124 32 288000
+2152 32 312000
+2295 32 336000
+2183 32 360000
+2393 32 384000
+2400 32 408000
+2246 32 432000
+2289 32 456000
+2400 32 480000
+2335 32 504000
+2294 32 528000
+2260 32 552000
+2206 32 576000
+2185 32 600000
+2155 32 624000
+2118 32 648000
+2094 32 672000
+2050 32 696000
+2059 32 720000
+2030 32 744000
+2022 32 768000
+2078 32 792000
+2082 32 816000
+2094 32 840000
+2111 32 864000
+2043 32 888000
+2023 32 912000
+2024 32 936000
+2056 32 960000
+2108 32 984000
+2138 32 1008000
+2140 32 1032000
+2111 32 1056000
+2110 32 1080000
+2137 32 1104000
+2157 32 1128000
+2174 32 1152000
+2200 32 1176000
+2203 32 1200000
+2237 32 1224000
+2261 32 1248000
+2215 32 1272000
+2133 32 1296000
+2091 32 1320000
+2088 32 1344000
+2122 32 1368000
+2139 32 1392000
+2146 32 1416000
+2231 32 1440000
+2282 32 1464000
+2273 32 1488000
+2304 32 1512000
+2292 32 1536000
+2255 32 1560000
+2181 32 1584000
+2081 32 1608000
+2012 32 1632000
+2011 32 1656000
+2066 32 1680000
+2069 32 1704000
+2120 32 1728000
+2141 32 1752000
+2148 32 1776000
+2181 32 1800000
+2176 32 1824000
+2240 32 1848000
+2297 32 1872000
+2325 32 1896000
+2336 32 1920000
+2329 32 1944000
+2299 32 1968000
+2322 32 1992000
+2347 32 2016000
+2287 32 2040000
+2286 32 2064000
+2269 32 2088000
+2320 32 2112000
+2305 32 2136000
+2384 32 2160000
+2429 32 2184000
+2370 32 2208000
+2365 32 2232000
+2361 32 2256000
+2370 32 2280000
+2393 32 2304000
+2342 32 2328000
+2325 32 2352000
+2334 32 2376000
+2316 32 2400000
+2317 32 2424000
+2305 32 2448000
+2360 32 2472000
+2331 32 2496000
+2332 32 2520000
+2361 32 2544000
+2417 32 2568000
+2438 32 2592000
+2403 32 2616000
+2386 32 2640000
+2382 32 2664000
+2350 32 2688000
+2355 32 2712000
+2383 32 2736000
+2384 32 2760000
+2383 32 2784000
+2373 32 2808000
+2374 32 2832000
+2347 32 2856000
+2353 32 2880000
+2381 32 2904000
+2401 32 2928000
+2401 32 2952000
+2385 32 2976000
+2382 32 3000000
+2328 32 3024000
+2303 32 3048000
+2272 32 3072000
+2270 32 3096000
+2312 32 3120000
+2273 32 3144000
+2330 32 3168000
+2339 32 3192000
+2296 32 3216000
+2317 32 3240000
+2440 32 3264000
+2353 32 3288000
+2346 32 3312000
+2303 32 3336000
+2308 32 3360000
+2287 32 3384000
+2316 32 3408000
+2367 32 3432000
+2335 32 3456000
+2350 32 3480000
+2395 32 3504000
+2408 32 3528000
+2413 32 3552000
+2415 32 3576000
+2468 32 3600000
+2437 32 3624000
+2372 32 3648000
+2371 32 3672000
+2341 32 3696000
+2328 32 3720000
+2273 32 3744000
+2244 32 3768000
+2233 32 3792000
+2229 32 3816000
+2252 32 3840000
+2236 32 3864000
+2217 32 3888000
+2179 32 3912000
+2251 32 3936000
+2192 32 3960000
+2199 32 3984000
+2212 32 4008000
+2190 32 4032000
+2102 32 4056000
+2120 32 4080000
+2167 32 4104000
+2024 32 4128000
+2010 32 4152000
+2067 32 4176000
+2035 32 4200000
+2051 32 4224000
+2012 32 4248000
+2066 32 4272000
+2025 32 4296000
+1987 32 4320000
+1972 32 4344000
+1966 32 4368000
+1999 32 4392000
+1987 32 4416000
+1922 32 4440000
+2020 32 4464000
+2072 32 4488000
+2021 32 4512000
+2017 32 4536000
+2099 32 4560000
+2064 32 4584000
+2109 32 4608000
+2093 32 4632000
+2090 32 4656000
+2148 32 4680000
+2184 32 4704000
+2179 32 4728000
+2152 32 4752000
+2143 32 4776000
+2159 32 4800000
+2123 32 4824000
+2129 32 4848000
+2147 32 4872000
+2192 32 4896000
+2051 32 4920000
+2116 32 4944000
+2124 32 4968000
+2088 32 4992000
+2073 32 5016000
+2146 32 5040000
+2133 32 5064000
+2073 32 5088000
+2059 32 5112000
+2044 32 5136000
+2012 32 5160000
+2034 32 5184000
+2053 32 5208000
+2013 32 5232000
+1981 32 5256000
+2094 32 5280000
+2076 32 5304000
+1968 32 5328000
+2028 32 5352000
+2031 32 5376000
+2020 32 5400000
+2019 32 5424000
+2030 32 5448000
+2015 32 5472000
+1962 32 5496000
+2070 32 5520000
+2087 32 5544000
+1964 32 5568000
+2069 32 5592000
+2034 32 5616000
+1994 32 5640000
+1985 32 5664000
+2030 32 5688000
+2066 32 5712000
+1954 32 5736000
+1733 32 5760000
+1649 32 5784000
+1652 32 5808000
+1631 32 5832000
+1656 32 5856000
+1672 32 5880000
+1667 32 5904000
+1696 32 5928000
+1672 32 5952000
+1701 32 5976000
+1651 32 6000000
+1674 32 6024000
+1695 32 6048000
+1702 32 6072000
+1707 32 6096000
+1694 32 6120000
+1727 32 6144000
+1730 32 6168000
+1708 32 6192000
+1704 32 6216000
+1735 32 6240000
+1758 32 6264000
+1753 32 6288000
+1748 32 6312000
+1763 32 6336000
+1737 32 6360000
+1783 32 6384000
+1839 32 6408000
+1861 32 6432000
+1832 32 6456000
+1947 32 6480000
+1939 32 6504000
+1926 32 6528000
+1896 32 6552000
+1909 32 6576000
+1869 32 6600000
+1900 32 6624000
+1896 32 6648000
+1883 32 6672000
+1903 32 6696000
+1895 32 6720000
+1865 32 6744000
+1878 32 6768000
+1881 32 6792000
+1861 32 6816000
+1791 32 6840000
+1787 32 6864000
+1798 32 6888000
+1811 32 6912000
+1824 32 6936000
+1895 32 6960000
+2079 32 6984000
+2034 32 7008000
+2038 32 7032000
+2018 32 7056000
+2030 32 7080000
+2067 32 7104000
+1982 32 7128000
+1911 32 7152000
+1904 32 7176000
+1874 32 7200000
+1876 32 7224000
+1944 32 7248000
+1977 32 7272000
+1977 32 7296000
+1979 32 7320000
+2012 32 7344000
+1961 32 7368000
+1773 32 7392000
+1780 32 7416000
+1801 32 7440000
+1892 32 7464000
+1869 32 7488000
+1936 32 7512000
+2154 32 7536000
+2226 32 7560000
+2159 32 7584000
+2253 32 7608000
+2286 32 7632000
+2214 32 7656000
+2111 32 7680000
+2027 32 7704000
+1994 32 7728000
+1882 32 7752000
+1887 32 7776000
+1993 32 7800000
+1962 32 7824000
+1982 32 7848000
+1966 32 7872000
+1962 32 7896000
+1928 32 7920000
+1878 32 7944000
+1857 32 7968000
+1885 32 7992000
+1919 32 8016000
+1904 32 8040000
+1909 32 8064000
+1909 32 8088000
+1933 32 8112000
+1824 32 8136000
+1756 32 8160000
+1733 32 8184000
+1705 32 8208000
+1755 32 8232000
+1756 32 8256000
+1725 32 8280000
+1761 32 8304000
+1736 32 8328000
+1706 32 8352000
+1662 32 8376000
+1604 32 8400000
+1613 32 8424000
+1692 32 8448000
+1736 32 8472000
+1779 32 8496000
+1768 32 8520000
+1758 32 8544000
+1708 32 8568000
+1642 32 8592000
+1645 32 8616000
+1581 32 8640000
+1651 32 8664000
+1731 32 8688000
+1743 32 8712000
+1717 32 8736000
+1715 32 8760000
+1646 32 8784000
+1551 32 8808000
+1563 32 8832000
+1649 32 8856000
+1742 32 8880000
+1724 32 8904000
+1676 32 8928000
+1664 32 8952000
+1587 32 8976000
+1497 32 9000000
+1503 32 9024000
+1644 32 9048000
+1658 32 9072000
+1680 32 9096000
+1611 32 9120000
+1694 32 9144000
+1668 32 9168000
+1677 32 9192000
+1604 32 9216000
+1567 32 9240000
+1639 32 9264000
+1552 32 9288000
+1486 32 9312000
+1494 32 9336000
+1480 32 9360000
+1509 32 9384000
+1457 32 9408000
+1423 32 9432000
+1459 32 9456000
+1444 32 9480000
+1424 32 9504000
+1413 32 9528000
+1498 32 9552000
+1455 32 9576000
+1393 32 9600000
+1638 32 9624000
+1919 32 9648000
+1979 32 9672000
+1894 32 9696000
+2002 32 9720000
+2062 32 9744000
+2098 32 9768000
+1919 32 9792000
+1738 32 9816000
+1890 32 9840000
+1971 32 9864000
+2429 32 9888000
+1861 32 9912000
diff --git a/media/res/bbb_hevc_176x144_176kbps_60fps.hevc b/media/res/bbb_hevc_176x144_176kbps_60fps.hevc
new file mode 100644
index 0000000..f82236f
--- /dev/null
+++ b/media/res/bbb_hevc_176x144_176kbps_60fps.hevc
Binary files differ
diff --git a/media/res/bbb_hevc_176x144_176kbps_60fps.info b/media/res/bbb_hevc_176x144_176kbps_60fps.info
new file mode 100644
index 0000000..702b853
--- /dev/null
+++ b/media/res/bbb_hevc_176x144_176kbps_60fps.info
@@ -0,0 +1,61 @@
+1695 128 0
+1938 32 33333
+471 0 83333
+153 0 66666
+99 0 50000
+657 0 150000
+260 0 116666
+115 0 100000
+99 0 133333
+622 0 216666
+211 0 183333
+79 0 166666
+95 0 200000
+597 0 283333
+288 0 250000
+145 0 233333
+147 0 266666
+676 0 350000
+284 0 316666
+144 0 300000
+131 0 333333
+658 0 416666
+270 0 383333
+101 0 366666
+151 0 400000
+529 0 483333
+257 0 450000
+98 0 433333
+160 0 466666
+664 0 566666
+186 0 533333
+147 0 500000
+67 0 516666
+78 0 550000
+575 0 633333
+230 0 600000
+134 0 583333
+114 0 616666
+629 0 700000
+224 0 666666
+138 0 650000
+129 0 683333
+645 0 750000
+264 0 733333
+145 0 716666
+705 0 816666
+365 0 783333
+156 0 766666
+160 0 800000
+725 0 883333
+330 0 850000
+138 0 833333
+162 0 866666
+638 0 950000
+337 0 916666
+170 0 900000
+133 0 933333
+432 0 1016666
+287 0 983333
+130 0 966666
+136 0 1000000
diff --git a/media/res/bbb_mpeg2_352x288_1mbps_60fps.info b/media/res/bbb_mpeg2_352x288_1mbps_60fps.info
new file mode 100644
index 0000000..d5290d7
--- /dev/null
+++ b/media/res/bbb_mpeg2_352x288_1mbps_60fps.info
@@ -0,0 +1,60 @@
+16680 32 16666
+17017 0 33333
+10534 0 50000
+10289 0 66666
+3698 0 83333
+2776 0 100000
+1936 0 116666
+1493 0 133333
+1217 0 150000
+993 0 166666
+805 0 183333
+857 0 200000
+5082 32 216666
+812 0 233333
+718 0 250000
+746 0 266666
+762 0 283333
+865 0 300000
+782 0 316666
+833 0 333333
+750 0 350000
+819 0 366666
+826 0 383333
+846 0 400000
+4522 32 416666
+678 0 433333
+718 0 450000
+803 0 466666
+769 0 483333
+762 0 500000
+587 0 516666
+635 0 533333
+658 0 550000
+714 0 566666
+677 0 583333
+699 0 600000
+4616 32 616666
+800 0 633333
+831 0 650000
+928 0 666666
+869 0 683333
+931 0 700000
+930 0 716666
+974 0 733333
+978 0 750000
+932 0 766666
+918 0 783333
+978 0 800000
+4655 32 816666
+897 0 833333
+896 0 850000
+883 0 866666
+949 0 883333
+965 0 900000
+951 0 916666
+901 0 933333
+965 0 950000
+955 0 966666
+948 0 983333
+968 0 1000000
diff --git a/media/res/bbb_mpeg2_352x288_1mbps_60fps.m2v b/media/res/bbb_mpeg2_352x288_1mbps_60fps.m2v
new file mode 100644
index 0000000..2f67c2b
--- /dev/null
+++ b/media/res/bbb_mpeg2_352x288_1mbps_60fps.m2v
Binary files differ
diff --git a/media/res/bbb_vp8_176x144_240kbps_60fps.info b/media/res/bbb_vp8_176x144_240kbps_60fps.info
new file mode 100644
index 0000000..559f425
--- /dev/null
+++ b/media/res/bbb_vp8_176x144_240kbps_60fps.info
@@ -0,0 +1,60 @@
+10271 32 0
+106 0 17000
+134 0 33000
+149 0 50000
+152 0 67000
+159 0 83000
+114 0 100000
+723 0 117000
+175 0 133000
+186 0 150000
+201 0 167000
+270 0 183000
+383 0 200000
+255 0 217000
+286 0 233000
+273 0 250000
+1224 0 267000
+220 0 283000
+231 0 300000
+192 0 317000
+182 0 333000
+289 0 350000
+204 0 367000
+237 0 383000
+187 0 400000
+898 0 417000
+231 0 433000
+266 0 450000
+278 0 467000
+205 0 483000
+255 0 500000
+169 0 517000
+233 0 533000
+1011 0 550000
+202 0 567000
+251 0 583000
+223 0 600000
+283 0 617000
+362 0 633000
+217 0 650000
+245 0 667000
+960 0 683000
+233 0 700000
+286 0 717000
+272 0 733000
+254 0 750000
+331 0 767000
+218 0 783000
+261 0 800000
+981 0 817000
+226 0 833000
+226 0 850000
+279 0 867000
+225 0 883000
+295 0 900000
+175 0 917000
+249 0 933000
+996 0 950000
+169 0 967000
+224 0 983000
diff --git a/media/res/bbb_vp8_176x144_240kbps_60fps.vp8 b/media/res/bbb_vp8_176x144_240kbps_60fps.vp8
new file mode 100644
index 0000000..6eba56c
--- /dev/null
+++ b/media/res/bbb_vp8_176x144_240kbps_60fps.vp8
Binary files differ
diff --git a/media/res/bbb_vp9_176x144_285kbps_60fps.info b/media/res/bbb_vp9_176x144_285kbps_60fps.info
new file mode 100644
index 0000000..2f7d35b
--- /dev/null
+++ b/media/res/bbb_vp9_176x144_285kbps_60fps.info
@@ -0,0 +1,60 @@
+6939 32 0
+6818 0 17000
+310 0 33000
+273 0 50000
+267 0 67000
+239 0 83000
+232 0 100000
+222 0 117000
+186 0 133000
+194 0 150000
+189 0 167000
+18 0 183000
+2014 0 200000
+297 0 217000
+287 0 233000
+237 0 250000
+263 0 267000
+238 0 283000
+257 0 300000
+229 0 317000
+187 0 333000
+191 0 350000
+18 0 367000
+2203 0 383000
+265 0 400000
+224 0 417000
+254 0 433000
+252 0 450000
+273 0 467000
+208 0 483000
+154 0 500000
+182 0 517000
+138 0 533000
+18 0 550000
+2502 0 567000
+286 0 583000
+304 0 600000
+341 0 617000
+259 0 633000
+275 0 650000
+222 0 667000
+254 0 683000
+253 0 700000
+225 0 717000
+18 0 733000
+2501 0 750000
+282 0 767000
+298 0 783000
+252 0 800000
+242 0 817000
+250 0 833000
+260 0 850000
+218 0 867000
+213 0 883000
+144 0 900000
+18 0 917000
+233 0 933000
+254 0 950000
+229 0 967000
+239 0 983000
diff --git a/media/res/bbb_vp9_176x144_285kbps_60fps.vp9 b/media/res/bbb_vp9_176x144_285kbps_60fps.vp9
new file mode 100644
index 0000000..2633c8a
--- /dev/null
+++ b/media/res/bbb_vp9_176x144_285kbps_60fps.vp9
Binary files differ
diff --git a/memtrack/1.0/Android.bp b/memtrack/1.0/Android.bp
index 4df2c1d..fe88d0f 100644
--- a/memtrack/1.0/Android.bp
+++ b/memtrack/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.memtrack@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0",
+ srcs: [
+ ":android.hardware.memtrack@1.0_hal",
+ ],
+ out: [
+ "android/hardware/memtrack/1.0/AMemtrack.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.memtrack@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0",
+ srcs: [
+ ":android.hardware.memtrack@1.0_hal",
+ ],
+ out: [
+ "android/hardware/memtrack/1.0/AMemtrack.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.memtrack@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.memtrack@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.memtrack@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.memtrack@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.memtrack@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.memtrack@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.memtrack@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.memtrack@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.memtrack@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.memtrack@1.0",
+ "android.hardware.memtrack@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.memtrack@1.0-adapter_genc++"],
+}
diff --git a/minijail/Android.bp b/minijail/Android.bp
new file mode 100644
index 0000000..c01a12b
--- /dev/null
+++ b/minijail/Android.bp
@@ -0,0 +1,13 @@
+cc_library_shared {
+ name: "libhwminijail",
+ defaults: ["hidl_defaults"],
+ vendor: true,
+ export_include_dirs: ["include"],
+
+ srcs: ["HardwareMinijail.cpp"],
+
+ shared_libs: [
+ "libbase",
+ "libminijail",
+ ],
+}
diff --git a/minijail/Android.mk b/minijail/Android.mk
deleted file mode 100644
index 272bb0e..0000000
--- a/minijail/Android.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-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/neuralnetworks/1.0/Android.bp b/neuralnetworks/1.0/Android.bp
index d7c3bbb..ba32d0c 100644
--- a/neuralnetworks/1.0/Android.bp
+++ b/neuralnetworks/1.0/Android.bp
@@ -5,8 +5,9 @@
srcs: [
"types.hal",
"IDevice.hal",
- "IEvent.hal",
+ "IExecutionCallback.hal",
"IPreparedModel.hal",
+ "IPreparedModelCallback.hal",
],
}
@@ -20,8 +21,9 @@
out: [
"android/hardware/neuralnetworks/1.0/types.cpp",
"android/hardware/neuralnetworks/1.0/DeviceAll.cpp",
- "android/hardware/neuralnetworks/1.0/EventAll.cpp",
+ "android/hardware/neuralnetworks/1.0/ExecutionCallbackAll.cpp",
"android/hardware/neuralnetworks/1.0/PreparedModelAll.cpp",
+ "android/hardware/neuralnetworks/1.0/PreparedModelCallbackAll.cpp",
],
}
@@ -40,16 +42,21 @@
"android/hardware/neuralnetworks/1.0/BnHwDevice.h",
"android/hardware/neuralnetworks/1.0/BpHwDevice.h",
"android/hardware/neuralnetworks/1.0/BsDevice.h",
- "android/hardware/neuralnetworks/1.0/IEvent.h",
- "android/hardware/neuralnetworks/1.0/IHwEvent.h",
- "android/hardware/neuralnetworks/1.0/BnHwEvent.h",
- "android/hardware/neuralnetworks/1.0/BpHwEvent.h",
- "android/hardware/neuralnetworks/1.0/BsEvent.h",
+ "android/hardware/neuralnetworks/1.0/IExecutionCallback.h",
+ "android/hardware/neuralnetworks/1.0/IHwExecutionCallback.h",
+ "android/hardware/neuralnetworks/1.0/BnHwExecutionCallback.h",
+ "android/hardware/neuralnetworks/1.0/BpHwExecutionCallback.h",
+ "android/hardware/neuralnetworks/1.0/BsExecutionCallback.h",
"android/hardware/neuralnetworks/1.0/IPreparedModel.h",
"android/hardware/neuralnetworks/1.0/IHwPreparedModel.h",
"android/hardware/neuralnetworks/1.0/BnHwPreparedModel.h",
"android/hardware/neuralnetworks/1.0/BpHwPreparedModel.h",
"android/hardware/neuralnetworks/1.0/BsPreparedModel.h",
+ "android/hardware/neuralnetworks/1.0/IPreparedModelCallback.h",
+ "android/hardware/neuralnetworks/1.0/IHwPreparedModelCallback.h",
+ "android/hardware/neuralnetworks/1.0/BnHwPreparedModelCallback.h",
+ "android/hardware/neuralnetworks/1.0/BpHwPreparedModelCallback.h",
+ "android/hardware/neuralnetworks/1.0/BsPreparedModelCallback.h",
],
}
diff --git a/neuralnetworks/1.0/IDevice.hal b/neuralnetworks/1.0/IDevice.hal
index b6f9433..49c2967 100644
--- a/neuralnetworks/1.0/IDevice.hal
+++ b/neuralnetworks/1.0/IDevice.hal
@@ -14,12 +14,9 @@
* limitations under the License.
*/
-/* This HAL is a work in progress */
-
package android.hardware.neuralnetworks@1.0;
-import IEvent;
-import IPreparedModel;
+import IPreparedModelCallback;
/**
* This interface represents a device driver.
@@ -28,7 +25,10 @@
/**
* Gets the capabilities of a driver.
*
- * @return status ErrorStatus::NONE if successful.
+ * @return status Error status of the call, must be:
+ * - NONE if successful
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
* @return capabilities Capabilities of the driver.
*/
getCapabilities() generates (ErrorStatus status, Capabilities capabilities);
@@ -36,14 +36,17 @@
/**
* Gets the supported operations in a model.
*
- * getSupportedSubgraph provides a more nuanced indication on whether a
- * model is able to be compiled by the driver. Having the entire model
- * allows for additional information such as tensor shapes to inputs or
- * tensor strides, information which is not known in "initialize".
+ * getSupportedSubgraph indicates which operations of a model are fully
+ * supported by the vendor driver. If an operation may not be supported for
+ * any reason, getSupportedOperations must return false for that operation.
*
* @param model A model whose operations--and their corresponding
* operands--are to be verified by the driver.
- * @return status ErrorStatus::NONE if successful.
+ * @return status Error status of the call, must be:
+ * - NONE if successful
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
+ * - INVALID_ARGUMENT if provided model is invalid
* @return supportedOperations A list of supported operations, where true
* indicates the operation is supported and
* false indicates the operation is not
@@ -52,32 +55,72 @@
* it is describing.
*/
getSupportedOperations(Model model)
- generates (ErrorStatus status, vec<bool> supportedOperations);
+ generates (ErrorStatus status, vec<bool> supportedOperations);
/**
- * Prepares a model for execution.
+ * Creates a prepared model for execution.
*
* prepareModel is used to make any necessary transformations or alternative
- * representations to a model for execution, possible including
+ * representations to a model for execution, possiblly including
* transformations on the constant data, optimization on the model's graph,
- * or compilation into the device's native binary.
+ * or compilation into the device's native binary format. The model itself
+ * is not changed.
+ *
+ * The model is prepared asynchronously with respect to the caller. The
+ * prepareModel function must verify the inputs to the prepareModel function
+ * are correct. If there is an error, prepareModel must immediately invoke
+ * the callback with the appropriate ErrorStatus value and nullptr for the
+ * IPreparedModel, then return with the same ErrorStatus. If the inputs to
+ * the prepareModel function are valid and there is no error, prepareModel
+ * must launch an asynchronous task to prepare the model in the background,
+ * and immediately return from prepareModel with ErrorStatus::NONE. If the
+ * asynchronous task fails to launch, prepareModel must immediately invoke
+ * the callback with ErrorStatus::GENERAL_FAILURE and nullptr for the
+ * IPreparedModel, then return with ErrorStatus::GENERAL_FAILURE.
+ *
+ * When the asynchronous task has finished preparing the model, it must
+ * immediately invoke the callback function provided as an input to
+ * prepareModel. If the model was prepared successfully, the callback object
+ * must be invoked with an error status of ErrorStatus::NONE and the
+ * produced IPreparedModel object. If an error occurred preparing the model,
+ * the callback object must be invoked with the appropriate ErrorStatus
+ * value and nullptr for the IPreparedModel.
*
* The only information that may be unknown to the model at this stage is
- * the shape of the tensors, which may only be known at execution time.
+ * the shape of the tensors, which may only be known at execution time. As
+ * such, some driver services may return partially prepared models, where
+ * the prepared model can only be finished when it is paired with a set of
+ * inputs to the model. Note that the same prepared model object can be
+ * used with different shapes of inputs on different (possibly concurrent)
+ * executions.
+ *
+ * Multiple threads can call prepareModel on the same model concurrently.
*
* @param model The model to be prepared for execution.
- * @param event A synchronization callback that must be signaled once the
- * execution has finished.
- * @return status ErrorStatus::NONE if successful.
- * @return preparedModel A handle to the resultant prepared model.
+ * @param callback A callback object used to return the error status of
+ * preparing the model for execution and the prepared model
+ * if successful, nullptr otherwise. The callback object's
+ * notify function must be called exactly once, even if the
+ * model could not be prepared.
+ * @return status Error status of launching a task which prepares the model
+ * in the background; must be:
+ * - NONE if preparation task is successfully launched
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
+ * - INVALID_ARGUMENT if one of the input arguments is
+ * invalid
*/
- prepareModel(Model model, IEvent event)
- generates (ErrorStatus status, IPreparedModel preparedModel);
+ prepareModel(Model model, IPreparedModelCallback callback)
+ generates (ErrorStatus status);
/**
* Returns the current status of a driver.
*
- * @return status Status of the driver.
+ * @return status Status of the driver, one of:
+ * - DeviceStatus::AVAILABLE
+ * - DeviceStatus::BUSY
+ * - DeviceStatus::OFFLINE
+ * - DeviceStatus::UNKNOWN
*/
getStatus() generates (DeviceStatus status);
};
diff --git a/neuralnetworks/1.0/IEvent.hal b/neuralnetworks/1.0/IEvent.hal
deleted file mode 100644
index 2ebda58..0000000
--- a/neuralnetworks/1.0/IEvent.hal
+++ /dev/null
@@ -1,43 +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.
- */
-
-/* This HAL is a work in progress */
-
-package android.hardware.neuralnetworks@1.0;
-
-/**
- * The IEvent interface is a callback object passed by the
- * Neuralnetworks runtime to the vendor service. It is used as a
- * synchronization primitive between one or more runtime threads and a
- * single asynchronous vendor thread. An event object is passed as an
- * argument to a HIDL call that is expected to take a non-trivial
- * amount of time. When the asynchronous execution thread has
- * completed its computation, it must call "notify" on the event to
- * indicate to the Neuralnetworks runtime whether the computation was
- * successful or not, and that the corresponding output is ready to be
- * consumed if the execution was successful.
- */
-interface IEvent {
-
- /**
- * IEvent::notify is called by the server thread (i.e., the thread doing
- * the work) to mark the event as completed so that any threads requiring
- * the corresponding output can continue executing.
- *
- * @param status ErrorStatus::NONE if successful.
- */
- oneway notify(ErrorStatus status);
-};
diff --git a/neuralnetworks/1.0/IExecutionCallback.hal b/neuralnetworks/1.0/IExecutionCallback.hal
new file mode 100644
index 0000000..ef0f454
--- /dev/null
+++ b/neuralnetworks/1.0/IExecutionCallback.hal
@@ -0,0 +1,44 @@
+/*
+ * 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.neuralnetworks@1.0;
+
+/**
+ * IExecutionCallback must be used to return the error status result from an
+ * execution asynchronously launched from IPreparedModel::execute.
+ */
+interface IExecutionCallback {
+
+ /**
+ * notify must be invoked immediately after the asynchronous task has
+ * finished performing the execution. notify must be provided with the
+ * ErrorStatus resulting from the execution. If the asynchronous task
+ * is not launched, notify must be invoked with the appropriate error.
+ *
+ * @return param Error status returned from launching the asynchronous task
+ * (if the launch fails) or from the asynchronous task itself
+ * (if the launch succeeds). Must be:
+ * - NONE if the asynchronous execution was successful
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if the asynchronous task resulted in an
+ * unspecified error
+ * - OUTPUT_INSUFFICIENT_SIZE if provided output buffer is
+ * not large enough to store the resultant values
+ * - INVALID_ARGUMENT if one of the input arguments to
+ * prepareModel is invalid
+ */
+ oneway notify(ErrorStatus status);
+};
diff --git a/neuralnetworks/1.0/IPreparedModel.hal b/neuralnetworks/1.0/IPreparedModel.hal
index a7c3342..ee406fb 100644
--- a/neuralnetworks/1.0/IPreparedModel.hal
+++ b/neuralnetworks/1.0/IPreparedModel.hal
@@ -16,7 +16,7 @@
package android.hardware.neuralnetworks@1.0;
-import IEvent;
+import IExecutionCallback;
/**
* IPreparedModel describes a model that has been prepared for execution and
@@ -24,23 +24,42 @@
*/
interface IPreparedModel {
/**
- * Spawns an asynchronous execution on a prepared model.
+ * Launches an asynchronous execution on a prepared model.
*
- * Executions are asynchronous with respect to the Neuralnetworks runtime.
- * To support this, IPreparedModel::execute must spawn a new task and return
- * whether the task was successfully launched. The asynchronous task which
- * performs the execution must call event's IEvent::notify with the status
- * of the execution immediately after the execution has finished.
+ * The execution is performed asynchronously with respect to the caller.
+ * execute must verify the inputs to the function are correct. If there is
+ * an error, execute must immediately invoke the callback with the
+ * appropriate ErrorStatus value, then return with the same ErrorStatus. If
+ * the inputs to the function are valid and there is no error, execute must
+ * launch an asynchronous task to perform the execution in the background,
+ * and immediately return with ErrorStatus::NONE. If the asynchronous task
+ * fails to launch, execute must immediately invoke the callback with
+ * ErrorStatus::GENERAL_FAILURE, then return with
+ * ErrorStatus::GENERAL_FAILURE.
*
- * Multiple threads can call this execute function concurrently.
+ * When the asynchronous task has finished its execution, it must
+ * immediately invoke the callback object provided as an input to the
+ * execute function. This callback must be provided with the ErrorStatus of
+ * the execution.
+ *
+ * Multiple threads can call the execute function on the same IPreparedModel
+ * object concurrently with different requests.
*
* @param request The input and output information on which the prepared
* model is to be executed.
- * prepared model.
- * @param event A callback used for synchronization that must be signaled
- * once the execution has finished.
- * @return status ErrorStatus::NONE if the asynchronous task was
- * successfully launched.
+ * @param callback A callback object used to return the error status of
+ * the execution. The callback object's notify function must
+ * be called exactly once, even if the execution was
+ * unsuccessful.
+ * @return status Error status of the call, must be:
+ * - NONE if task is successfully launched
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
+ * - OUTPUT_INSUFFICIENT_SIZE if provided output buffer is
+ * not large enough to store the resultant values
+ * - INVALID_ARGUMENT if one of the input arguments is
+ * invalid
*/
- execute(Request request, IEvent event) generates (ErrorStatus status);
+ execute(Request request, IExecutionCallback callback)
+ generates (ErrorStatus status);
};
diff --git a/neuralnetworks/1.0/IPreparedModelCallback.hal b/neuralnetworks/1.0/IPreparedModelCallback.hal
new file mode 100644
index 0000000..fa1bf9d
--- /dev/null
+++ b/neuralnetworks/1.0/IPreparedModelCallback.hal
@@ -0,0 +1,53 @@
+/*
+ * 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.neuralnetworks@1.0;
+
+import IPreparedModel;
+
+/**
+ * IPreparedModelCallback must be used to return a prepared model produced by an
+ * asynchronous task launched from IDevice::prepareModel.
+ */
+interface IPreparedModelCallback {
+
+ /**
+ * notify must be invoked immediately after the asynchronous task holding
+ * this callback has finished preparing the model. If the model was
+ * successfully prepared, notify must be invoked with ErrorStatus::NONE and
+ * the prepared model. If the model was not able to be successfully
+ * prepared, notify must be invoked with the appropriate ErrorStatus and
+ * nullptr as the IPreparedModel. If the asynchronous task holding this
+ * callback fails to launch or if the model provided to
+ * IDevice::prepareModel is invalid, notify must be invoked with the
+ * appropriate error as well as nullptr for the IPreparedModel.
+ *
+ * @param status Error status returned from the asynchronous model
+ * preparation task; must be:
+ * - NONE if the asynchronous task successfully prepared the
+ * model
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if the asynchronous task resulted in an
+ * unspecified error
+ * - INVALID_ARGUMENT if one of the input arguments to
+ * prepareModel is invalid
+ * @param preparedModel A model that has been asynchronously prepared for
+ * execution. If the model was unable to be prepared
+ * due to an error, nullptr must be passed in place of
+ * the IPreparedModel object.
+ */
+ oneway notify(ErrorStatus status, IPreparedModel preparedModel);
+};
diff --git a/neuralnetworks/1.0/types.hal b/neuralnetworks/1.0/types.hal
index 39e3d34..a645393 100644
--- a/neuralnetworks/1.0/types.hal
+++ b/neuralnetworks/1.0/types.hal
@@ -218,7 +218,7 @@
*
* Inputs:
* 0: A 4-D tensor, of shape [batches, height, width, depth_in], specifying the input.
- * 1: A 4-D tensor, of shape [depth_out, filter_height, filter_width, depth_in],
+ * 1: A 4-D tensor, of shape [1, filter_height, filter_width, depth_out],
* specifying the filter.
* 2: A 1-D tensor, of shape [depth_out], specifying the bias.
* For input tensor of {@link OperandType::TENSOR_FLOAT32} type, the bias should
@@ -990,6 +990,12 @@
* The operand is a constant that was specified via a Memory object.
*/
CONSTANT_REFERENCE,
+
+ /**
+ * The operand does not have a value. This is valid only for optional arguments
+ * of operations.
+ */
+ NO_VALUE,
};
/**
@@ -1003,21 +1009,6 @@
};
/**
- * A typed operation.
- */
-struct OperationTuple {
- /**
- * The type of operation.
- */
- OperationType operationType;
-
- /**
- * The input data type of operation.
- */
- OperandType operandType;
-};
-
-/**
* Performance information for the reference workload.
*
* Used by a driver to report its performance characteristics.
@@ -1039,20 +1030,6 @@
*/
struct Capabilities {
/**
- * A collection of typed operations supported by the driver.
- */
- vec<OperationTuple> supportedOperationTuples;
-
- /**
- * Indicates whether a driver caches its prepared model for reuse the next
- * time the application begins. This is useful because the model may have
- * been prepared in a previous run.
- *
- * True if caching is supported, false otherwise.
- */
- bool cachesCompilation;
-
- /**
* Driver performance when operating on float32 data.
*/
PerformanceInfo float32Performance;
@@ -1105,7 +1082,8 @@
/**
* Quantized scale of the operand.
*
- * Only applicable if the operand is of type TENSOR_QUANT8_ASYMM.
+ * Only applicable if the operand is of type TENSOR_QUANT8_ASYMM or
+ * TENSOR_INT32.
*/
float scale;
@@ -1123,7 +1101,7 @@
/**
* Where to find the data for this operand.
- * If the lifetime is TEMPORARY_VARIABLE, MODEL_INPUT, or MODEL_OUTPUT:
+ * If the lifetime is TEMPORARY_VARIABLE, MODEL_INPUT, MODEL_OUTPUT, or NO_VALUE:
* - All the fields will be 0.
* If the lifetime is CONSTANT_COPY:
* - location.poolIndex is 0.
@@ -1142,9 +1120,9 @@
*/
struct Operation {
/**
- * The tuple describing the operation type and input type.
+ * The operation type.
*/
- OperationTuple opTuple;
+ OperationType type;
/**
* Describes the table that contains the indexes of the inputs of the
@@ -1195,12 +1173,18 @@
/**
* A byte buffer containing operand data that were copied into the model.
+ *
+ * An operand's value must be located here if and only if Operand::lifetime
+ * equals OperandLifeTime::CONSTANT_COPY.
*/
vec<uint8_t> operandValues;
/**
* A collection of shared memory pools containing operand data that were
* registered by the model.
+ *
+ * An operand's value must be located here if and only if Operand::lifetime
+ * equals OperandLifeTime::CONSTANT_REFERENCE.
*/
vec<memory> pools;
};
@@ -1211,6 +1195,13 @@
*/
struct RequestArgument {
/**
+ * If true, the argument does not have a value. This can be used for operations
+ * that take optional arguments. If true, the fields of location are set to 0 and
+ * the dimensions vector is left empty.
+ */
+ bool hasNoValue;
+
+ /**
* The location within one of the memory pools passed in the Request.
*/
DataLocation location;
diff --git a/neuralnetworks/1.0/vts/functional/Android.bp b/neuralnetworks/1.0/vts/functional/Android.bp
index 2318430..e33ee77 100644
--- a/neuralnetworks/1.0/vts/functional/Android.bp
+++ b/neuralnetworks/1.0/vts/functional/Android.bp
@@ -17,8 +17,9 @@
cc_test {
name: "VtsHalNeuralnetworksV1_0TargetTest",
srcs: [
- "Event.cpp",
+ "Callbacks.cpp",
"GeneratedTestHarness.cpp",
+ "Models.cpp",
"VtsHalNeuralnetworksV1_0TargetTest.cpp",
],
defaults: ["VtsHalTargetTestDefaults"],
diff --git a/neuralnetworks/1.0/vts/functional/Callbacks.cpp b/neuralnetworks/1.0/vts/functional/Callbacks.cpp
new file mode 100644
index 0000000..46bf243
--- /dev/null
+++ b/neuralnetworks/1.0/vts/functional/Callbacks.cpp
@@ -0,0 +1,127 @@
+#include "Callbacks.h"
+#include <android-base/logging.h>
+
+namespace android {
+namespace hardware {
+namespace neuralnetworks {
+namespace V1_0 {
+namespace implementation {
+
+CallbackBase::CallbackBase() : mNotified(false) {}
+
+CallbackBase::~CallbackBase() {
+ // Note that we cannot call CallbackBase::join_thread from here:
+ // CallbackBase is intended to be reference counted, and it is possible that
+ // the reference count drops to zero in the bound thread, causing the
+ // bound thread to call this destructor. If a thread tries to join
+ // itself, it throws an exception, producing a message like the
+ // following:
+ //
+ // terminating with uncaught exception of type std::__1::system_error:
+ // thread::join failed: Resource deadlock would occur
+}
+
+void CallbackBase::wait() {
+ std::unique_lock<std::mutex> lock(mMutex);
+ mCondition.wait(lock, [this]{return mNotified;});
+ join_thread_locked();
+}
+
+bool CallbackBase::on_finish(std::function<bool(void)> post_work) {
+ std::lock_guard<std::mutex> lock(mMutex);
+ if (mPostWork != nullptr) {
+ LOG(ERROR) << "CallbackBase::on_finish -- a post-work function has already been bound to "
+ "this callback object";
+ return false;
+ }
+ if (post_work == nullptr) {
+ LOG(ERROR) << "CallbackBase::on_finish -- the new post-work function is invalid";
+ return false;
+ }
+ mPostWork = std::move(post_work);
+ return true;
+}
+
+bool CallbackBase::bind_thread(std::thread&& asyncThread) {
+ std::lock_guard<std::mutex> lock(mMutex);
+ if (mThread.joinable()) {
+ LOG(ERROR) << "CallbackBase::bind_thread -- a thread has already been bound to this "
+ "callback object";
+ return false;
+ }
+ if (!asyncThread.joinable()) {
+ LOG(ERROR) << "CallbackBase::bind_thread -- the new thread is not joinable";
+ return false;
+ }
+ mThread = std::move(asyncThread);
+ return true;
+}
+
+void CallbackBase::join_thread() {
+ std::lock_guard<std::mutex> lock(mMutex);
+ join_thread_locked();
+}
+
+void CallbackBase::notify() {
+ {
+ std::lock_guard<std::mutex> lock(mMutex);
+ mNotified = true;
+ if (mPostWork != nullptr) {
+ bool success = mPostWork();
+ if (!success) {
+ LOG(ERROR) << "CallbackBase::notify -- post work failed";
+ }
+ }
+ }
+ mCondition.notify_all();
+}
+
+void CallbackBase::join_thread_locked() {
+ if (mThread.joinable()) {
+ mThread.join();
+ }
+}
+
+PreparedModelCallback::PreparedModelCallback() :
+ mErrorStatus(ErrorStatus::GENERAL_FAILURE), mPreparedModel(nullptr) {}
+
+PreparedModelCallback::~PreparedModelCallback() {}
+
+Return<void> PreparedModelCallback::notify(ErrorStatus errorStatus,
+ const sp<IPreparedModel>& preparedModel) {
+ mErrorStatus = errorStatus;
+ mPreparedModel = preparedModel;
+ CallbackBase::notify();
+ return Void();
+}
+
+ErrorStatus PreparedModelCallback::getStatus() {
+ wait();
+ return mErrorStatus;
+}
+
+sp<IPreparedModel> PreparedModelCallback::getPreparedModel() {
+ wait();
+ return mPreparedModel;
+}
+
+ExecutionCallback::ExecutionCallback() : mErrorStatus(ErrorStatus::GENERAL_FAILURE) {}
+
+ExecutionCallback::~ExecutionCallback() {}
+
+Return<void> ExecutionCallback::notify(ErrorStatus errorStatus) {
+ mErrorStatus = errorStatus;
+ CallbackBase::notify();
+ return Void();
+}
+
+ErrorStatus ExecutionCallback::getStatus() {
+ wait();
+ return mErrorStatus;
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace neuralnetworks
+} // namespace hardware
+} // namespace android
diff --git a/neuralnetworks/1.0/vts/functional/Callbacks.h b/neuralnetworks/1.0/vts/functional/Callbacks.h
new file mode 100644
index 0000000..0e2ffb3
--- /dev/null
+++ b/neuralnetworks/1.0/vts/functional/Callbacks.h
@@ -0,0 +1,319 @@
+#ifndef ANDROID_HARDWARE_NEURALNETWORKS_V1_0_CALLBACKS_H
+#define ANDROID_HARDWARE_NEURALNETWORKS_V1_0_CALLBACKS_H
+
+#include <android/hardware/neuralnetworks/1.0/IExecutionCallback.h>
+#include <android/hardware/neuralnetworks/1.0/IPreparedModelCallback.h>
+#include <chrono>
+#include <condition_variable>
+#include <functional>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <mutex>
+#include <thread>
+
+namespace android {
+namespace hardware {
+namespace neuralnetworks {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+/**
+ * The CallbackBase class is used internally by the NeuralNetworks runtime to
+ * synchronize between different threads. An asynchronous task is launched
+ * paired with a callback object. When a client thread requires the output being
+ * generated by the asynchronous task, the client thread can wait for the result
+ * and be blocked until it has completed or a timeout condition has been
+ * reached. Any wait* may safely be called concurrently, even on the same
+ * callback object. When the asynchronous task has finished its workload, it
+ * must immediately call "notify". If the asynchronous task has failed to launch,
+ * the function that tried to launch the asynchronous task must immediately call
+ * "notify". This "notify" call awakens any client threads waiting on the
+ * callback object.
+ *
+ * callback object. When the asynchronous task has finished its workload or has
+ * failed to launch, it must immediately call "notify", awakening any client
+ * threads waiting on the callback object.
+ *
+ * The CallbackBase class implements some of the base synchronization common to
+ * both PrepareModelCallback and ExecutionCallback. For consistency, any HIDL
+ * callback class must inherit from CallbackBase as well as the HIDL callback
+ * interface it implements.
+ *
+ * This class exists to enable synchronization across HIDL. When synchronization
+ * is only required in the same process, consider using std::future, std::mutex,
+ * std::condition_variable, or std::experimental::latch instead.
+ */
+class CallbackBase {
+ public:
+ CallbackBase();
+ ~CallbackBase();
+
+ /**
+ * CallbackBase::wait blocks until notify has been called on the callback
+ * object.
+ */
+ void wait();
+
+ /**
+ * CallbackBase::wait_for blocks until notify has been called on the
+ * callback object or the time duration from the time the wait_for function
+ * was called has expired, whichever comes first.
+ *
+ * @return Status std::cv_status::no_timeout if the callback was notified
+ * before the time duration expired, std::cv_status::timeout
+ * otherwise.
+ */
+ template<class Rep, class Period>
+ std::cv_status wait_for(const std::chrono::duration<Rep,Period>& timeout_duration);
+
+ /**
+ * CallbackBase::on_finish binds a function to the callback object. This
+ * bound function will be executed when CallbackBase::notify is called,
+ * before any calls to wait* return. (Note that CallbackBase::wait_for can
+ * return std::cv_status::timeout before CallbackBase::notify is called for
+ * the first time, and hence before the bound function is executed.)
+ *
+ * The bound function must not synchronize with or otherwise access the
+ * callback object it is bound to, as this could cause a deadlock.
+ *
+ * CallbackBase::on_finish can be called at most once on a given callback
+ * object, and the call to CallbackBase::on_finish must finish before
+ * CallbackBase::notify is called.
+ *
+ * @param post_work Function to be invoked the first time
+ * CallbackBase::notify is called. Must have a target --
+ * i.e., must not compare equal to nullptr. post_work
+ * returns true if it successfully completes, false if it
+ * fails.
+ * @return bool True if the function was successfully bound, false if
+ * unsuccessful.
+ *
+ * TODO: Why does the return value of the callback matter?
+ */
+ bool on_finish(std::function<bool(void)> post_work);
+
+ /**
+ * CallbackBase::bind_thread binds a thread to the event for later use by
+ * CallbackBase::join_thread.
+ *
+ * The thread must be passed using std::move.
+ *
+ * Once a thread is bound with CallbackBase::bind_thread, the client code
+ * should ensure that one of the following occurs before the event is
+ * destroyed:
+ * - CallbackBase::join_thread has been called.
+ * - CallbackBase::wait has been called.
+ * - CallbackBase::wait_for has been called and returned other than
+ * std::cv_status::no_timeout.
+ *
+ * The bound thread shall not call any CallbackBase method with the
+ * exception of CallbackBase::notify, which it must call when the thread has
+ * finished its computation.
+ *
+ * CallbackBase::bind_thread can be called at most once on a given callback
+ * object.
+ *
+ * @param asyncThread Thread to be bound to the callback object. The thread
+ * object must represent a thread of execution -- i.e.,
+ * asyncThread.joinable() must be true.
+ * @return bool True if successful, false if thread was not properly bound.
+ */
+ bool bind_thread(std::thread&& asyncThread);
+
+ /**
+ * CallbackBase::join_thread ensures that the thread (if any) bound to this
+ * event with CallbackBase::bind_thread has fully finished and cleaned its
+ * resources. It is legal to call this function multiple times, concurrently
+ * or sequentially.
+ */
+ void join_thread();
+
+ protected:
+ /**
+ * CallbackBase::notify enables all prior and future wait* calls on the
+ * callback object to proceed. The call to CallbackBase::notify happens
+ * before any wait* calls on this callback object return (except in the case
+ * of wait_for timing out). The asynchronous call the callback object is
+ * paired with must ensure that any update to state that should be visible
+ * to the caller of wait* happens before the call to CallbackBase::notify.
+ *
+ * CallbackBase::notify must be called exactly once on a given callback
+ * object.
+ */
+ void notify();
+
+ private:
+ // Same as CallbackBase::join_thread but assumes we already hold a lock on
+ // mMutex.
+ void join_thread_locked();
+
+ bool mNotified;
+ std::mutex mMutex;
+ std::condition_variable mCondition;
+ std::function<bool(void)> mPostWork;
+ std::thread mThread;
+};
+
+/**
+ * The PreparedModelCallback class is used to receive the error status of
+ * preparing a model as well as the prepared model from a task executing
+ * asynchronously with respect to the runtime. If a calling thread calls wait*
+ * or get* on a PreparedModelCallback object and the corresponding asynchronous
+ * task has not finished preparing the model, the calling thread will block
+ * until the asynchronous task has called notify. For more information on the
+ * synchronization behavior, refer to the CallbackBase class.
+ *
+ * This class inherits the basic blocking and signaling calls from
+ * CallbackBase, and implements the HIDL notify call from
+ * IPreparedModelCallback. This callback object is passed as an argument to
+ * IDevice::prepareModel.
+ */
+class PreparedModelCallback : public CallbackBase, public IPreparedModelCallback {
+ public:
+ PreparedModelCallback();
+ ~PreparedModelCallback() override;
+
+ /**
+ * IPreparedModelCallback::notify marks the callback object with the return
+ * status of the asynchronous model preparation along with the prepared
+ * model, and calls CallbackBase::notify, enabling all prior and future
+ * wait* calls on the PreparedModelCallback object to proceed. For more
+ * information on the synchronization behavior, refer to the CallbackBase
+ * class.
+ *
+ * IPreparedModelCallback::notify must be called exactly once on a given
+ * PreparedModelCallback object.
+ *
+ * @param status Error status returned from asynchronously preparing the
+ * model; will be:
+ * - NONE if the asynchronous preparation was successful
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
+ * - INVALID_ARGUMENT if the input model is invalid
+ * @param preparedModel Returned model that has been prepared for execution,
+ * nullptr if the model was unable to be prepared.
+ */
+ Return<void> notify(ErrorStatus status, const sp<IPreparedModel>& preparedModel) override;
+
+ /**
+ * Retrieves the error status returned from the asynchronous task launched
+ * by IDevice::prepareModel. If IDevice::prepareModel has not finished
+ * asynchronously preparing the model, this call will block until the
+ * asynchronous task notifies the object.
+ *
+ * @return status Error status returned from asynchronously preparing the
+ * model; will be:
+ * - NONE if the asynchronous preparation was successful
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
+ * - INVALID_ARGUMENT if the input model is invalid
+ */
+ ErrorStatus getStatus();
+
+ /**
+ * Retrieves the model that has been prepared for execution from the
+ * asynchronous task launched by IDevice::prepareModel. If
+ * IDevice::prepareModel has not finished asynchronously preparing the
+ * model, this call will block until the asynchronous task notifies the
+ * object.
+ *
+ * @return preparedModel Returned model that has been prepared for
+ * execution, nullptr if the model was unable to be
+ * prepared.
+ */
+ sp<IPreparedModel> getPreparedModel();
+
+ private:
+ ErrorStatus mErrorStatus;
+ sp<IPreparedModel> mPreparedModel;
+};
+
+/**
+ * The ExecutionCallback class is used to receive the error status of the
+ * execution from a task executing asynchronously with respect to the runtime.
+ * If a calling thread calls wait* or get* on a PreparedModelCallback object and
+ * the corresponding asynchronous task has not finished the execution, the
+ * calling thread will block until the asynchronous task has called notify. For
+ * more information on the synchronization behavior, refer to the CallbackBase
+ * class.
+ *
+ * This class inherits the basic blocking and signaling calls from
+ * CallbackBase, and implements the HIDL notify call from
+ * IExecutionCallback. This callback object is passed as an argument to
+ * IPreparedModel::execute.
+ */
+class ExecutionCallback : public CallbackBase, public IExecutionCallback {
+ public:
+ ExecutionCallback();
+ ~ExecutionCallback() override;
+
+ /**
+ * IExecutionCallback::notify marks the callback object with the return
+ * status of the asynchronous execution that held this callback and enables
+ * all prior and future wait* calls on the ExecutionCallback object to
+ * proceed. For more information on the synchronization behavior, refer to
+ * the CallbackBase class.
+ *
+ * IExecutionCallback::notify must be called exactly once on a given
+ * ExecutionCallback object.
+ *
+ * @param status Error status returned from asynchronously preparing the
+ * model; will be:
+ * - NONE if the asynchronous execution was successful
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
+ * - OUTPUT_INSUFFICIENT_SIZE if provided output buffer is
+ * not large enough to store the resultant values
+ * - INVALID_ARGUMENT if the input request is invalid
+ */
+ Return<void> notify(ErrorStatus status) override;
+
+ /**
+ * Retrieves the error status returned from the asynchronous task launched
+ * by IPreparedModel::execute. If IPreparedModel::execute has not finished
+ * asynchronously executing, this call will block until the asynchronous task
+ * notifies the object.
+ *
+ * @return status Error status returned from asynchronously preparing the
+ * model; will be:
+ * - NONE if the asynchronous execution was successful
+ * - DEVICE_UNAVAILABLE if driver is offline or busy
+ * - GENERAL_FAILURE if there is an unspecified error
+ * - OUTPUT_INSUFFICIENT_SIZE if provided output buffer is
+ * not large enough to store the resultant values
+ * - INVALID_ARGUMENT if the input request is invalid
+ */
+ ErrorStatus getStatus();
+
+ private:
+ ErrorStatus mErrorStatus;
+};
+
+
+// template function implementation(s) below this point
+
+template<class Rep, class Period>
+std::cv_status CallbackBase::wait_for(const std::chrono::duration<Rep,Period>& timeout_duration) {
+ std::unique_lock<std::mutex> lock(mMutex);
+ std::cv_status status = mCondition.wait_for(lock, timeout_duration, [this]{return mNotified;});
+ if (status != std::cv_status::timeout) {
+ join_thread_locked();
+ }
+ return status;
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace neuralnetworks
+} // namespace hardware
+} // namespace android
+
+#endif // ANDROID_HARDWARE_NEURALNETWORKS_V1_0_CALLBACKS_H
diff --git a/neuralnetworks/1.0/vts/functional/Event.cpp b/neuralnetworks/1.0/vts/functional/Event.cpp
deleted file mode 100644
index efaacb3..0000000
--- a/neuralnetworks/1.0/vts/functional/Event.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "Event.h"
-#include <android-base/logging.h>
-
-namespace android {
-namespace hardware {
-namespace neuralnetworks {
-namespace V1_0 {
-namespace implementation {
-
-Event::Event() : mStatus(Status::WAITING) {}
-
-Event::~Event() {
- // Note that we cannot call Event::join_thread from here: Event is
- // intended to be reference counted, and it is possible that the
- // reference count drops to zero in the bound thread, causing the
- // bound thread to call this destructor. If a thread tries to join
- // itself, it throws an exception, producing a message like the
- // following:
- //
- // terminating with uncaught exception of type std::__1::system_error:
- // thread::join failed: Resource deadlock would occur
-}
-
-Return<void> Event::notify(ErrorStatus status) {
- {
- std::lock_guard<std::mutex> lock(mMutex);
- mStatus = status == ErrorStatus::NONE ? Status::SUCCESS : Status::ERROR;
- if (mStatus == Status::SUCCESS && mCallback != nullptr) {
- bool success = mCallback();
- if (!success) {
- LOG(ERROR) << "Event::notify -- callback failed";
- }
- }
- }
- mCondition.notify_all();
- return Void();
-}
-
-Event::Status Event::poll() {
- std::lock_guard<std::mutex> lock(mMutex);
- return mStatus;
-}
-
-Event::Status Event::wait() {
- std::unique_lock<std::mutex> lock(mMutex);
- mCondition.wait(lock, [this]{return mStatus != Status::WAITING;});
- join_thread_locked();
- return mStatus;
-}
-
-bool Event::on_finish(std::function<bool(void)> callback) {
- std::lock_guard<std::mutex> lock(mMutex);
- if (mCallback != nullptr) {
- LOG(ERROR) << "Event::on_finish -- a callback has already been bound to this event";
- return false;
- }
- if (callback == nullptr) {
- LOG(ERROR) << "Event::on_finish -- the new callback is invalid";
- return false;
- }
- mCallback = std::move(callback);
- return true;
-}
-
-bool Event::bind_thread(std::thread&& asyncThread) {
- std::lock_guard<std::mutex> lock(mMutex);
- if (mThread.joinable()) {
- LOG(ERROR) << "Event::bind_thread -- a thread has already been bound to this event";
- return false;
- }
- if (!asyncThread.joinable()) {
- LOG(ERROR) << "Event::bind_thread -- the new thread is not joinable";
- return false;
- }
- mThread = std::move(asyncThread);
- return true;
-}
-
-void Event::join_thread() {
- std::lock_guard<std::mutex> lock(mMutex);
- join_thread_locked();
-}
-
-void Event::join_thread_locked() {
- if (mThread.joinable()) {
- mThread.join();
- }
-}
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace neuralnetworks
-} // namespace hardware
-} // namespace android
diff --git a/neuralnetworks/1.0/vts/functional/Event.h b/neuralnetworks/1.0/vts/functional/Event.h
deleted file mode 100644
index 7dd4070..0000000
--- a/neuralnetworks/1.0/vts/functional/Event.h
+++ /dev/null
@@ -1,216 +0,0 @@
-#ifndef ANDROID_HARDWARE_NEURALNETWORKS_V1_0_EVENT_H
-#define ANDROID_HARDWARE_NEURALNETWORKS_V1_0_EVENT_H
-
-#include <android/hardware/neuralnetworks/1.0/IEvent.h>
-#include <chrono>
-#include <condition_variable>
-#include <functional>
-#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
-#include <mutex>
-#include <thread>
-
-namespace android {
-namespace hardware {
-namespace neuralnetworks {
-namespace V1_0 {
-namespace implementation {
-
-using ::android::hardware::hidl_array;
-using ::android::hardware::hidl_memory;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-/**
- * The Event class is used internally by the Neuralnetworks runtime to
- * synchronize between different threads. An asynchronous task is launched
- * paired with an event object. When a client thread requires the output being
- * processed by the asynchronous task, the client thread can wait for the result
- * and be blocked until it has completed or a timeout condition has been
- * reached, or poll the result periodically. Both poll and wait* may safely be
- * called concurrently, even on the same event. When the server thread has
- * completed, it should immediately call "notify" to indicate the corresponding
- * output has been produced and awaken any client threads waiting on the event.
- *
- * This class exists to enable synchronization across HIDL. When synchronization
- * is only required in the same process, consider using std::future, std::mutex,
- * std::condition_variable, or std::experimental::latch instead.
- */
-struct Event : public IEvent {
- Event();
- ~Event() override;
-
- /**
- * Event::Status::WAITING -- The corresponding asynchronous execution has
- * not yet finished.
- * Event::Status::SUCCESS -- The corresponding asynchronous execution has
- * succeeded and the output is ready to be
- * consumed.
- * Event::Status::TIMEOUT -- The calling thread has waited longer than the
- * user has specified. This only applies to the
- * methods Event::wait_for and Event::wait_until.
- * Event::Status::ERROR -- The corresponding asynchronous execution has
- * failed to properly execute.
- */
- enum class Status : uint32_t {
- WAITING,
- SUCCESS,
- TIMEOUT,
- ERROR,
- };
-
- /**
- * IEvent::notify marks the event with the return status of the
- * asynchronous call the event is paired with and enables all
- * prior and future wait calls on the Event object to proceed. The
- * call to IEvent::notify happens before any wait* calls on
- * this event return (except in the case of TIMEOUT) and before
- * any poll calls that see the resulting status. The asynchronous
- * call the event is paired with must ensure that any update to
- * state that should be visible to the caller of wait* or poll
- * happens before the call to IEvent::notify.
- *
- * IEvent::notify can be called at most once on a given event.
- *
- * @param neuralnetworks::V1_0::ErrorStatus ErrorStatus::NONE on success
- */
- Return<void> notify(ErrorStatus status) override;
-
- /**
- * Event::poll returns the current status of the event.
- *
- * @return Status SUCCESS, ERROR, or WAITING
- */
- Event::Status poll();
-
- /**
- * Event::wait blocks until the event has been signaled.
- *
- * @return Status SUCCESS or ERROR
- */
- Event::Status wait();
-
- /**
- * Event::wait_for blocks until the event has been signaled or the time
- * duration from the time the wait_for function was called has expired,
- * whichever comes first.
- *
- * @return Status SUCCESS, ERROR, or TIMEOUT
- */
- template<class Rep, class Period>
- Event::Status wait_for(const std::chrono::duration<Rep,Period>& timeout_duration);
-
- /**
- * Event::wait_until blocks until the event has been signaled or a certain
- * time has been reached, whichever comes first.
- *
- * @return Status SUCCESS, ERROR, or TIMEOUT
- */
- template<class Clock, class Duration>
- Event::Status wait_until(const std::chrono::time_point<Clock,Duration>& timeout_duration);
-
- /**
- * Event::on_finish binds a callback function to the event. The
- * callback will be executed when IEvent::notify is called, before
- * any calls to wait* return. (Note that wait_for or wait_until
- * can return TIMEOUT before IEvent::notify is called for the
- * first time, and hence before the callback is executed.)
- *
- * The callback function must not synchronize with or otherwise
- * access the event object it is bound to.
- *
- * Event::on_finish can be called at most once on a given event.
- *
- * @param callback Function to be invoked the first time IEvent::notify is
- * called. Must have a target -- i.e., must not compare equal
- * to nullptr. Callback returns true if it successfully
- * completes, false if it fails.
- * @return bool True if the callback was successfully bound, false if
- * unsuccessful.
- *
- * TODO: What if notify has already been called before on_finish?
- * TODO: Why does the return value of the callback matter?
- */
- bool on_finish(std::function<bool(void)> callback);
-
- /**
- * Event::bind_thread binds a thread to the event for later use by
- * Event::join_thread.
- *
- * The thread must be passed using std::move.
- *
- * Once a thread is bound with Event::bind_thread, the client code
- * should ensure that one of the following occurs before the event is
- * destroyed:
- * - Event::join_thread has been called.
- * - Event::wait has been called.
- * - Event::wait_for has been called and returned other than TIMEOUT.
- * - Event::wait_until has been called and returned other than TIMEOUT.
- *
- * The bound thread shall not call any Event method with the exception of
- * IEvent::notify, which it will call when the thread has finished its
- * computation.
- *
- * Event::bind_thread can be called at most once on a given event.
- *
- * @param asyncThread Thread to be bound to the event. The thread object
- * must represent a thread of execution -- i.e.,
- * asyncThread.joinable() must be true.
- * @return bool True if successful, false if thread was not properly bound.
- */
- bool bind_thread(std::thread&& asyncThread);
-
- /**
- * Event::join_thread ensures that the thread (if any) bound to
- * this event with Event::bind_thread has fully finished and
- * cleaned its resources. It is legal to call this function
- * multiple times, concurrently or sequentially.
- */
- void join_thread();
-
- private:
- // Same as Event::join_thread but assumes we already hold a lock on mMutex.
- void join_thread_locked();
-
- Status mStatus;
- std::mutex mMutex;
- std::condition_variable mCondition;
- std::function<bool(void)> mCallback;
- std::thread mThread;
-};
-
-
-// template function implementations
-
-template<class Rep, class Period>
-Event::Status Event::wait_for(const std::chrono::duration<Rep,Period>& timeout_duration) {
- std::unique_lock<std::mutex> lock(mMutex);
- std::cv_status status = mCondition.wait_for(lock, timeout_duration,
- [this]{return mStatus != Status::WAITING;});
- if (status != std::cv_status::timeout) {
- join_thread_locked();
- }
- return status != std::cv_status::timeout ? mStatus : Status::TIMEOUT;
-}
-
-template<class Clock, class Duration>
-Event::Status Event::wait_until(const std::chrono::time_point<Clock,Duration>& timeout_time) {
- std::unique_lock<std::mutex> lock(mMutex);
- std::cv_status status = mCondition.wait_until(lock, timeout_time,
- [this]{return mStatus != Status::WAITING;});
- if (status != std::cv_status::timeout) {
- join_thread_locked();
- }
- return status != std::cv_status::timeout ? mStatus : Status::TIMEOUT;
-}
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace neuralnetworks
-} // namespace hardware
-} // namespace android
-
-#endif // ANDROID_HARDWARE_NEURALNETWORKS_V1_0_EVENT_H
diff --git a/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp b/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp
index db90ac2..735528b 100644
--- a/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp
+++ b/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp
@@ -14,13 +14,14 @@
* limitations under the License.
*/
-#include "Event.h"
+#include "Callbacks.h"
#include "TestHarness.h"
#include "VtsHalNeuralnetworksV1_0TargetTest.h"
#include <android-base/logging.h>
#include <android/hidl/memory/1.0/IMemory.h>
#include <hidlmemory/mapping.h>
+#include <iostream>
namespace android {
namespace hardware {
@@ -32,7 +33,8 @@
hidl_memory allocateSharedMemory(int64_t size, const std::string& type = "ashmem");
namespace generated_tests {
-using ::android::hardware::neuralnetworks::V1_0::implementation::Event;
+using ::android::hardware::neuralnetworks::V1_0::implementation::ExecutionCallback;
+using ::android::hardware::neuralnetworks::V1_0::implementation::PreparedModelCallback;
using ::generated_tests::filter;
using ::generated_tests::for_all;
using ::generated_tests::for_each;
@@ -42,27 +44,74 @@
using ::generated_tests::Float32Operands;
using ::generated_tests::Int32Operands;
using ::generated_tests::Quant8Operands;
+using ::generated_tests::compare;
+
+template <typename ty>
+void copy_back_(MixedTyped* dst, const std::vector<RequestArgument>& ra, char* src) {
+ MixedTyped& test = *dst;
+ for_each(test, [&ra, src](int index, std::vector<ty>& m) {
+ ASSERT_EQ(m.size(), ra[index].location.length / sizeof(ty));
+ char* begin = src + ra[index].location.offset;
+ memcpy(m.data(), begin, ra[index].location.length);
+ });
+}
+
+void copy_back(MixedTyped* dst, const std::vector<RequestArgument>& ra, char* src) {
+ copy_back_<float>(dst, ra, src);
+ copy_back_<int32_t>(dst, ra, src);
+ copy_back_<uint8_t>(dst, ra, src);
+}
+
// Top level driver for models and examples generated by test_generator.py
// Test driver for those generated from ml/nn/runtime/test/spec
void Execute(const sp<IDevice>& device, std::function<Model(void)> create_model,
std::function<bool(int)> is_ignored,
const std::vector<MixedTypedExampleType>& examples) {
- Model model = create_model();
- sp<IPreparedModel> preparedModel;
- sp<Event> preparationEvent = new Event();
- ASSERT_NE(nullptr, preparationEvent.get());
- Return<void> prepareRet = device->prepareModel(
- model, preparationEvent, [&](ErrorStatus status, const sp<IPreparedModel>& prepared) {
- EXPECT_EQ(ErrorStatus::NONE, status);
- preparedModel = prepared;
- });
- ASSERT_TRUE(prepareRet.isOk());
- ASSERT_NE(nullptr, preparedModel.get());
- Event::Status preparationStatus = preparationEvent->wait();
- EXPECT_EQ(Event::Status::SUCCESS, preparationStatus);
-
const uint32_t INPUT = 0;
const uint32_t OUTPUT = 1;
+ Model model = create_model();
+
+ // see if service can handle model
+ ErrorStatus supportedStatus;
+ bool fullySupportsModel = false;
+ Return<void> supportedCall = device->getSupportedOperations(
+ model, [&](ErrorStatus status, const hidl_vec<bool>& supported) {
+ supportedStatus = status;
+ ASSERT_NE(0ul, supported.size());
+ fullySupportsModel =
+ std::all_of(supported.begin(), supported.end(), [](bool valid) { return valid; });
+ });
+ ASSERT_TRUE(supportedCall.isOk());
+ ASSERT_EQ(ErrorStatus::NONE, supportedStatus);
+
+ // launch prepare model
+ sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
+ ASSERT_NE(nullptr, preparedModelCallback.get());
+ Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
+ ASSERT_TRUE(prepareLaunchStatus.isOk());
+
+ // retrieve prepared model
+ preparedModelCallback->wait();
+ ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
+ sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
+ if (fullySupportsModel) {
+ EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
+ } else {
+ EXPECT_TRUE(prepareReturnStatus == ErrorStatus::NONE ||
+ prepareReturnStatus == ErrorStatus::GENERAL_FAILURE);
+ }
+
+ // early termination if vendor service cannot fully prepare model
+ if (!fullySupportsModel && prepareReturnStatus == ErrorStatus::GENERAL_FAILURE) {
+ ASSERT_EQ(nullptr, preparedModel.get());
+ LOG(INFO) << "NN VTS: Early termination of test because vendor service cannot "
+ "prepare model that it does not support.";
+ std::cout << "[ ] Early termination of test because vendor service cannot "
+ "prepare model that it does not support."
+ << std::endl;
+ return;
+ }
+ ASSERT_NE(nullptr, preparedModel.get());
int example_no = 1;
for (auto& example : examples) {
@@ -82,14 +131,17 @@
.location = {.poolIndex = INPUT, .offset = 0, .length = static_cast<uint32_t>(s)},
.dimensions = {},
};
- inputs_info[index] = arg;
+ RequestArgument arg_empty = {
+ .hasNoValue = true,
+ };
+ inputs_info[index] = s ? arg : arg_empty;
inputSize += s;
});
// Compute offset for inputs 1 and so on
{
size_t offset = 0;
for (auto& i : inputs_info) {
- i.location.offset = offset;
+ if (!i.hasNoValue) i.location.offset = offset;
offset += i.location.length;
}
}
@@ -97,9 +149,7 @@
MixedTyped test; // holding test results
// Go through all outputs, initialize RequestArgument descriptors
- resize_accordingly<float>(golden, test);
- resize_accordingly<int32_t>(golden, test);
- resize_accordingly<uint8_t>(golden, test);
+ resize_accordingly(golden, test);
for_all(golden, [&outputs_info, &outputSize](int index, auto, auto s) {
if (outputs_info.size() <= static_cast<size_t>(index)) outputs_info.resize(index + 1);
RequestArgument arg = {
@@ -144,52 +194,32 @@
inputMemory->commit();
outputMemory->commit();
- // execute request
- sp<Event> executionEvent = new Event();
- ASSERT_NE(nullptr, executionEvent.get());
- Return<ErrorStatus> executeStatus = preparedModel->execute(
- {.inputs = inputs_info, .outputs = outputs_info, .pools = pools}, executionEvent);
- ASSERT_TRUE(executeStatus.isOk());
- EXPECT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(executeStatus));
- Event::Status eventStatus = executionEvent->wait();
- EXPECT_EQ(Event::Status::SUCCESS, eventStatus);
+
+ // launch execution
+ sp<ExecutionCallback> executionCallback = new ExecutionCallback();
+ ASSERT_NE(nullptr, executionCallback.get());
+ Return<ErrorStatus> executionLaunchStatus = preparedModel->execute(
+ {.inputs = inputs_info, .outputs = outputs_info, .pools = pools}, executionCallback);
+ ASSERT_TRUE(executionLaunchStatus.isOk());
+ EXPECT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(executionLaunchStatus));
+
+ // retrieve execution status
+ executionCallback->wait();
+ ErrorStatus executionReturnStatus = executionCallback->getStatus();
+ EXPECT_EQ(ErrorStatus::NONE, executionReturnStatus);
// validate results
outputMemory->read();
-#define COPY_BACK(ty) \
- for_each<ty>(test, [&outputs_info, outputPtr](int index, std::vector<ty>& m) { \
- RequestArgument& i = outputs_info[index]; \
- ASSERT_EQ(m.size(), i.location.length / sizeof(ty)); \
- char* begin = outputPtr + i.location.offset; \
- memcpy(m.data(), begin, i.location.length); \
- });
- COPY_BACK(float);
- COPY_BACK(int32_t);
- COPY_BACK(uint8_t);
-#undef COPY_BACK
+ copy_back(&test, outputs_info, outputPtr);
outputMemory->commit();
// Filter out don't cares
MixedTyped filtered_golden;
MixedTyped filtered_test;
- filter<float>(golden, &filtered_golden, is_ignored);
- filter<float>(test, &filtered_test, is_ignored);
- filter<int32_t>(golden, &filtered_golden, is_ignored);
- filter<int32_t>(test, &filtered_test, is_ignored);
- filter<uint8_t>(golden, &filtered_golden, is_ignored);
- filter<uint8_t>(test, &filtered_test, is_ignored);
+ filter(golden, &filtered_golden, is_ignored);
+ filter(test, &filtered_test, is_ignored);
// We want "close-enough" results for float
- for_each<float>(filtered_golden, [&filtered_test](int index, auto& golden_float) {
- auto& test_float_operands = std::get<Float32Operands>(filtered_test);
- auto& test_float = test_float_operands[index];
- for (unsigned int i = 0; i < golden_float.size(); i++) {
- SCOPED_TRACE(i);
- EXPECT_NEAR(golden_float[i], test_float[i], 1.e-5);
- }
- });
- EXPECT_EQ(std::get<Int32Operands>(filtered_golden), std::get<Int32Operands>(filtered_test));
- EXPECT_EQ(std::get<Quant8Operands>(filtered_golden),
- std::get<Quant8Operands>(filtered_test));
+ compare(filtered_golden, filtered_test);
}
}
diff --git a/neuralnetworks/1.0/vts/functional/Models.cpp b/neuralnetworks/1.0/vts/functional/Models.cpp
new file mode 100644
index 0000000..8ce4f25
--- /dev/null
+++ b/neuralnetworks/1.0/vts/functional/Models.cpp
@@ -0,0 +1,207 @@
+/*
+ * 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 "neuralnetworks_hidl_hal_test"
+
+#include "Models.h"
+#include <android/hidl/memory/1.0/IMemory.h>
+#include <hidlmemory/mapping.h>
+#include <vector>
+
+namespace android {
+namespace hardware {
+namespace neuralnetworks {
+namespace V1_0 {
+namespace vts {
+namespace functional {
+
+// create a valid model
+Model createValidTestModel() {
+ const std::vector<float> operand2Data = {5.0f, 6.0f, 7.0f, 8.0f};
+ const uint32_t size = operand2Data.size() * sizeof(float);
+
+ const uint32_t operand1 = 0;
+ const uint32_t operand2 = 1;
+ const uint32_t operand3 = 2;
+ const uint32_t operand4 = 3;
+
+ const std::vector<Operand> operands = {
+ {
+ .type = OperandType::TENSOR_FLOAT32,
+ .dimensions = {1, 2, 2, 1},
+ .numberOfConsumers = 1,
+ .scale = 0.0f,
+ .zeroPoint = 0,
+ .lifetime = OperandLifeTime::MODEL_INPUT,
+ .location = {.poolIndex = 0, .offset = 0, .length = 0},
+ },
+ {
+ .type = OperandType::TENSOR_FLOAT32,
+ .dimensions = {1, 2, 2, 1},
+ .numberOfConsumers = 1,
+ .scale = 0.0f,
+ .zeroPoint = 0,
+ .lifetime = OperandLifeTime::CONSTANT_COPY,
+ .location = {.poolIndex = 0, .offset = 0, .length = size},
+ },
+ {
+ .type = OperandType::INT32,
+ .dimensions = {},
+ .numberOfConsumers = 1,
+ .scale = 0.0f,
+ .zeroPoint = 0,
+ .lifetime = OperandLifeTime::CONSTANT_COPY,
+ .location = {.poolIndex = 0, .offset = size, .length = sizeof(int32_t)},
+ },
+ {
+ .type = OperandType::TENSOR_FLOAT32,
+ .dimensions = {1, 2, 2, 1},
+ .numberOfConsumers = 0,
+ .scale = 0.0f,
+ .zeroPoint = 0,
+ .lifetime = OperandLifeTime::MODEL_OUTPUT,
+ .location = {.poolIndex = 0, .offset = 0, .length = 0},
+ },
+ };
+
+ const std::vector<Operation> operations = {{
+ .type = OperationType::ADD, .inputs = {operand1, operand2, operand3}, .outputs = {operand4},
+ }};
+
+ const std::vector<uint32_t> inputIndexes = {operand1};
+ const std::vector<uint32_t> outputIndexes = {operand4};
+ std::vector<uint8_t> operandValues(
+ reinterpret_cast<const uint8_t*>(operand2Data.data()),
+ reinterpret_cast<const uint8_t*>(operand2Data.data()) + size);
+ int32_t activation[1] = {static_cast<int32_t>(FusedActivationFunc::NONE)};
+ operandValues.insert(operandValues.end(), reinterpret_cast<const uint8_t*>(&activation[0]),
+ reinterpret_cast<const uint8_t*>(&activation[1]));
+
+ const std::vector<hidl_memory> pools = {};
+
+ return {
+ .operands = operands,
+ .operations = operations,
+ .inputIndexes = inputIndexes,
+ .outputIndexes = outputIndexes,
+ .operandValues = operandValues,
+ .pools = pools,
+ };
+}
+
+// create first invalid model
+Model createInvalidTestModel1() {
+ Model model = createValidTestModel();
+ model.operations[0].type = static_cast<OperationType>(0xDEADBEEF); /* INVALID */
+ return model;
+}
+
+// create second invalid model
+Model createInvalidTestModel2() {
+ Model model = createValidTestModel();
+ const uint32_t operand1 = 0;
+ const uint32_t operand5 = 4; // INVALID OPERAND
+ model.inputIndexes = std::vector<uint32_t>({operand1, operand5 /* INVALID OPERAND */});
+ return model;
+}
+
+// allocator helper
+hidl_memory allocateSharedMemory(int64_t size, const std::string& type = "ashmem") {
+ hidl_memory memory;
+
+ sp<IAllocator> allocator = IAllocator::getService(type);
+ if (!allocator.get()) {
+ return {};
+ }
+
+ Return<void> ret = allocator->allocate(size, [&](bool success, const hidl_memory& mem) {
+ ASSERT_TRUE(success);
+ memory = mem;
+ });
+ if (!ret.isOk()) {
+ return {};
+ }
+
+ return memory;
+}
+
+// create a valid request
+Request createValidTestRequest() {
+ std::vector<float> inputData = {1.0f, 2.0f, 3.0f, 4.0f};
+ std::vector<float> outputData = {-1.0f, -1.0f, -1.0f, -1.0f};
+ const uint32_t INPUT = 0;
+ const uint32_t OUTPUT = 1;
+
+ // prepare inputs
+ uint32_t inputSize = static_cast<uint32_t>(inputData.size() * sizeof(float));
+ uint32_t outputSize = static_cast<uint32_t>(outputData.size() * sizeof(float));
+ std::vector<RequestArgument> inputs = {{
+ .location = {.poolIndex = INPUT, .offset = 0, .length = inputSize}, .dimensions = {},
+ }};
+ std::vector<RequestArgument> outputs = {{
+ .location = {.poolIndex = OUTPUT, .offset = 0, .length = outputSize}, .dimensions = {},
+ }};
+ std::vector<hidl_memory> pools = {allocateSharedMemory(inputSize),
+ allocateSharedMemory(outputSize)};
+ if (pools[INPUT].size() == 0 || pools[OUTPUT].size() == 0) {
+ return {};
+ }
+
+ // load data
+ sp<IMemory> inputMemory = mapMemory(pools[INPUT]);
+ sp<IMemory> outputMemory = mapMemory(pools[OUTPUT]);
+ if (inputMemory.get() == nullptr || outputMemory.get() == nullptr) {
+ return {};
+ }
+ float* inputPtr = reinterpret_cast<float*>(static_cast<void*>(inputMemory->getPointer()));
+ float* outputPtr = reinterpret_cast<float*>(static_cast<void*>(outputMemory->getPointer()));
+ if (inputPtr == nullptr || outputPtr == nullptr) {
+ return {};
+ }
+ inputMemory->update();
+ outputMemory->update();
+ std::copy(inputData.begin(), inputData.end(), inputPtr);
+ std::copy(outputData.begin(), outputData.end(), outputPtr);
+ inputMemory->commit();
+ outputMemory->commit();
+
+ return {.inputs = inputs, .outputs = outputs, .pools = pools};
+}
+
+// create first invalid request
+Request createInvalidTestRequest1() {
+ Request request = createValidTestRequest();
+ const uint32_t INVALID = 2;
+ std::vector<float> inputData = {1.0f, 2.0f, 3.0f, 4.0f};
+ uint32_t inputSize = static_cast<uint32_t>(inputData.size() * sizeof(float));
+ request.inputs[0].location = {
+ .poolIndex = INVALID /* INVALID */, .offset = 0, .length = inputSize};
+ return request;
+}
+
+// create second invalid request
+Request createInvalidTestRequest2() {
+ Request request = createValidTestRequest();
+ request.inputs[0].dimensions = std::vector<uint32_t>({1, 2, 3, 4, 5, 6, 7, 8} /* INVALID */);
+ return request;
+}
+
+} // namespace functional
+} // namespace vts
+} // namespace V1_0
+} // namespace neuralnetworks
+} // namespace hardware
+} // namespace android
diff --git a/neuralnetworks/1.0/vts/functional/Models.h b/neuralnetworks/1.0/vts/functional/Models.h
new file mode 100644
index 0000000..e0d57d5
--- /dev/null
+++ b/neuralnetworks/1.0/vts/functional/Models.h
@@ -0,0 +1,43 @@
+/*
+ * 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 "neuralnetworks_hidl_hal_test"
+
+#include "VtsHalNeuralnetworksV1_0TargetTest.h"
+
+namespace android {
+namespace hardware {
+namespace neuralnetworks {
+namespace V1_0 {
+namespace vts {
+namespace functional {
+
+// create the model
+Model createValidTestModel();
+Model createInvalidTestModel1();
+Model createInvalidTestModel2();
+
+// create the request
+Request createValidTestRequest();
+Request createInvalidTestRequest1();
+Request createInvalidTestRequest2();
+
+} // namespace functional
+} // namespace vts
+} // namespace V1_0
+} // namespace neuralnetworks
+} // namespace hardware
+} // namespace android
diff --git a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp
index 453e3e5..b99e20e 100644
--- a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp
+++ b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.cpp
@@ -17,7 +17,9 @@
#define LOG_TAG "neuralnetworks_hidl_hal_test"
#include "VtsHalNeuralnetworksV1_0TargetTest.h"
-#include "Event.h"
+
+#include "Callbacks.h"
+#include "Models.h"
#include "TestHarness.h"
#include <android-base/logging.h>
@@ -31,8 +33,10 @@
namespace vts {
namespace functional {
-using ::android::hardware::neuralnetworks::V1_0::implementation::Event;
+using ::android::hardware::neuralnetworks::V1_0::implementation::ExecutionCallback;
+using ::android::hardware::neuralnetworks::V1_0::implementation::PreparedModelCallback;
using ::generated_tests::MixedTypedExampleType;
+
namespace generated_tests {
extern void Execute(const sp<IDevice>&, std::function<Model(void)>, std::function<bool(int)>,
const std::vector<MixedTypedExampleType>&);
@@ -65,6 +69,28 @@
void NeuralnetworksHidlTest::TearDown() {}
+sp<IPreparedModel> NeuralnetworksHidlTest::doPrepareModelShortcut() {
+ Model model = createValidTestModel();
+
+ sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
+ if (preparedModelCallback == nullptr) {
+ return nullptr;
+ }
+ Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
+ if (!prepareLaunchStatus.isOk() || prepareLaunchStatus != ErrorStatus::NONE) {
+ return nullptr;
+ }
+
+ preparedModelCallback->wait();
+ ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
+ sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
+ if (prepareReturnStatus != ErrorStatus::NONE || preparedModel == nullptr) {
+ return nullptr;
+ }
+
+ return preparedModel;
+}
+
// create device test
TEST_F(NeuralnetworksHidlTest, CreateDevice) {}
@@ -80,9 +106,6 @@
Return<void> ret =
device->getCapabilities([](ErrorStatus status, const Capabilities& capabilities) {
EXPECT_EQ(ErrorStatus::NONE, status);
- EXPECT_NE(nullptr, capabilities.supportedOperationTuples.data());
- EXPECT_NE(0ull, capabilities.supportedOperationTuples.size());
- EXPECT_EQ(0u, static_cast<uint32_t>(capabilities.cachesCompilation) & ~0x1);
EXPECT_LT(0.0f, capabilities.float32Performance.execTime);
EXPECT_LT(0.0f, capabilities.float32Performance.powerUsage);
EXPECT_LT(0.0f, capabilities.quantized8Performance.execTime);
@@ -91,107 +114,9 @@
EXPECT_TRUE(ret.isOk());
}
-namespace {
-// create the model
-Model createTestModel() {
- const std::vector<float> operand2Data = {5.0f, 6.0f, 7.0f, 8.0f};
- const uint32_t size = operand2Data.size() * sizeof(float);
-
- const uint32_t operand1 = 0;
- const uint32_t operand2 = 1;
- const uint32_t operand3 = 2;
- const uint32_t operand4 = 3;
-
- const std::vector<Operand> operands = {
- {
- .type = OperandType::TENSOR_FLOAT32,
- .dimensions = {1, 2, 2, 1},
- .numberOfConsumers = 1,
- .scale = 0.0f,
- .zeroPoint = 0,
- .lifetime = OperandLifeTime::MODEL_INPUT,
- .location = {.poolIndex = 0, .offset = 0, .length = 0},
- },
- {
- .type = OperandType::TENSOR_FLOAT32,
- .dimensions = {1, 2, 2, 1},
- .numberOfConsumers = 1,
- .scale = 0.0f,
- .zeroPoint = 0,
- .lifetime = OperandLifeTime::CONSTANT_COPY,
- .location = {.poolIndex = 0, .offset = 0, .length = size},
- },
- {
- .type = OperandType::INT32,
- .dimensions = {},
- .numberOfConsumers = 1,
- .scale = 0.0f,
- .zeroPoint = 0,
- .lifetime = OperandLifeTime::CONSTANT_COPY,
- .location = {.poolIndex = 0, .offset = size, .length = sizeof(int32_t)},
- },
- {
- .type = OperandType::TENSOR_FLOAT32,
- .dimensions = {1, 2, 2, 1},
- .numberOfConsumers = 0,
- .scale = 0.0f,
- .zeroPoint = 0,
- .lifetime = OperandLifeTime::MODEL_OUTPUT,
- .location = {.poolIndex = 0, .offset = 0, .length = 0},
- },
- };
-
- const std::vector<Operation> operations = {{
- .opTuple = {OperationType::ADD, OperandType::TENSOR_FLOAT32},
- .inputs = {operand1, operand2, operand3},
- .outputs = {operand4},
- }};
-
- const std::vector<uint32_t> inputIndexes = {operand1};
- const std::vector<uint32_t> outputIndexes = {operand4};
- std::vector<uint8_t> operandValues(
- reinterpret_cast<const uint8_t*>(operand2Data.data()),
- reinterpret_cast<const uint8_t*>(operand2Data.data()) + size);
- int32_t activation[1] = {static_cast<int32_t>(FusedActivationFunc::NONE)};
- operandValues.insert(operandValues.end(), reinterpret_cast<const uint8_t*>(&activation[0]),
- reinterpret_cast<const uint8_t*>(&activation[1]));
-
- const std::vector<hidl_memory> pools = {};
-
- return {
- .operands = operands,
- .operations = operations,
- .inputIndexes = inputIndexes,
- .outputIndexes = outputIndexes,
- .operandValues = operandValues,
- .pools = pools,
- };
-}
-} // anonymous namespace
-
-// allocator helper
-hidl_memory allocateSharedMemory(int64_t size, const std::string& type = "ashmem") {
- hidl_memory memory;
-
- sp<IAllocator> allocator = IAllocator::getService(type);
- if (!allocator.get()) {
- return {};
- }
-
- Return<void> ret = allocator->allocate(size, [&](bool success, const hidl_memory& mem) {
- ASSERT_TRUE(success);
- memory = mem;
- });
- if (!ret.isOk()) {
- return {};
- }
-
- return memory;
-}
-
-// supported subgraph test
-TEST_F(NeuralnetworksHidlTest, SupportedOperationsTest) {
- Model model = createTestModel();
+// supported operations positive test
+TEST_F(NeuralnetworksHidlTest, SupportedOperationsPositiveTest) {
+ Model model = createValidTestModel();
Return<void> ret = device->getSupportedOperations(
model, [&](ErrorStatus status, const hidl_vec<bool>& supported) {
EXPECT_EQ(ErrorStatus::NONE, status);
@@ -200,76 +125,148 @@
EXPECT_TRUE(ret.isOk());
}
-// execute simple graph
-TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphTest) {
- std::vector<float> inputData = {1.0f, 2.0f, 3.0f, 4.0f};
+// supported operations negative test 1
+TEST_F(NeuralnetworksHidlTest, SupportedOperationsNegativeTest1) {
+ Model model = createInvalidTestModel1();
+ Return<void> ret = device->getSupportedOperations(
+ model, [&](ErrorStatus status, const hidl_vec<bool>& supported) {
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, status);
+ (void)supported;
+ });
+ EXPECT_TRUE(ret.isOk());
+}
+
+// supported operations negative test 2
+TEST_F(NeuralnetworksHidlTest, SupportedOperationsNegativeTest2) {
+ Model model = createInvalidTestModel2();
+ Return<void> ret = device->getSupportedOperations(
+ model, [&](ErrorStatus status, const hidl_vec<bool>& supported) {
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, status);
+ (void)supported;
+ });
+ EXPECT_TRUE(ret.isOk());
+}
+
+// prepare simple model positive test
+TEST_F(NeuralnetworksHidlTest, SimplePrepareModelPositiveTest) {
+ Model model = createValidTestModel();
+ sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
+ ASSERT_NE(nullptr, preparedModelCallback.get());
+ Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
+ ASSERT_TRUE(prepareLaunchStatus.isOk());
+ EXPECT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(prepareLaunchStatus));
+
+ preparedModelCallback->wait();
+ ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
+ EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
+ sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
+ EXPECT_NE(nullptr, preparedModel.get());
+}
+
+// prepare simple model negative test 1
+TEST_F(NeuralnetworksHidlTest, SimplePrepareModelNegativeTest1) {
+ Model model = createInvalidTestModel1();
+ sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
+ ASSERT_NE(nullptr, preparedModelCallback.get());
+ Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
+ ASSERT_TRUE(prepareLaunchStatus.isOk());
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, static_cast<ErrorStatus>(prepareLaunchStatus));
+
+ preparedModelCallback->wait();
+ ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, prepareReturnStatus);
+ sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
+ EXPECT_EQ(nullptr, preparedModel.get());
+}
+
+// prepare simple model negative test 2
+TEST_F(NeuralnetworksHidlTest, SimplePrepareModelNegativeTest2) {
+ Model model = createInvalidTestModel2();
+ sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
+ ASSERT_NE(nullptr, preparedModelCallback.get());
+ Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
+ ASSERT_TRUE(prepareLaunchStatus.isOk());
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, static_cast<ErrorStatus>(prepareLaunchStatus));
+
+ preparedModelCallback->wait();
+ ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, prepareReturnStatus);
+ sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
+ EXPECT_EQ(nullptr, preparedModel.get());
+}
+
+// execute simple graph positive test
+TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphPositiveTest) {
std::vector<float> outputData = {-1.0f, -1.0f, -1.0f, -1.0f};
std::vector<float> expectedData = {6.0f, 8.0f, 10.0f, 12.0f};
- const uint32_t INPUT = 0;
const uint32_t OUTPUT = 1;
- // prepare request
- Model model = createTestModel();
- sp<IPreparedModel> preparedModel;
- sp<Event> preparationEvent = new Event();
- ASSERT_NE(nullptr, preparationEvent.get());
- Return<void> prepareRet = device->prepareModel(
- model, preparationEvent, [&](ErrorStatus status, const sp<IPreparedModel>& prepared) {
- EXPECT_EQ(ErrorStatus::NONE, status);
- preparedModel = prepared;
- });
- ASSERT_TRUE(prepareRet.isOk());
+ sp<IPreparedModel> preparedModel = doPrepareModelShortcut();
ASSERT_NE(nullptr, preparedModel.get());
- Event::Status preparationStatus = preparationEvent->wait();
- EXPECT_EQ(Event::Status::SUCCESS, preparationStatus);
+ Request request = createValidTestRequest();
- // prepare inputs
- uint32_t inputSize = static_cast<uint32_t>(inputData.size() * sizeof(float));
- uint32_t outputSize = static_cast<uint32_t>(outputData.size() * sizeof(float));
- std::vector<RequestArgument> inputs = {{
- .location = {.poolIndex = INPUT, .offset = 0, .length = inputSize}, .dimensions = {},
- }};
- std::vector<RequestArgument> outputs = {{
- .location = {.poolIndex = OUTPUT, .offset = 0, .length = outputSize}, .dimensions = {},
- }};
- std::vector<hidl_memory> pools = {allocateSharedMemory(inputSize),
- allocateSharedMemory(outputSize)};
- ASSERT_NE(0ull, pools[INPUT].size());
- ASSERT_NE(0ull, pools[OUTPUT].size());
+ auto postWork = [&] {
+ sp<IMemory> outputMemory = mapMemory(request.pools[OUTPUT]);
+ if (outputMemory == nullptr) {
+ return false;
+ }
+ float* outputPtr = reinterpret_cast<float*>(static_cast<void*>(outputMemory->getPointer()));
+ if (outputPtr == nullptr) {
+ return false;
+ }
+ outputMemory->read();
+ std::copy(outputPtr, outputPtr + outputData.size(), outputData.begin());
+ outputMemory->commit();
+ return true;
+ };
- // load data
- sp<IMemory> inputMemory = mapMemory(pools[INPUT]);
- sp<IMemory> outputMemory = mapMemory(pools[OUTPUT]);
- ASSERT_NE(nullptr, inputMemory.get());
- ASSERT_NE(nullptr, outputMemory.get());
- float* inputPtr = reinterpret_cast<float*>(static_cast<void*>(inputMemory->getPointer()));
- float* outputPtr = reinterpret_cast<float*>(static_cast<void*>(outputMemory->getPointer()));
- ASSERT_NE(nullptr, inputPtr);
- ASSERT_NE(nullptr, outputPtr);
- inputMemory->update();
- outputMemory->update();
- std::copy(inputData.begin(), inputData.end(), inputPtr);
- std::copy(outputData.begin(), outputData.end(), outputPtr);
- inputMemory->commit();
- outputMemory->commit();
+ sp<ExecutionCallback> executionCallback = new ExecutionCallback();
+ ASSERT_NE(nullptr, executionCallback.get());
+ executionCallback->on_finish(postWork);
+ Return<ErrorStatus> executeLaunchStatus = preparedModel->execute(request, executionCallback);
+ ASSERT_TRUE(executeLaunchStatus.isOk());
+ EXPECT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(executeLaunchStatus));
- // execute request
- sp<Event> executionEvent = new Event();
- ASSERT_NE(nullptr, executionEvent.get());
- Return<ErrorStatus> executeStatus = preparedModel->execute(
- {.inputs = inputs, .outputs = outputs, .pools = pools}, executionEvent);
- ASSERT_TRUE(executeStatus.isOk());
- EXPECT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(executeStatus));
- Event::Status eventStatus = executionEvent->wait();
- EXPECT_EQ(Event::Status::SUCCESS, eventStatus);
-
- // validate results { 1+5, 2+6, 3+7, 4+8 }
- outputMemory->read();
- std::copy(outputPtr, outputPtr + outputData.size(), outputData.begin());
- outputMemory->commit();
+ executionCallback->wait();
+ ErrorStatus executionReturnStatus = executionCallback->getStatus();
+ EXPECT_EQ(ErrorStatus::NONE, executionReturnStatus);
EXPECT_EQ(expectedData, outputData);
}
+// execute simple graph negative test 1
+TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest1) {
+ sp<IPreparedModel> preparedModel = doPrepareModelShortcut();
+ ASSERT_NE(nullptr, preparedModel.get());
+ Request request = createInvalidTestRequest1();
+
+ sp<ExecutionCallback> executionCallback = new ExecutionCallback();
+ ASSERT_NE(nullptr, executionCallback.get());
+ Return<ErrorStatus> executeLaunchStatus = preparedModel->execute(request, executionCallback);
+ ASSERT_TRUE(executeLaunchStatus.isOk());
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, static_cast<ErrorStatus>(executeLaunchStatus));
+
+ executionCallback->wait();
+ ErrorStatus executionReturnStatus = executionCallback->getStatus();
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, executionReturnStatus);
+}
+
+// execute simple graph negative test 2
+TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest2) {
+ sp<IPreparedModel> preparedModel = doPrepareModelShortcut();
+ ASSERT_NE(nullptr, preparedModel.get());
+ Request request = createInvalidTestRequest2();
+
+ sp<ExecutionCallback> executionCallback = new ExecutionCallback();
+ ASSERT_NE(nullptr, executionCallback.get());
+ Return<ErrorStatus> executeLaunchStatus = preparedModel->execute(request, executionCallback);
+ ASSERT_TRUE(executeLaunchStatus.isOk());
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, static_cast<ErrorStatus>(executeLaunchStatus));
+
+ executionCallback->wait();
+ ErrorStatus executionReturnStatus = executionCallback->getStatus();
+ EXPECT_EQ(ErrorStatus::INVALID_ARGUMENT, executionReturnStatus);
+}
+
// Mixed-typed examples
typedef MixedTypedExampleType MixedTypedExample;
diff --git a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.h b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.h
index 9c56e6a..5cd209a 100644
--- a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.h
+++ b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0TargetTest.h
@@ -18,7 +18,9 @@
#define VTS_HAL_NEURALNETWORKS_V1_0_TARGET_TESTS_H
#include <android/hardware/neuralnetworks/1.0/IDevice.h>
+#include <android/hardware/neuralnetworks/1.0/IExecutionCallback.h>
#include <android/hardware/neuralnetworks/1.0/IPreparedModel.h>
+#include <android/hardware/neuralnetworks/1.0/IPreparedModelCallback.h>
#include <android/hardware/neuralnetworks/1.0/types.h>
#include <android/hidl/allocator/1.0/IAllocator.h>
@@ -72,11 +74,28 @@
void SetUp() override;
void TearDown() override;
+ sp<IPreparedModel> doPrepareModelShortcut();
+
sp<IDevice> device;
};
} // namespace functional
} // namespace vts
+
+// pretty-print values for error messages
+
+template<typename CharT, typename Traits>
+::std::basic_ostream<CharT, Traits>& operator<<(::std::basic_ostream<CharT, Traits>& os,
+ ErrorStatus errorStatus) {
+ return os << toString(errorStatus);
+}
+
+template<typename CharT, typename Traits>
+::std::basic_ostream<CharT, Traits>& operator<<(::std::basic_ostream<CharT, Traits>& os,
+ DeviceStatus deviceStatus) {
+ return os << toString(deviceStatus);
+}
+
} // namespace V1_0
} // namespace neuralnetworks
} // namespace hardware
diff --git a/nfc/1.0/Android.bp b/nfc/1.0/Android.bp
index 4adb32c..ad84683 100644
--- a/nfc/1.0/Android.bp
+++ b/nfc/1.0/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.nfc@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0",
+ srcs: [
+ ":android.hardware.nfc@1.0_hal",
+ ],
+ out: [
+ "android/hardware/nfc/1.0/ANfc.cpp",
+ "android/hardware/nfc/1.0/ANfcClientCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.nfc@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0",
+ srcs: [
+ ":android.hardware.nfc@1.0_hal",
+ ],
+ out: [
+ "android/hardware/nfc/1.0/ANfc.h",
+ "android/hardware/nfc/1.0/ANfcClientCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.nfc@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.nfc@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.nfc@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.nfc@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.nfc@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.nfc@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.nfc@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.nfc@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.nfc@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.nfc@1.0",
+ "android.hardware.nfc@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.nfc@1.0-adapter_genc++"],
+}
diff --git a/nfc/1.0/default/Android.bp b/nfc/1.0/default/Android.bp
index d7f7203..3b53d16 100644
--- a/nfc/1.0/default/Android.bp
+++ b/nfc/1.0/default/Android.bp
@@ -19,6 +19,7 @@
cc_binary {
name: "android.hardware.nfc@1.0-service",
+ defaults: ["hidl_defaults"],
relative_install_path: "hw",
proprietary: true,
init_rc: ["android.hardware.nfc@1.0-service.rc"],
diff --git a/oemlock/1.0/Android.bp b/oemlock/1.0/Android.bp
index 742061d..e4cc236 100644
--- a/oemlock/1.0/Android.bp
+++ b/oemlock/1.0/Android.bp
@@ -64,3 +64,77 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.oemlock@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.oemlock@1.0",
+ srcs: [
+ ":android.hardware.oemlock@1.0_hal",
+ ],
+ out: [
+ "android/hardware/oemlock/1.0/AOemLock.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.oemlock@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.oemlock@1.0",
+ srcs: [
+ ":android.hardware.oemlock@1.0_hal",
+ ],
+ out: [
+ "android/hardware/oemlock/1.0/AOemLock.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.oemlock@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.oemlock@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.oemlock@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.oemlock@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.oemlock@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.oemlock@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.oemlock@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.oemlock@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.oemlock@1.0-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.oemlock@1.0",
+ "android.hardware.oemlock@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.oemlock@1.0-adapter_genc++"],
+}
diff --git a/power/1.0/Android.bp b/power/1.0/Android.bp
index bc886cb..789fdcc 100644
--- a/power/1.0/Android.bp
+++ b/power/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.power@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0",
+ srcs: [
+ ":android.hardware.power@1.0_hal",
+ ],
+ out: [
+ "android/hardware/power/1.0/APower.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.power@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0",
+ srcs: [
+ ":android.hardware.power@1.0_hal",
+ ],
+ out: [
+ "android/hardware/power/1.0/APower.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.power@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.power@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.power@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.power@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.power@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.power@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.power@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.power@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.power@1.0",
+ "android.hardware.power@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.power@1.0-adapter_genc++"],
+}
diff --git a/power/1.1/Android.bp b/power/1.1/Android.bp
index fb10aba..8da0894 100644
--- a/power/1.1/Android.bp
+++ b/power/1.1/Android.bp
@@ -66,3 +66,82 @@
"android.hardware.power@1.0",
],
}
+
+genrule {
+ name: "android.hardware.power@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.1",
+ srcs: [
+ ":android.hardware.power@1.1_hal",
+ ],
+ out: [
+ "android/hardware/power/1.1/APower.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.power@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.1",
+ srcs: [
+ ":android.hardware.power@1.1_hal",
+ ],
+ out: [
+ "android/hardware/power/1.1/APower.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.power@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.power@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.power@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.power@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.power@1.0",
+ "android.hardware.power@1.1",
+ "android.hardware.power@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.power@1.0",
+ "android.hardware.power@1.1",
+ "android.hardware.power@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.power@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.power@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.power@1.1-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.power@1.0",
+ "android.hardware.power@1.1",
+ "android.hardware.power@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.power@1.1-adapter_genc++"],
+}
diff --git a/radio/1.0/Android.bp b/radio/1.0/Android.bp
index 093ceac..da496e7 100644
--- a/radio/1.0/Android.bp
+++ b/radio/1.0/Android.bp
@@ -92,3 +92,86 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.radio@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
+ srcs: [
+ ":android.hardware.radio@1.0_hal",
+ ],
+ out: [
+ "android/hardware/radio/1.0/ARadio.cpp",
+ "android/hardware/radio/1.0/ARadioIndication.cpp",
+ "android/hardware/radio/1.0/ARadioResponse.cpp",
+ "android/hardware/radio/1.0/ASap.cpp",
+ "android/hardware/radio/1.0/ASapCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.radio@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
+ srcs: [
+ ":android.hardware.radio@1.0_hal",
+ ],
+ out: [
+ "android/hardware/radio/1.0/ARadio.h",
+ "android/hardware/radio/1.0/ARadioIndication.h",
+ "android/hardware/radio/1.0/ARadioResponse.h",
+ "android/hardware/radio/1.0/ASap.h",
+ "android/hardware/radio/1.0/ASapCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.radio@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.radio@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.radio@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.radio@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.radio@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.radio@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.radio@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.radio@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.radio@1.0",
+ "android.hardware.radio@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.radio@1.0-adapter_genc++"],
+}
diff --git a/radio/1.0/vts/functional/Android.bp b/radio/1.0/vts/functional/Android.bp
index 82a8a72..61136ae 100644
--- a/radio/1.0/vts/functional/Android.bp
+++ b/radio/1.0/vts/functional/Android.bp
@@ -50,6 +50,7 @@
cc_library_static {
name: "RadioVtsTestUtilBase",
+ defaults: ["hidl_defaults"],
srcs : [
"vts_test_util.cpp"
],
diff --git a/radio/1.1/Android.bp b/radio/1.1/Android.bp
index 156cf99..462bd85 100644
--- a/radio/1.1/Android.bp
+++ b/radio/1.1/Android.bp
@@ -87,3 +87,89 @@
"android.hardware.radio@1.0",
],
}
+
+genrule {
+ name: "android.hardware.radio@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.1",
+ srcs: [
+ ":android.hardware.radio@1.1_hal",
+ ],
+ out: [
+ "android/hardware/radio/1.1/ARadio.cpp",
+ "android/hardware/radio/1.1/ARadioIndication.cpp",
+ "android/hardware/radio/1.1/ARadioResponse.cpp",
+ "android/hardware/radio/1.1/ASap.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.radio@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.1",
+ srcs: [
+ ":android.hardware.radio@1.1_hal",
+ ],
+ out: [
+ "android/hardware/radio/1.1/ARadio.h",
+ "android/hardware/radio/1.1/ARadioIndication.h",
+ "android/hardware/radio/1.1/ARadioResponse.h",
+ "android/hardware/radio/1.1/ASap.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.radio@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.radio@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.radio@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.radio@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.radio@1.0",
+ "android.hardware.radio@1.1",
+ "android.hardware.radio@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.radio@1.0",
+ "android.hardware.radio@1.1",
+ "android.hardware.radio@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.radio@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.radio@1.1-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.radio@1.0",
+ "android.hardware.radio@1.1",
+ "android.hardware.radio@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.radio@1.1-adapter_genc++"],
+}
diff --git a/radio/deprecated/1.0/Android.bp b/radio/deprecated/1.0/Android.bp
index e63ed28..7b0c01e 100644
--- a/radio/deprecated/1.0/Android.bp
+++ b/radio/deprecated/1.0/Android.bp
@@ -76,3 +76,87 @@
"android.hardware.radio@1.0",
],
}
+
+genrule {
+ name: "android.hardware.radio.deprecated@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio.deprecated@1.0",
+ srcs: [
+ ":android.hardware.radio.deprecated@1.0_hal",
+ ],
+ out: [
+ "android/hardware/radio/deprecated/1.0/AOemHook.cpp",
+ "android/hardware/radio/deprecated/1.0/AOemHookIndication.cpp",
+ "android/hardware/radio/deprecated/1.0/AOemHookResponse.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.radio.deprecated@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio.deprecated@1.0",
+ srcs: [
+ ":android.hardware.radio.deprecated@1.0_hal",
+ ],
+ out: [
+ "android/hardware/radio/deprecated/1.0/AOemHook.h",
+ "android/hardware/radio/deprecated/1.0/AOemHookIndication.h",
+ "android/hardware/radio/deprecated/1.0/AOemHookResponse.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.radio.deprecated@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.radio.deprecated@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.radio.deprecated@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.radio.deprecated@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.radio.deprecated@1.0",
+ "android.hardware.radio@1.0",
+ "android.hardware.radio@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.radio.deprecated@1.0",
+ "android.hardware.radio@1.0",
+ "android.hardware.radio@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.radio.deprecated@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.radio.deprecated@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.radio.deprecated@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.radio.deprecated@1.0",
+ "android.hardware.radio@1.0",
+ "android.hardware.radio.deprecated@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.radio.deprecated@1.0-adapter_genc++"],
+}
diff --git a/renderscript/1.0/Android.bp b/renderscript/1.0/Android.bp
index 0f62652..0fd5186 100644
--- a/renderscript/1.0/Android.bp
+++ b/renderscript/1.0/Android.bp
@@ -72,3 +72,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.renderscript@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.renderscript@1.0",
+ srcs: [
+ ":android.hardware.renderscript@1.0_hal",
+ ],
+ out: [
+ "android/hardware/renderscript/1.0/AContext.cpp",
+ "android/hardware/renderscript/1.0/ADevice.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.renderscript@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.renderscript@1.0",
+ srcs: [
+ ":android.hardware.renderscript@1.0_hal",
+ ],
+ out: [
+ "android/hardware/renderscript/1.0/AContext.h",
+ "android/hardware/renderscript/1.0/ADevice.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.renderscript@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.renderscript@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.renderscript@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.renderscript@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.renderscript@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.renderscript@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.renderscript@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.renderscript@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.renderscript@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.renderscript@1.0",
+ "android.hardware.renderscript@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.renderscript@1.0-adapter_genc++"],
+}
diff --git a/sensors/1.0/Android.bp b/sensors/1.0/Android.bp
index b2cda05..d3ec0be 100644
--- a/sensors/1.0/Android.bp
+++ b/sensors/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.sensors@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0",
+ srcs: [
+ ":android.hardware.sensors@1.0_hal",
+ ],
+ out: [
+ "android/hardware/sensors/1.0/ASensors.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.sensors@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0",
+ srcs: [
+ ":android.hardware.sensors@1.0_hal",
+ ],
+ out: [
+ "android/hardware/sensors/1.0/ASensors.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.sensors@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.sensors@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.sensors@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.sensors@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.sensors@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.sensors@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.sensors@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.sensors@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.sensors@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.sensors@1.0",
+ "android.hardware.sensors@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.sensors@1.0-adapter_genc++"],
+}
diff --git a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc
index aa80d99..068e978 100644
--- a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc
+++ b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc
@@ -1,5 +1,5 @@
service vendor.sensors-hal-1-0 /vendor/bin/hw/android.hardware.sensors@1.0-service
class hal
user system
- group system
- capabilities SYS_NICE
+ group system wakelock
+ capabilities BLOCK_SUSPEND SYS_NICE
diff --git a/soundtrigger/2.0/Android.bp b/soundtrigger/2.0/Android.bp
index f45c4e2..d902dd0 100644
--- a/soundtrigger/2.0/Android.bp
+++ b/soundtrigger/2.0/Android.bp
@@ -73,3 +73,83 @@
"android.hardware.audio.common@2.0",
],
}
+
+genrule {
+ name: "android.hardware.soundtrigger@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0",
+ srcs: [
+ ":android.hardware.soundtrigger@2.0_hal",
+ ],
+ out: [
+ "android/hardware/soundtrigger/2.0/ASoundTriggerHw.cpp",
+ "android/hardware/soundtrigger/2.0/ASoundTriggerHwCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.soundtrigger@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0",
+ srcs: [
+ ":android.hardware.soundtrigger@2.0_hal",
+ ],
+ out: [
+ "android/hardware/soundtrigger/2.0/ASoundTriggerHw.h",
+ "android/hardware/soundtrigger/2.0/ASoundTriggerHwCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.soundtrigger@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.soundtrigger@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.soundtrigger@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.soundtrigger@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.soundtrigger@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.soundtrigger@2.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.soundtrigger@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.soundtrigger@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.soundtrigger@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.soundtrigger@2.0",
+ "android.hardware.soundtrigger@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.soundtrigger@2.0-adapter_genc++"],
+}
diff --git a/tests/bar/1.0/Android.bp b/tests/bar/1.0/Android.bp
index 44ae7a5..b862c9b 100644
--- a/tests/bar/1.0/Android.bp
+++ b/tests/bar/1.0/Android.bp
@@ -67,16 +67,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.bar@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.bar@1.0_genc++"],
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",
@@ -94,3 +91,91 @@
"android.hardware.tests.foo@1.0",
],
}
+
+genrule {
+ name: "android.hardware.tests.bar@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
+ srcs: [
+ ":android.hardware.tests.bar@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/bar/1.0/ABar.cpp",
+ "android/hardware/tests/bar/1.0/AComplicated.cpp",
+ "android/hardware/tests/bar/1.0/AFooCallback.cpp",
+ "android/hardware/tests/bar/1.0/AImportRules.cpp",
+ "android/hardware/tests/bar/1.0/AImportTypes.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.bar@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
+ srcs: [
+ ":android.hardware.tests.bar@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/bar/1.0/ABar.h",
+ "android/hardware/tests/bar/1.0/AComplicated.h",
+ "android/hardware/tests/bar/1.0/AFooCallback.h",
+ "android/hardware/tests/bar/1.0/AImportRules.h",
+ "android/hardware/tests/bar/1.0/AImportTypes.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.bar@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.bar@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.bar@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.bar@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.bar@1.0",
+ "android.hardware.tests.foo@1.0",
+ "android.hardware.tests.foo@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.bar@1.0",
+ "android.hardware.tests.foo@1.0",
+ "android.hardware.tests.foo@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.bar@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.bar@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.bar@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.bar@1.0",
+ "android.hardware.tests.foo@1.0",
+ "android.hardware.tests.bar@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.bar@1.0-adapter_genc++"],
+}
diff --git a/tests/bar/1.0/IImportRules.hal b/tests/bar/1.0/IImportRules.hal
index db454b0..401c8ad 100644
--- a/tests/bar/1.0/IImportRules.hal
+++ b/tests/bar/1.0/IImportRules.hal
@@ -30,6 +30,7 @@
rule0a(Outer o); // should be resolved to Outer above
rule0a1(IImportRules.Outer o); // should be resolved to Outer above
rule0b(@1.0::IImportRules.Outer o);
+ rule0b1(android.hardware.tests.bar@1.0::IImportRules.Outer o);
rule0c(android.hardware.tests.foo@1.0::Outer o);
rule0d(@1.0::Outer o); // android.hardware.tests.foo@1.0::Outer
rule0e(Outer.Inner o); // should be resolved to Outer above
diff --git a/tests/baz/1.0/Android.bp b/tests/baz/1.0/Android.bp
index 7fa8b27..41b6ef2 100644
--- a/tests/baz/1.0/Android.bp
+++ b/tests/baz/1.0/Android.bp
@@ -60,16 +60,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.baz@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.baz@1.0_genc++"],
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",
@@ -85,3 +82,84 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.baz@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
+ srcs: [
+ ":android.hardware.tests.baz@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/baz/1.0/ABase.cpp",
+ "android/hardware/tests/baz/1.0/ABaz.cpp",
+ "android/hardware/tests/baz/1.0/ABazCallback.cpp",
+ "android/hardware/tests/baz/1.0/AQuux.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.baz@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
+ srcs: [
+ ":android.hardware.tests.baz@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/baz/1.0/ABase.h",
+ "android/hardware/tests/baz/1.0/ABaz.h",
+ "android/hardware/tests/baz/1.0/ABazCallback.h",
+ "android/hardware/tests/baz/1.0/AQuux.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.baz@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.baz@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.baz@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.baz@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.baz@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.baz@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.baz@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.baz@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.baz@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.baz@1.0",
+ "android.hardware.tests.baz@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.baz@1.0-adapter_genc++"],
+}
diff --git a/tests/expression/1.0/Android.bp b/tests/expression/1.0/Android.bp
index 0ea0acf..bbb6f33 100644
--- a/tests/expression/1.0/Android.bp
+++ b/tests/expression/1.0/Android.bp
@@ -42,16 +42,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.expression@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.expression@1.0_genc++"],
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",
@@ -67,3 +64,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.expression@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.expression@1.0",
+ srcs: [
+ ":android.hardware.tests.expression@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/expression/1.0/AExpression.cpp",
+ "android/hardware/tests/expression/1.0/AExpressionExt.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.expression@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.expression@1.0",
+ srcs: [
+ ":android.hardware.tests.expression@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/expression/1.0/AExpression.h",
+ "android/hardware/tests/expression/1.0/AExpressionExt.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.expression@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.expression@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.expression@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.expression@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.expression@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.expression@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.expression@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.expression@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.expression@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.expression@1.0",
+ "android.hardware.tests.expression@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.expression@1.0-adapter_genc++"],
+}
diff --git a/tests/expression/1.0/IExpression.hal b/tests/expression/1.0/IExpression.hal
index 6eb5b2a..2db9f61 100644
--- a/tests/expression/1.0/IExpression.hal
+++ b/tests/expression/1.0/IExpression.hal
@@ -92,8 +92,10 @@
hexLong2 = 0xfffffffff,
simpleArithmetic = 4 + 1,
simpleArithmetic2 = 2 + 3 - 4,
+ simpleArithmetic3 = 2 - 3 + 4,
simpleBoolExpr = 1 == 4,
simpleLogical = 1 && 1,
+ simpleLogical2 = 1 || 1 && 0, // && higher than ||
simpleComp = 1 < 2,
boolExpr1 = !((3 != 4 || (2 < 3 <= 3 > 4)) >= 0),
boolExpr = 1 == 7 && !((3 != 4 || (2 < 3 <= 3 > 4)) >= 0),
@@ -102,6 +104,7 @@
simpleBitShiftNeg = 4 << -1,
simpleArithmeticRightShift = 1 << 31 >> 31,
simpleBitExpr = 1 | 16 >> 2,
+ simpleBitExpr2 = 0x0f ^ 0x33 & 0x99, // & higher than ^
bitExpr = ~42 & (1 << 3 | 16 >> 2) ^ 7,
arithmeticExpr = 2 + 3 - 4 * -7 / (10 % 3),
messyExpr = 2 + (-3&4 / 7),
diff --git a/tests/extension/light/2.0/Android.bp b/tests/extension/light/2.0/Android.bp
index e8a5017..07dcea3 100644
--- a/tests/extension/light/2.0/Android.bp
+++ b/tests/extension/light/2.0/Android.bp
@@ -39,16 +39,13 @@
],
}
-cc_test_library {
+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",
@@ -66,3 +63,83 @@
"android.hardware.light@2.0",
],
}
+
+genrule {
+ name: "android.hardware.tests.extension.light@2.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.extension.light@2.0",
+ srcs: [
+ ":android.hardware.tests.extension.light@2.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/extension/light/2.0/AExtLight.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.extension.light@2.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.extension.light@2.0",
+ srcs: [
+ ":android.hardware.tests.extension.light@2.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/extension/light/2.0/AExtLight.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.extension.light@2.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.extension.light@2.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.extension.light@2.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.extension.light@2.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.light@2.0",
+ "android.hardware.tests.extension.light@2.0",
+ "android.hardware.light@2.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.light@2.0",
+ "android.hardware.tests.extension.light@2.0",
+ "android.hardware.light@2.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.extension.light@2.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.extension.light@2.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.extension.light@2.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.light@2.0",
+ "android.hardware.tests.extension.light@2.0",
+ "android.hardware.tests.extension.light@2.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.extension.light@2.0-adapter_genc++"],
+}
diff --git a/tests/foo/1.0/Android.bp b/tests/foo/1.0/Android.bp
index b5de12e..51b5dc6 100644
--- a/tests/foo/1.0/Android.bp
+++ b/tests/foo/1.0/Android.bp
@@ -67,16 +67,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.foo@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.foo@1.0_genc++"],
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",
@@ -92,3 +89,86 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.foo@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
+ srcs: [
+ ":android.hardware.tests.foo@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/foo/1.0/AFoo.cpp",
+ "android/hardware/tests/foo/1.0/AFooCallback.cpp",
+ "android/hardware/tests/foo/1.0/AMyTypes.cpp",
+ "android/hardware/tests/foo/1.0/ASimple.cpp",
+ "android/hardware/tests/foo/1.0/ATheirTypes.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.foo@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
+ srcs: [
+ ":android.hardware.tests.foo@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/foo/1.0/AFoo.h",
+ "android/hardware/tests/foo/1.0/AFooCallback.h",
+ "android/hardware/tests/foo/1.0/AMyTypes.h",
+ "android/hardware/tests/foo/1.0/ASimple.h",
+ "android/hardware/tests/foo/1.0/ATheirTypes.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.foo@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.foo@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.foo@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.foo@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.foo@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.foo@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.foo@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.foo@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.foo@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.foo@1.0",
+ "android.hardware.tests.foo@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.foo@1.0-adapter_genc++"],
+}
diff --git a/tests/hash/1.0/Android.bp b/tests/hash/1.0/Android.bp
index d4d1d1a..ffff051 100644
--- a/tests/hash/1.0/Android.bp
+++ b/tests/hash/1.0/Android.bp
@@ -35,16 +35,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.hash@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.hash@1.0_genc++"],
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",
@@ -60,3 +57,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.hash@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.hash@1.0",
+ srcs: [
+ ":android.hardware.tests.hash@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/hash/1.0/AHash.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.hash@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.hash@1.0",
+ srcs: [
+ ":android.hardware.tests.hash@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/hash/1.0/AHash.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.hash@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.hash@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.hash@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.hash@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.hash@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.hash@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.hash@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.hash@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.hash@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.hash@1.0",
+ "android.hardware.tests.hash@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.hash@1.0-adapter_genc++"],
+}
diff --git a/tests/hash/1.0/default/Android.bp b/tests/hash/1.0/default/Android.bp
index ae44876..67f9097 100644
--- a/tests/hash/1.0/default/Android.bp
+++ b/tests/hash/1.0/default/Android.bp
@@ -1,5 +1,6 @@
cc_library_shared {
name: "android.hardware.tests.hash@1.0-impl",
+ defaults: ["hidl_defaults"],
relative_install_path: "hw",
srcs: [
"Hash.cpp",
diff --git a/tests/inheritance/1.0/Android.bp b/tests/inheritance/1.0/Android.bp
index 93a8ad5..bd34512 100644
--- a/tests/inheritance/1.0/Android.bp
+++ b/tests/inheritance/1.0/Android.bp
@@ -56,16 +56,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.inheritance@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.inheritance@1.0_genc++"],
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",
@@ -81,3 +78,84 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.inheritance@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
+ srcs: [
+ ":android.hardware.tests.inheritance@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/inheritance/1.0/AChild.cpp",
+ "android/hardware/tests/inheritance/1.0/AFetcher.cpp",
+ "android/hardware/tests/inheritance/1.0/AGrandparent.cpp",
+ "android/hardware/tests/inheritance/1.0/AParent.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.inheritance@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
+ srcs: [
+ ":android.hardware.tests.inheritance@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/inheritance/1.0/AChild.h",
+ "android/hardware/tests/inheritance/1.0/AFetcher.h",
+ "android/hardware/tests/inheritance/1.0/AGrandparent.h",
+ "android/hardware/tests/inheritance/1.0/AParent.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.inheritance@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.inheritance@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.inheritance@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.inheritance@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.inheritance@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.inheritance@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.inheritance@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.inheritance@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.inheritance@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.inheritance@1.0",
+ "android.hardware.tests.inheritance@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.inheritance@1.0-adapter_genc++"],
+}
diff --git a/tests/inheritance/1.0/default/Parent.cpp b/tests/inheritance/1.0/default/Parent.cpp
index d3f1932..1fabf1b 100644
--- a/tests/inheritance/1.0/default/Parent.cpp
+++ b/tests/inheritance/1.0/default/Parent.cpp
@@ -1,8 +1,10 @@
#define LOG_TAG "hidl_test"
+#include "Parent.h"
+
#include <log/log.h>
-#include "Parent.h"
+#include "Child.h"
namespace android {
namespace hardware {
@@ -23,8 +25,11 @@
return Void();
}
+IParent* HIDL_FETCH_IParent(const char* name) {
+ if (name == std::string("child")) {
+ return new Child();
+ }
-IParent* HIDL_FETCH_IParent(const char* /* name */) {
return new Parent();
}
diff --git a/tests/libhwbinder/1.0/Android.bp b/tests/libhwbinder/1.0/Android.bp
index 4f3beb0..139aec5 100644
--- a/tests/libhwbinder/1.0/Android.bp
+++ b/tests/libhwbinder/1.0/Android.bp
@@ -42,16 +42,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.libhwbinder@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.libhwbinder@1.0_genc++"],
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",
@@ -67,3 +64,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.libhwbinder@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.libhwbinder@1.0",
+ srcs: [
+ ":android.hardware.tests.libhwbinder@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/libhwbinder/1.0/ABenchmark.cpp",
+ "android/hardware/tests/libhwbinder/1.0/AScheduleTest.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.libhwbinder@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.libhwbinder@1.0",
+ srcs: [
+ ":android.hardware.tests.libhwbinder@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/libhwbinder/1.0/ABenchmark.h",
+ "android/hardware/tests/libhwbinder/1.0/AScheduleTest.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.libhwbinder@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.libhwbinder@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.libhwbinder@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.libhwbinder@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.libhwbinder@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.libhwbinder@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.libhwbinder@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.libhwbinder@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.libhwbinder@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.libhwbinder@1.0",
+ "android.hardware.tests.libhwbinder@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.libhwbinder@1.0-adapter_genc++"],
+}
diff --git a/tests/libhwbinder/1.0/default/Android.bp b/tests/libhwbinder/1.0/default/Android.bp
index f1f99a6..3d18720 100644
--- a/tests/libhwbinder/1.0/default/Android.bp
+++ b/tests/libhwbinder/1.0/default/Android.bp
@@ -1,5 +1,6 @@
cc_library_shared {
name: "android.hardware.tests.libhwbinder@1.0-impl",
+ defaults: ["hidl_defaults"],
relative_install_path: "hw",
srcs: [
"Benchmark.cpp",
diff --git a/tests/libhwbinder/aidl/Android.bp b/tests/libhwbinder/aidl/Android.bp
index a662085..6d49704 100644
--- a/tests/libhwbinder/aidl/Android.bp
+++ b/tests/libhwbinder/aidl/Android.bp
@@ -1,5 +1,6 @@
cc_library_shared {
name: "android.hardware.tests.libbinder",
+ defaults: ["hidl_defaults"],
srcs: ["android/tests/binder/IBenchmark.aidl"],
diff --git a/tests/memory/1.0/Android.bp b/tests/memory/1.0/Android.bp
index d39ba28..5653e97 100644
--- a/tests/memory/1.0/Android.bp
+++ b/tests/memory/1.0/Android.bp
@@ -35,16 +35,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.memory@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.memory@1.0_genc++"],
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",
@@ -60,3 +57,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.memory@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.memory@1.0",
+ srcs: [
+ ":android.hardware.tests.memory@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/memory/1.0/AMemoryTest.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.memory@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.memory@1.0",
+ srcs: [
+ ":android.hardware.tests.memory@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/memory/1.0/AMemoryTest.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.memory@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.memory@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.memory@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.memory@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.memory@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.memory@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.memory@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.memory@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.memory@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.memory@1.0",
+ "android.hardware.tests.memory@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.memory@1.0-adapter_genc++"],
+}
diff --git a/tests/msgq/1.0/Android.bp b/tests/msgq/1.0/Android.bp
index 7758ee8..39a34cb 100644
--- a/tests/msgq/1.0/Android.bp
+++ b/tests/msgq/1.0/Android.bp
@@ -42,16 +42,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.msgq@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.msgq@1.0_genc++"],
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",
@@ -67,3 +64,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.msgq@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.msgq@1.0",
+ srcs: [
+ ":android.hardware.tests.msgq@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/msgq/1.0/ABenchmarkMsgQ.cpp",
+ "android/hardware/tests/msgq/1.0/ATestMsgQ.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.msgq@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.msgq@1.0",
+ srcs: [
+ ":android.hardware.tests.msgq@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/msgq/1.0/ABenchmarkMsgQ.h",
+ "android/hardware/tests/msgq/1.0/ATestMsgQ.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.msgq@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.msgq@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.msgq@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.msgq@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.msgq@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.msgq@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.msgq@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.msgq@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.msgq@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.msgq@1.0",
+ "android.hardware.tests.msgq@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.msgq@1.0-adapter_genc++"],
+}
diff --git a/tests/msgq/1.0/default/Android.bp b/tests/msgq/1.0/default/Android.bp
index eb25ac2..be4fe94 100644
--- a/tests/msgq/1.0/default/Android.bp
+++ b/tests/msgq/1.0/default/Android.bp
@@ -35,6 +35,7 @@
cc_test {
name: "android.hardware.tests.msgq@1.0-service-benchmark",
+ defaults: ["hidl_defaults"],
srcs: ["mq_benchmark_service.cpp"],
gtest: false,
@@ -51,6 +52,7 @@
cc_test {
name: "android.hardware.tests.msgq@1.0-service-test",
+ defaults: ["hidl_defaults"],
srcs: ["mq_test_service.cpp"],
gtest: false,
diff --git a/tests/multithread/1.0/Android.bp b/tests/multithread/1.0/Android.bp
index 76ad2c1..98cbd5e 100644
--- a/tests/multithread/1.0/Android.bp
+++ b/tests/multithread/1.0/Android.bp
@@ -35,16 +35,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.multithread@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.multithread@1.0_genc++"],
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",
@@ -60,3 +57,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.multithread@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.multithread@1.0",
+ srcs: [
+ ":android.hardware.tests.multithread@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/multithread/1.0/AMultithread.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.multithread@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.multithread@1.0",
+ srcs: [
+ ":android.hardware.tests.multithread@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/multithread/1.0/AMultithread.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.multithread@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.multithread@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.multithread@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.multithread@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.multithread@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.multithread@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.multithread@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.multithread@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.multithread@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.multithread@1.0",
+ "android.hardware.tests.multithread@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.multithread@1.0-adapter_genc++"],
+}
diff --git a/tests/pointer/1.0/Android.bp b/tests/pointer/1.0/Android.bp
index 178f165..2c13cb1 100644
--- a/tests/pointer/1.0/Android.bp
+++ b/tests/pointer/1.0/Android.bp
@@ -42,16 +42,13 @@
],
}
-cc_test_library {
+cc_library {
name: "android.hardware.tests.pointer@1.0",
defaults: ["hidl-module-defaults"],
generated_sources: ["android.hardware.tests.pointer@1.0_genc++"],
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",
@@ -67,3 +64,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.pointer@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.pointer@1.0",
+ srcs: [
+ ":android.hardware.tests.pointer@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/pointer/1.0/AGraph.cpp",
+ "android/hardware/tests/pointer/1.0/APointer.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.pointer@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.pointer@1.0",
+ srcs: [
+ ":android.hardware.tests.pointer@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/pointer/1.0/AGraph.h",
+ "android/hardware/tests/pointer/1.0/APointer.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.pointer@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.pointer@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.pointer@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.pointer@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.pointer@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.pointer@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.pointer@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.pointer@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.pointer@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.pointer@1.0",
+ "android.hardware.tests.pointer@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.pointer@1.0-adapter_genc++"],
+}
diff --git a/tests/trie/1.0/.hidl_for_test b/tests/trie/1.0/.hidl_for_test
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/trie/1.0/.hidl_for_test
diff --git a/tests/trie/1.0/Android.bp b/tests/trie/1.0/Android.bp
index fcc4325..73f1b0b 100644
--- a/tests/trie/1.0/Android.bp
+++ b/tests/trie/1.0/Android.bp
@@ -46,9 +46,6 @@
generated_headers: ["android.hardware.tests.trie@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.tests.trie@1.0_genc++_headers"],
vendor_available: true,
- vndk: {
- enabled: true,
- },
shared_libs: [
"libhidlbase",
"libhidltransport",
@@ -64,3 +61,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tests.trie@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.trie@1.0",
+ srcs: [
+ ":android.hardware.tests.trie@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/trie/1.0/ATrie.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.trie@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.trie@1.0",
+ srcs: [
+ ":android.hardware.tests.trie@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tests/trie/1.0/ATrie.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tests.trie@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tests.trie@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tests.trie@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tests.trie@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tests.trie@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tests.trie@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tests.trie@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tests.trie@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tests.trie@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.trie@1.0",
+ "android.hardware.tests.trie@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tests.trie@1.0-adapter_genc++"],
+}
diff --git a/tetheroffload/config/1.0/Android.bp b/tetheroffload/config/1.0/Android.bp
index 2d62f16..5cafb5d 100644
--- a/tetheroffload/config/1.0/Android.bp
+++ b/tetheroffload/config/1.0/Android.bp
@@ -60,3 +60,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tetheroffload.config@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tetheroffload.config@1.0",
+ srcs: [
+ ":android.hardware.tetheroffload.config@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tetheroffload/config/1.0/AOffloadConfig.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tetheroffload.config@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tetheroffload.config@1.0",
+ srcs: [
+ ":android.hardware.tetheroffload.config@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tetheroffload/config/1.0/AOffloadConfig.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tetheroffload.config@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tetheroffload.config@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tetheroffload.config@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tetheroffload.config@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tetheroffload.config@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tetheroffload.config@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tetheroffload.config@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tetheroffload.config@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tetheroffload.config@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tetheroffload.config@1.0",
+ "android.hardware.tetheroffload.config@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tetheroffload.config@1.0-adapter_genc++"],
+}
diff --git a/tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp b/tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp
index fc61e1c..2cbe479 100644
--- a/tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp
+++ b/tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp
@@ -91,35 +91,42 @@
// 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);
+ // Try multiple times in a row to see if it provokes file descriptor leaks.
+ for (int i = 0; i < 1024; i++) {
+ 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();
+ hidl_handle h1;
+ h1.setTo(nativeHandle1, true);
- 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);
+ 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();
+ hidl_handle h2;
+ h2.setTo(nativeHandle2, true);
- const Return<void> ret = config->setHandles(h1, h2, ASSERT_TRUE_CALLBACK);
- ASSERT_TRUE(ret.isOk());
+ 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);
+ hidl_handle h1;
+ h1.setTo(nativeHandle1, true);
native_handle_t* const nativeHandle2 = native_handle_create(0, 0);
- const hidl_handle h2 = hidl_handle(nativeHandle2);
+ hidl_handle h2;
+ h2.setTo(nativeHandle2, true);
const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK);
ASSERT_TRUE(ret.isOk());
@@ -135,10 +142,12 @@
}
native_handle_t* const nativeHandle1 = native_handle_create(1, 0);
nativeHandle1->data[0] = fd1.release();
- const hidl_handle h1 = hidl_handle(nativeHandle1);
+ hidl_handle h1;
+ h1.setTo(nativeHandle1, true);
native_handle_t* const nativeHandle2 = native_handle_create(0, 0);
- const hidl_handle h2 = hidl_handle(nativeHandle2);
+ hidl_handle h2;
+ h2.setTo(nativeHandle2, true);
const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK);
ASSERT_TRUE(ret.isOk());
@@ -148,7 +157,8 @@
// (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);
+ hidl_handle h1;
+ h1.setTo(nativeHandle1, true);
unique_fd fd2(netlinkSocket(kFd2Groups));
if (fd2.get() < 0) {
@@ -157,7 +167,8 @@
}
native_handle_t* const nativeHandle2 = native_handle_create(1, 0);
nativeHandle2->data[0] = fd2.release();
- const hidl_handle h2 = hidl_handle(nativeHandle2);
+ hidl_handle h2;
+ h2.setTo(nativeHandle2, true);
const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK);
ASSERT_TRUE(ret.isOk());
diff --git a/tetheroffload/control/1.0/Android.bp b/tetheroffload/control/1.0/Android.bp
index 72f410e..f4f120a 100644
--- a/tetheroffload/control/1.0/Android.bp
+++ b/tetheroffload/control/1.0/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tetheroffload.control@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tetheroffload.control@1.0",
+ srcs: [
+ ":android.hardware.tetheroffload.control@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tetheroffload/control/1.0/AOffloadControl.cpp",
+ "android/hardware/tetheroffload/control/1.0/ATetheringOffloadCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tetheroffload.control@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tetheroffload.control@1.0",
+ srcs: [
+ ":android.hardware.tetheroffload.control@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tetheroffload/control/1.0/AOffloadControl.h",
+ "android/hardware/tetheroffload/control/1.0/ATetheringOffloadCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tetheroffload.control@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tetheroffload.control@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tetheroffload.control@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tetheroffload.control@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tetheroffload.control@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tetheroffload.control@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tetheroffload.control@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tetheroffload.control@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tetheroffload.control@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tetheroffload.control@1.0",
+ "android.hardware.tetheroffload.control@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tetheroffload.control@1.0-adapter_genc++"],
+}
diff --git a/tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp b/tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp
index 3059eac..52dd026 100644
--- a/tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp
+++ b/tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp
@@ -46,6 +46,12 @@
using android::hardware::Void;
using android::sp;
+enum class ExpectBoolean {
+ Ignored = -1,
+ False = 0,
+ True = 1,
+};
+
// 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) { \
@@ -112,7 +118,12 @@
prepareControlHal();
}
- virtual void TearDown() override { stopOffload(false); }
+ virtual void TearDown() override {
+ // For good measure, we should try stopOffload() once more. Since we
+ // don't know where we are in HAL call test cycle we don't know what
+ // return code to actually expect, so we just ignore it.
+ stopOffload(ExpectBoolean::Ignored);
+ }
// The IOffloadConfig HAL is tested more thoroughly elsewhere. He we just
// setup everything correctly and verify basic readiness.
@@ -127,7 +138,8 @@
}
native_handle_t* const nativeHandle1 = native_handle_create(1, 0);
nativeHandle1->data[0] = fd1.release();
- hidl_handle h1 = hidl_handle(nativeHandle1);
+ hidl_handle h1;
+ h1.setTo(nativeHandle1, true);
unique_fd fd2(conntrackSocket(NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY));
if (fd2.get() < 0) {
@@ -136,7 +148,8 @@
}
native_handle_t* const nativeHandle2 = native_handle_create(1, 0);
nativeHandle2->data[0] = fd2.release();
- hidl_handle h2 = hidl_handle(nativeHandle2);
+ hidl_handle h2;
+ h2.setTo(nativeHandle2, true);
const Return<void> ret = config->setHandles(h1, h2, ASSERT_TRUE_CALLBACK);
ASSERT_TRUE(ret.isOk());
@@ -166,12 +179,21 @@
initOffload(true);
}
- void stopOffload(const bool expected_result) {
+ void stopOffload(const ExpectBoolean value) {
auto cb = [&](bool success, const hidl_string& errMsg) {
if (!success) {
ALOGI("Error message: %s", errMsg.c_str());
}
- ASSERT_EQ(expected_result, success);
+ switch (value) {
+ case ExpectBoolean::False:
+ ASSERT_EQ(false, success);
+ break;
+ case ExpectBoolean::True:
+ ASSERT_EQ(true, success);
+ break;
+ case ExpectBoolean::Ignored:
+ break;
+ }
};
const Return<void> ret = control->stopOffload(cb);
ASSERT_TRUE(ret.isOk());
@@ -209,22 +231,22 @@
initOffload(false);
initOffload(false);
initOffload(false);
- stopOffload(true); // balance out initOffload(true)
+ stopOffload(ExpectBoolean::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);
+ stopOffload(ExpectBoolean::False);
+ stopOffload(ExpectBoolean::False);
+ stopOffload(ExpectBoolean::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);
+ stopOffload(ExpectBoolean::True); // balance out initOffload(true)
+ stopOffload(ExpectBoolean::False);
+ stopOffload(ExpectBoolean::False);
}
// Check that calling setLocalPrefixes() without first having called initOffload() returns false.
@@ -305,7 +327,12 @@
setupControlHal();
}
- virtual void TearDown() override { stopOffload(true); }
+ virtual void TearDown() override {
+ // For good measure, we should try stopOffload() once more. Since we
+ // don't know where we are in HAL call test cycle we don't know what
+ // return code to actually expect, so we just ignore it.
+ stopOffload(ExpectBoolean::Ignored);
+ }
};
/*
@@ -575,16 +602,24 @@
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());
+ // First add the downstream, otherwise removeDownstream logic can reasonably
+ // return false for downstreams not previously added.
+ const Return<void> add = control->addDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(add.isOk());
+ const Return<void> del = control->removeDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(del.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());
+ // First add the downstream, otherwise removeDownstream logic can reasonably
+ // return false for downstreams not previously added.
+ const Return<void> add = control->addDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(add.isOk());
+ const Return<void> del = control->removeDownstream(iface, prefix, ASSERT_TRUE_CALLBACK);
+ EXPECT_TRUE(del.isOk());
}
// Test removeDownstream() fails given all empty parameters.
diff --git a/thermal/1.0/Android.bp b/thermal/1.0/Android.bp
index aa97175..199da79 100644
--- a/thermal/1.0/Android.bp
+++ b/thermal/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.thermal@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0",
+ srcs: [
+ ":android.hardware.thermal@1.0_hal",
+ ],
+ out: [
+ "android/hardware/thermal/1.0/AThermal.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.thermal@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0",
+ srcs: [
+ ":android.hardware.thermal@1.0_hal",
+ ],
+ out: [
+ "android/hardware/thermal/1.0/AThermal.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.thermal@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.thermal@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.thermal@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.thermal@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.thermal@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.thermal@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.thermal@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.thermal@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.thermal@1.0",
+ "android.hardware.thermal@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.thermal@1.0-adapter_genc++"],
+}
diff --git a/thermal/1.1/Android.bp b/thermal/1.1/Android.bp
index 0985d94..58e709e 100644
--- a/thermal/1.1/Android.bp
+++ b/thermal/1.1/Android.bp
@@ -69,3 +69,84 @@
"android.hardware.thermal@1.0",
],
}
+
+genrule {
+ name: "android.hardware.thermal@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-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/AThermal.cpp",
+ "android/hardware/thermal/1.1/AThermalCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.thermal@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-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/AThermal.h",
+ "android/hardware/thermal/1.1/AThermalCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.thermal@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.thermal@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.thermal@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.thermal@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.thermal@1.0",
+ "android.hardware.thermal@1.1",
+ "android.hardware.thermal@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.thermal@1.0",
+ "android.hardware.thermal@1.1",
+ "android.hardware.thermal@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.thermal@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.thermal@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.thermal@1.1-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.thermal@1.0",
+ "android.hardware.thermal@1.1",
+ "android.hardware.thermal@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.thermal@1.1-adapter_genc++"],
+}
diff --git a/tv/cec/1.0/Android.bp b/tv/cec/1.0/Android.bp
index c9da737..f333777 100644
--- a/tv/cec/1.0/Android.bp
+++ b/tv/cec/1.0/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.tv.cec@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0",
+ srcs: [
+ ":android.hardware.tv.cec@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tv/cec/1.0/AHdmiCec.cpp",
+ "android/hardware/tv/cec/1.0/AHdmiCecCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tv.cec@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0",
+ srcs: [
+ ":android.hardware.tv.cec@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tv/cec/1.0/AHdmiCec.h",
+ "android/hardware/tv/cec/1.0/AHdmiCecCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tv.cec@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tv.cec@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tv.cec@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tv.cec@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.tv.cec@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.tv.cec@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tv.cec@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.cec@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tv.cec@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tv.cec@1.0",
+ "android.hardware.tv.cec@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tv.cec@1.0-adapter_genc++"],
+}
diff --git a/tv/input/1.0/Android.bp b/tv/input/1.0/Android.bp
index 22ea1d8..b07b2c7 100644
--- a/tv/input/1.0/Android.bp
+++ b/tv/input/1.0/Android.bp
@@ -73,3 +73,83 @@
"android.hardware.audio.common@2.0",
],
}
+
+genrule {
+ name: "android.hardware.tv.input@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0",
+ srcs: [
+ ":android.hardware.tv.input@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tv/input/1.0/ATvInput.cpp",
+ "android/hardware/tv/input/1.0/ATvInputCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tv.input@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0",
+ srcs: [
+ ":android.hardware.tv.input@1.0_hal",
+ ],
+ out: [
+ "android/hardware/tv/input/1.0/ATvInput.h",
+ "android/hardware/tv/input/1.0/ATvInputCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.tv.input@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.tv.input@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.tv.input@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.tv.input@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.tv.input@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.tv.input@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.tv.input@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.tv.input@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.tv.input@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.audio.common@2.0",
+ "android.hardware.tv.input@1.0",
+ "android.hardware.tv.input@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.tv.input@1.0-adapter_genc++"],
+}
diff --git a/update-base-files.sh b/update-base-files.sh
index 1eb6b51..bb99d22 100755
--- a/update-base-files.sh
+++ b/update-base-files.sh
@@ -1,11 +1,11 @@
#!/bin/bash
-if [ ! -d hardware/interfaces ] ; then
+if [ ! -d $ANDROID_BUILD_TOP/hardware/interfaces ] ; then
echo "Where is hardware/interfaces?";
exit 1;
fi
-if [ ! -d system/libhidl/transport ] ; then
+if [ ! -d $ANDROID_BUILD_TOP/system/libhidl/transport ] ; then
echo "Where is system/libhidl/transport?";
exit 1;
fi
@@ -20,24 +20,24 @@
# hardware/libhardware
hidl-gen $options \
- -o hardware/libhardware/include/hardware/sensors-base.h \
+ -o $ANDROID_BUILD_TOP/hardware/libhardware/include/hardware/sensors-base.h \
android.hardware.sensors@1.0
hidl-gen $options \
- -o hardware/libhardware/include/hardware/nfc-base.h \
+ -o $ANDROID_BUILD_TOP/hardware/libhardware/include/hardware/nfc-base.h \
android.hardware.nfc@1.0
hidl-gen $options \
- -o hardware/libhardware/include/hardware/gnss-base.h \
+ -o $ANDROID_BUILD_TOP/hardware/libhardware/include/hardware/gnss-base.h \
android.hardware.gnss@1.0
# system/core
hidl-gen $options \
- -o system/core/include/system/graphics-base.h \
+ -o $ANDROID_BUILD_TOP/system/core/include/system/graphics-base.h \
android.hardware.graphics.common@1.0
# system/media
hidl-gen $options \
- -o system/media/audio/include/system/audio-base.h \
+ -o $ANDROID_BUILD_TOP/system/media/audio/include/system/audio-base.h \
android.hardware.audio.common@2.0
hidl-gen $options \
- -o system/media/audio/include/system/audio_effect-base.h \
+ -o $ANDROID_BUILD_TOP/system/media/audio/include/system/audio_effect-base.h \
android.hardware.audio.effect@2.0
diff --git a/usb/1.0/Android.bp b/usb/1.0/Android.bp
index afe1931..ce4bc25 100644
--- a/usb/1.0/Android.bp
+++ b/usb/1.0/Android.bp
@@ -71,3 +71,80 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.usb@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.0",
+ srcs: [
+ ":android.hardware.usb@1.0_hal",
+ ],
+ out: [
+ "android/hardware/usb/1.0/AUsb.cpp",
+ "android/hardware/usb/1.0/AUsbCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.usb@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.0",
+ srcs: [
+ ":android.hardware.usb@1.0_hal",
+ ],
+ out: [
+ "android/hardware/usb/1.0/AUsb.h",
+ "android/hardware/usb/1.0/AUsbCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.usb@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.usb@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.usb@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.usb@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.usb@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.usb@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.usb@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.usb@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.usb@1.0",
+ "android.hardware.usb@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.usb@1.0-adapter_genc++"],
+}
diff --git a/usb/1.1/Android.bp b/usb/1.1/Android.bp
index 5466001..c6c2034 100644
--- a/usb/1.1/Android.bp
+++ b/usb/1.1/Android.bp
@@ -73,3 +73,84 @@
"android.hardware.usb@1.0",
],
}
+
+genrule {
+ name: "android.hardware.usb@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.1",
+ srcs: [
+ ":android.hardware.usb@1.1_hal",
+ ],
+ out: [
+ "android/hardware/usb/1.1/AUsb.cpp",
+ "android/hardware/usb/1.1/AUsbCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.usb@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.1",
+ srcs: [
+ ":android.hardware.usb@1.1_hal",
+ ],
+ out: [
+ "android/hardware/usb/1.1/AUsb.h",
+ "android/hardware/usb/1.1/AUsbCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.usb@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.usb@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.usb@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.usb@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.usb@1.0",
+ "android.hardware.usb@1.1",
+ "android.hardware.usb@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.usb@1.0",
+ "android.hardware.usb@1.1",
+ "android.hardware.usb@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.usb@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.usb@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.usb@1.1-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.usb@1.0",
+ "android.hardware.usb@1.1",
+ "android.hardware.usb@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.usb@1.1-adapter_genc++"],
+}
diff --git a/vibrator/1.0/Android.bp b/vibrator/1.0/Android.bp
index 354b83f..9289657 100644
--- a/vibrator/1.0/Android.bp
+++ b/vibrator/1.0/Android.bp
@@ -64,3 +64,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.vibrator@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0",
+ srcs: [
+ ":android.hardware.vibrator@1.0_hal",
+ ],
+ out: [
+ "android/hardware/vibrator/1.0/AVibrator.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.vibrator@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0",
+ srcs: [
+ ":android.hardware.vibrator@1.0_hal",
+ ],
+ out: [
+ "android/hardware/vibrator/1.0/AVibrator.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.vibrator@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.vibrator@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.vibrator@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.vibrator@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.vibrator@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.vibrator@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.vibrator@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.vibrator@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.vibrator@1.0",
+ "android.hardware.vibrator@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.vibrator@1.0-adapter_genc++"],
+}
diff --git a/vibrator/1.1/Android.bp b/vibrator/1.1/Android.bp
index a47f37c..7ce1971 100644
--- a/vibrator/1.1/Android.bp
+++ b/vibrator/1.1/Android.bp
@@ -66,3 +66,82 @@
"android.hardware.vibrator@1.0",
],
}
+
+genrule {
+ name: "android.hardware.vibrator@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.1",
+ srcs: [
+ ":android.hardware.vibrator@1.1_hal",
+ ],
+ out: [
+ "android/hardware/vibrator/1.1/AVibrator.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.vibrator@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.1",
+ srcs: [
+ ":android.hardware.vibrator@1.1_hal",
+ ],
+ out: [
+ "android/hardware/vibrator/1.1/AVibrator.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.vibrator@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.vibrator@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.vibrator@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.vibrator@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.vibrator@1.0",
+ "android.hardware.vibrator@1.1",
+ "android.hardware.vibrator@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.vibrator@1.0",
+ "android.hardware.vibrator@1.1",
+ "android.hardware.vibrator@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.vibrator@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vibrator@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.vibrator@1.1-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.vibrator@1.0",
+ "android.hardware.vibrator@1.1",
+ "android.hardware.vibrator@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.vibrator@1.1-adapter_genc++"],
+}
diff --git a/vr/1.0/Android.bp b/vr/1.0/Android.bp
index cb9e2af..6fda0e6 100644
--- a/vr/1.0/Android.bp
+++ b/vr/1.0/Android.bp
@@ -60,3 +60,78 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.vr@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0",
+ srcs: [
+ ":android.hardware.vr@1.0_hal",
+ ],
+ out: [
+ "android/hardware/vr/1.0/AVr.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.vr@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0",
+ srcs: [
+ ":android.hardware.vr@1.0_hal",
+ ],
+ out: [
+ "android/hardware/vr/1.0/AVr.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.vr@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.vr@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.vr@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.vr@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.vr@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.vr@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.vr@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.vr@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.vr@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.vr@1.0",
+ "android.hardware.vr@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.vr@1.0-adapter_genc++"],
+}
diff --git a/weaver/1.0/Android.bp b/weaver/1.0/Android.bp
index cdc59c9..c407753 100644
--- a/weaver/1.0/Android.bp
+++ b/weaver/1.0/Android.bp
@@ -64,3 +64,77 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.weaver@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.weaver@1.0",
+ srcs: [
+ ":android.hardware.weaver@1.0_hal",
+ ],
+ out: [
+ "android/hardware/weaver/1.0/AWeaver.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.weaver@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.weaver@1.0",
+ srcs: [
+ ":android.hardware.weaver@1.0_hal",
+ ],
+ out: [
+ "android/hardware/weaver/1.0/AWeaver.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.weaver@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.weaver@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.weaver@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.weaver@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.weaver@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.weaver@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.weaver@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.weaver@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.weaver@1.0-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.weaver@1.0",
+ "android.hardware.weaver@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.weaver@1.0-adapter_genc++"],
+}
diff --git a/wifi/1.0/Android.bp b/wifi/1.0/Android.bp
index d7db770..c61d989 100644
--- a/wifi/1.0/Android.bp
+++ b/wifi/1.0/Android.bp
@@ -148,3 +148,102 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.wifi@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
+ srcs: [
+ ":android.hardware.wifi@1.0_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.0/AWifi.cpp",
+ "android/hardware/wifi/1.0/AWifiApIface.cpp",
+ "android/hardware/wifi/1.0/AWifiChip.cpp",
+ "android/hardware/wifi/1.0/AWifiChipEventCallback.cpp",
+ "android/hardware/wifi/1.0/AWifiEventCallback.cpp",
+ "android/hardware/wifi/1.0/AWifiIface.cpp",
+ "android/hardware/wifi/1.0/AWifiNanIface.cpp",
+ "android/hardware/wifi/1.0/AWifiNanIfaceEventCallback.cpp",
+ "android/hardware/wifi/1.0/AWifiP2pIface.cpp",
+ "android/hardware/wifi/1.0/AWifiRttController.cpp",
+ "android/hardware/wifi/1.0/AWifiRttControllerEventCallback.cpp",
+ "android/hardware/wifi/1.0/AWifiStaIface.cpp",
+ "android/hardware/wifi/1.0/AWifiStaIfaceEventCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
+ srcs: [
+ ":android.hardware.wifi@1.0_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.0/AWifi.h",
+ "android/hardware/wifi/1.0/AWifiApIface.h",
+ "android/hardware/wifi/1.0/AWifiChip.h",
+ "android/hardware/wifi/1.0/AWifiChipEventCallback.h",
+ "android/hardware/wifi/1.0/AWifiEventCallback.h",
+ "android/hardware/wifi/1.0/AWifiIface.h",
+ "android/hardware/wifi/1.0/AWifiNanIface.h",
+ "android/hardware/wifi/1.0/AWifiNanIfaceEventCallback.h",
+ "android/hardware/wifi/1.0/AWifiP2pIface.h",
+ "android/hardware/wifi/1.0/AWifiRttController.h",
+ "android/hardware/wifi/1.0/AWifiRttControllerEventCallback.h",
+ "android/hardware/wifi/1.0/AWifiStaIface.h",
+ "android/hardware/wifi/1.0/AWifiStaIfaceEventCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.wifi@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.wifi@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.wifi@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.wifi@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.wifi@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.wifi@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.wifi@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.wifi@1.0-adapter_genc++"],
+}
diff --git a/wifi/1.0/README-NAN.md b/wifi/1.0/README-NAN.md
new file mode 100644
index 0000000..f4b3320
--- /dev/null
+++ b/wifi/1.0/README-NAN.md
@@ -0,0 +1,221 @@
+Copyright 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.
+
+# Wi-Fi Aware (NAN) HAL API Usage
+
+The Wi-Fi Aware (NAN) HAL API is defined in (<i>hardware/interfaces/wifi/\<version\>/</i>):
+
+* IWifiNanIface.hal
+* IWifiNanIfaceEventCallback.hal
+* types.hal (structure definitions)
+
+The Wi-Fi Aware (NAN) HAL API surface is very large - only a subset is used from the framework.
+
+Understanding of the HAL API subset which is actively used by the Android framework can be deduced
+by reviewing framework code, specifically (<i>frameworks/opt/net/wif/</i>):
+
+* WifiAwareNativeApi.java
+* WifiAwareNativeCallback.java
+
+The above framework files determine the API usage - and should be consulted as the authoritative
+reference. Please consult the primary HAL file for documentation - they will not be replicated
+in this document. APIs which are in the HAL but are not listed in this README file are not used by
+the framework.
+
+Note: the HAL API is translated to the legacy HAL API (<i>wifi_nan.h</i>). This README file covers
+the new HAL API only. To understand the mapping between new and legacy HALs please consult
+<i>hardware/interfaces/wifi/\<version\>/default/hidl_struct_util.cpp</i>.
+
+## IWifiNanIface
+
+Format:
+* Hard-coded values are in <b>bold</b>, e.g. <b>true</b> or <b>5</b>
+* Assigned but not fixed value are specified using the <i>variable</i> keyword, possibly with some
+details/constraints
+* Unassigned values are specified using the <i>N/A</i> keyword. Unassigned usually means initialized
+to 0.
+
+APIs:
+
+* registerEventCallback(IWifiNanIfaceEventCallback callback)
+* getCapabilitiesRequest
+* enableRequest
+ * NanEnableRequest
+ * bool[2] operateInBand
+ * Index [NanBandIndex.NAN_BAND_24GHZ] = <b>true</b>
+ * Index [NanBandIndex.NAN_BAND_5GHZ] = <i>variable</i>
+ * uint8_t hopCountMax = <b>2</b>
+ * NanConfigRequest configParams
+ * uint8_t masterPref = <i>variable</i>
+ * bool disableDiscoveryAddressChangeIndication = <i>variable</i>
+ * bool disableStartedClusterIndication = <i>variable</i>
+ * bool disableJoinedClusterIndication = <i>variable</i>
+ * bool includePublishServiceIdsInBeacon = <b>true</b>
+ * uint8_t numberOfPublishServiceIdsInBeacon = <b>0</b>
+ * bool includeSubscribeServiceIdsInBeacon = <b>true</b>
+ * uint8_t numberOfSubscribeServiceIdsInBeacon = <b>0</b>
+ * uint16_t rssiWindowSize = <b>8</b>
+ * uint32_t macAddressRandomizationIntervalSec = <i>variable</i>
+ * Normal run-time: set to <b>1800</b> (30 minutes)
+ * Tests: set to <b>120</b> (2 minutes)
+ * NanBandSpecificConfig[2] bandSpecificConfig
+ * Index [NanBandIndex.NAN_BAND_24GHZ]
+ * uint8_t rssiClose = <b>60</b>
+ * uint8_t rssiMiddle = <b>70</b>
+ * uint8_t rssiCloseProximity = <b>60</b>
+ * uint8_t dwellTimeMs = <b>200</b>
+ * uint16_t scanPeriodSec = <b>20</b>
+ * bool validDiscoveryWindowIntervalVal = <i>variable</i>
+ * uint8_t discoveryWindowIntervalVal = <i>variable</i>
+ * Index [NanBandIndex.NAN_BAND_5GHZ]
+ * uint8_t rssiClose = <b>60</b>
+ * uint8_t rssiMiddle = <b>75</b>
+ * uint8_t rssiCloseProximity = <b>60</b>
+ * uint8_t dwellTimeMs = <b>200</b>
+ * uint16_t scanPeriodSec = <b>20</b>
+ * bool validDiscoveryWindowIntervalVal = <i>variable</i>
+ * uint8_t discoveryWindowIntervalVal = <i>variable</i>
+ * NanDebugConfig debugConfigs
+ * bool validClusterIdVals = <b>true</b>
+ * uint16_t clusterIdBottomRangeVal = <i>variable</i>
+ * uint16_t clusterIdTopRangeVal = <i>variable</i>
+ * bool validIntfAddrVal = <b>false</b>
+ * MacAddress intfAddrVal = <i>N/A</i>
+ * bool validOuiVal = <b>false</b>
+ * uint32_t ouiVal = <i>N/A</i>
+ * bool validRandomFactorForceVal = <b>false</b>
+ * uint8_t randomFactorForceVal = <i>N/A</i>
+ * bool validHopCountForceVal = <b>false</b>
+ * uint8_t hopCountForceVal = <i>N/A</i>
+ * bool validDiscoveryChannelVal = <b>false</b>
+ * WifiChannelInMhz[2] discoveryChannelMhzVal = <i>N/A</i>
+ * bool validUseBeaconsInBandVal = <b>false</b>
+ * bool[2] useBeaconsInBandVal = <i>N/A</i>
+ * bool validUseSdfInBandVal = <b>false</b>
+ * bool[2] useSdfInBandVal = <i>N/A</i>
+* configRequest
+ * NanConfigRequest: same as for <i>enableRequest</i>
+* disableRequest
+* startPublishRequest
+ * NanPublishRequest
+ * NanDiscoveryCommonConfig baseConfigs
+ * uint8_t sessionId = <i>variable</i>
+ * uint16_t ttlSec = <i>variable</i>
+ * uint16_t discoveryWindowPeriod = <b>1</b>
+ * uint8_t discoveryCount = <b>0</b>
+ * vec<uint8_t> serviceName = <i>variable</i>
+ * NanMatchAlg discoveryMatchIndicator = <b>NanMatchAlg.MATCH_NEVER</b>
+ * vec<uint8_t> serviceSpecificInfo = <i>variable</i>
+ * vec<uint8_t> extendedServiceSpecificInfo = <i>N/A</i>
+ * vec<uint8_t> rxMatchFilter = <i>variable</i>
+ * vec<uint8_t> txMatchFilter = <i>variable</i>
+ * bool useRssiThreshold = <b>false</b>
+ * bool disableDiscoveryTerminationIndication = <i>variable</i>
+ * bool disableMatchExpirationIndication = <b>true</b>
+ * bool disableFollowupReceivedIndication = <b>false</b>
+ * NanDataPathSecurityConfig securityConfig = <b>NanDataPathSecurityType.OPEN</b>
+ * bool rangingRequired = <b>false</b>
+ * uint32_t rangingIntervalMsec = <i>N/A</i>
+ * bitfield<NanRangingIndication> configRangingIndications = <i>N/A</i>
+ * uint16_t distanceIngressCm = <i>N/A</i>
+ * uint16_t distanceEgressCm = <i>N/A</i>
+ * NanPublishType publishType = <i>variable</i>
+ * NanTxType txType = <b>NanTxType.BROADCAST</b>
+ * bool autoAcceptDataPathRequests = <b>false</b>
+* stopPublishRequest
+* startSubscribeRequest
+ * NanSubscribeRequest
+ * NanDiscoveryCommonConfig baseConfigs
+ * Mostly same as <i>publish</i> above except:
+ * NanMatchAlg discoveryMatchIndicator = <b>NanMatchAlg.MATCH_ONCE</b>
+ * NanSubscribeType subscribeType = <i>variable</i>
+ * NanSrfType srfType = <i>N/A</i>
+ * bool srfRespondIfInAddressSet = <i>N/A</i>
+ * bool shouldUseSrf = <i>N/A</i>
+ * bool isSsiRequiredForMatch = <i>N/A</i>
+ * vec<MacAddress> intfAddr = <i>N/A</i>
+* stopSubscribeRequest
+* transmitFollowupRequest
+ * NanTransmitFollowupRequest
+ * uint8_t discoverySessionId = <i>variable</i>
+ * uint32_t peerId = <i>variable</i>
+ * MacAddress addr = <i>variable</i>
+ * bool isHighPriority = <b>false</b>
+ * bool shouldUseDiscoveryWindow = <b>true</b>
+ * vec<uint8_t> serviceSpecificInfo = <i>variable</i>
+ * vec<uint8_t> extendedServiceSpecificInfo = <i>N/A</i>
+ * bool disableFollowupResultIndication = <b>false</b>
+* createDataInterfaceRequest
+* deleteDataInterfaceRequest
+* initiateDataPathRequest
+ * NanInitiateDataPathRequest
+ * uint32_t peerId = <i>variable</i>
+ * MacAddress peerDiscMacAddr = <i>variable</i>
+ * NanDataPathChannelCfg channelRequestType =
+ <i>NanDataPathChannelCfg.CHANNEL_NOT_REQUESTED</i>
+ * WifiChannelInMhz channel = <b>2437</b> (note that should be ignored though -
+ CHANNEL_NOT_REQUESTED!)
+ * string ifaceName = <i>variable</i>
+ * NanDataPathSecurityConfig securityConfig = <i>variable</i>
+ * vec<uint8_t> appInfo = <i>N/A</i>
+ * vec<uint8_t> serviceNameOutOfBand = <i>variable</i>
+* respondToDataPathIndicationRequest
+ * NanRespondToDataPathIndicationRequest
+ * bool acceptRequest = <i>variable</i>
+ * uint32_t ndpInstanceId = <i>variable</i>
+ * string ifaceName = <i>variable</i>
+ * NanDataPathSecurityConfig securityConfig = <i>variable</i>
+ * vec<uint8_t> appInfo = <i>N/A</i>
+ * vec<uint8_t> serviceNameOutOfBand = <i>variable</i>
+* terminateDataPathRequest
+
+## IWifiNanIfaceEventCallback
+
+Format:
+* Parameters whose values are <i>ignored</i> will be flagged, otherwise the parameter value is used
+by the framework.
+
+API:
+
+* notifyXxxResponse: all callbacks are used by framework
+* eventClusterEvent
+* eventDisabled
+* eventPublishTerminated
+* eventSubscribeTerminated
+* eventMatch
+ * NanMatchInd (all parameters are used except those listed below)
+ * vec<uint8_t> extendedServiceSpecificInfo: <i>ignored</i>
+ * bool matchOccuredInBeaconFlag: <i>ignored</i>
+ * bool outOfResourceFlag: <i>ignored</i>
+ * uint8_t rssiValue: <i>ignored</i>
+ * NanCipherSuiteType peerCipherType: <i>ignored</i>
+ * bool peerRequiresSecurityEnabledInNdp: <i>ignored</i>
+ * bool peerRequiresRanging: <i>ignored</i>
+ * uint32_t rangingMeasurementInCm: <i>ignored</i>
+ * bitfield<NanRangingIndication> rangingIndicationType: <i>ignored</i>
+* eventMatchExpired: <i>ignored</i>
+* eventFollowupReceived
+ * NanFollowupReceivedInd (all parameters are used except those listed below)
+ * bool receivedInFaw: <i>ignored</i>
+ * vec<uint8_t> extendedServiceSpecificInfo: <i>ignored</i>
+* eventTransmitFollowup
+* eventDataPathRequest
+ * NanDataPathRequestInd (all parameters are used except those listed below)
+ * bool securityRequired: <i>ignored</i>
+ * vec<uint8_t> appInfo: <i>ignored</i>
+* eventDataPathConfirm
+ * NanDataPathConfirmInd (all parameters are used except those listed below)
+ * vec<uint8_t> appInfo: <i>ignored</i>
+* eventDataPathTerminated
+
diff --git a/wifi/1.0/vts/functional/Android.bp b/wifi/1.0/vts/functional/Android.bp
index 0cebbfc..ea27f02 100644
--- a/wifi/1.0/vts/functional/Android.bp
+++ b/wifi/1.0/vts/functional/Android.bp
@@ -16,6 +16,7 @@
cc_library_static {
name: "VtsHalWifiV1_0TargetTestUtil",
+ defaults: ["hidl_defaults"],
srcs: [
"wifi_hidl_call_util_selftest.cpp",
"wifi_hidl_test.cpp",
diff --git a/wifi/1.1/Android.bp b/wifi/1.1/Android.bp
index aa6e937..0b6ecb8 100644
--- a/wifi/1.1/Android.bp
+++ b/wifi/1.1/Android.bp
@@ -69,3 +69,84 @@
"android.hardware.wifi@1.0",
],
}
+
+genrule {
+ name: "android.hardware.wifi@1.1-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.1",
+ srcs: [
+ ":android.hardware.wifi@1.1_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.1/AWifi.cpp",
+ "android/hardware/wifi/1.1/AWifiChip.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.1-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.1",
+ srcs: [
+ ":android.hardware.wifi@1.1_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.1/AWifi.h",
+ "android/hardware/wifi/1.1/AWifiChip.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.wifi@1.1-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.wifi@1.1-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.wifi@1.1-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.wifi@1.1-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ "android.hardware.wifi@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ "android.hardware.wifi@1.0-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.1-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.1",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.wifi@1.1-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ "android.hardware.wifi@1.1-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.wifi@1.1-adapter_genc++"],
+}
diff --git a/wifi/1.2/Android.bp b/wifi/1.2/Android.bp
new file mode 100644
index 0000000..4cf5b35
--- /dev/null
+++ b/wifi/1.2/Android.bp
@@ -0,0 +1,159 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+ name: "android.hardware.wifi@1.2_hal",
+ srcs: [
+ "IWifi.hal",
+ "IWifiChip.hal",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.2_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.2",
+ srcs: [
+ ":android.hardware.wifi@1.2_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.2/WifiAll.cpp",
+ "android/hardware/wifi/1.2/WifiChipAll.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.2_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.2",
+ srcs: [
+ ":android.hardware.wifi@1.2_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.2/IWifi.h",
+ "android/hardware/wifi/1.2/IHwWifi.h",
+ "android/hardware/wifi/1.2/BnHwWifi.h",
+ "android/hardware/wifi/1.2/BpHwWifi.h",
+ "android/hardware/wifi/1.2/BsWifi.h",
+ "android/hardware/wifi/1.2/IWifiChip.h",
+ "android/hardware/wifi/1.2/IHwWifiChip.h",
+ "android/hardware/wifi/1.2/BnHwWifiChip.h",
+ "android/hardware/wifi/1.2/BpHwWifiChip.h",
+ "android/hardware/wifi/1.2/BsWifiChip.h",
+ ],
+}
+
+cc_library {
+ name: "android.hardware.wifi@1.2",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.wifi@1.2_genc++"],
+ generated_headers: ["android.hardware.wifi@1.2_genc++_headers"],
+ export_generated_headers: ["android.hardware.wifi@1.2_genc++_headers"],
+ vendor_available: true,
+ vndk: {
+ enabled: true,
+ },
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.2-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.2",
+ srcs: [
+ ":android.hardware.wifi@1.2_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.2/AWifi.cpp",
+ "android/hardware/wifi/1.2/AWifiChip.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.2-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.2",
+ srcs: [
+ ":android.hardware.wifi@1.2_hal",
+ ],
+ out: [
+ "android/hardware/wifi/1.2/AWifi.h",
+ "android/hardware/wifi/1.2/AWifiChip.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.wifi@1.2-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.wifi@1.2-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.wifi@1.2-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.wifi@1.2-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ "android.hardware.wifi@1.2",
+ "android.hardware.wifi@1.0-adapter-helper",
+ "android.hardware.wifi@1.1-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ "android.hardware.wifi@1.2",
+ "android.hardware.wifi@1.0-adapter-helper",
+ "android.hardware.wifi@1.1-adapter-helper",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi@1.2-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi@1.2",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.wifi@1.2-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.wifi@1.0",
+ "android.hardware.wifi@1.1",
+ "android.hardware.wifi@1.2",
+ "android.hardware.wifi@1.2-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.wifi@1.2-adapter_genc++"],
+}
diff --git a/wifi/1.2/Android.mk b/wifi/1.2/Android.mk
new file mode 100644
index 0000000..d738076
--- /dev/null
+++ b/wifi/1.2/Android.mk
@@ -0,0 +1,64 @@
+# This file is autogenerated by hidl-gen. Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+################################################################################
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.wifi-V1.2-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.wifi-V1.0-java \
+ android.hardware.wifi-V1.1-java \
+ android.hidl.base-V1.0-java \
+
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LIBRARIES += core-oj hwbinder
+
+#
+# Build IWifi.hal
+#
+GEN := $(intermediates)/android/hardware/wifi/V1_2/IWifi.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IWifi.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.wifi@1.2::IWifi
+
+$(GEN): $(LOCAL_PATH)/IWifi.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IWifiChip.hal
+#
+GEN := $(intermediates)/android/hardware/wifi/V1_2/IWifiChip.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IWifiChip.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.wifi@1.2::IWifiChip
+
+$(GEN): $(LOCAL_PATH)/IWifiChip.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+include $(BUILD_JAVA_LIBRARY)
+
+
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/wifi/1.2/IWifi.hal b/wifi/1.2/IWifi.hal
new file mode 100644
index 0000000..7f47027
--- /dev/null
+++ b/wifi/1.2/IWifi.hal
@@ -0,0 +1,29 @@
+/*
+ * Copyright 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.wifi@1.2;
+
+import @1.1::IWifi;
+
+/**
+ * This is the root of the HAL module and is the interface returned when
+ * loading an implementation of the Wi-Fi HAL. There must be at most one
+ * module loaded in the system.
+ * IWifi.getChip() may return either a @1.0::IWifiChip or @1.1::IWifiChip
+ * or @1.2:IWifiChip
+ */
+interface IWifi extends @1.1::IWifi {
+};
diff --git a/wifi/1.2/IWifiChip.hal b/wifi/1.2/IWifiChip.hal
new file mode 100644
index 0000000..72cbf81
--- /dev/null
+++ b/wifi/1.2/IWifiChip.hal
@@ -0,0 +1,27 @@
+/*
+ * Copyright 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.wifi@1.2;
+
+import @1.1::IWifiChip;
+
+/**
+ * Interface that represents a chip that must be configured as a single unit.
+ * The HAL/driver/firmware will be responsible for determining which phy is used
+ * to perform operations like NAN, RTT, etc.
+ */
+interface IWifiChip extends @1.1::IWifiChip {
+};
diff --git a/wifi/1.1/default/Android.mk b/wifi/1.2/default/Android.mk
similarity index 97%
rename from wifi/1.1/default/Android.mk
rename to wifi/1.2/default/Android.mk
index 5758422..6ce5e89 100644
--- a/wifi/1.1/default/Android.mk
+++ b/wifi/1.2/default/Android.mk
@@ -39,6 +39,7 @@
LOCAL_SHARED_LIBRARIES := \
android.hardware.wifi@1.0 \
android.hardware.wifi@1.1 \
+ android.hardware.wifi@1.2 \
libbase \
libcutils \
libhidlbase \
diff --git a/wifi/1.1/default/OWNERS b/wifi/1.2/default/OWNERS
similarity index 100%
rename from wifi/1.1/default/OWNERS
rename to wifi/1.2/default/OWNERS
diff --git a/wifi/1.1/default/THREADING.README b/wifi/1.2/default/THREADING.README
similarity index 100%
rename from wifi/1.1/default/THREADING.README
rename to wifi/1.2/default/THREADING.README
diff --git a/wifi/1.1/default/android.hardware.wifi@1.0-service.rc b/wifi/1.2/default/android.hardware.wifi@1.0-service.rc
similarity index 100%
rename from wifi/1.1/default/android.hardware.wifi@1.0-service.rc
rename to wifi/1.2/default/android.hardware.wifi@1.0-service.rc
diff --git a/wifi/1.1/default/hidl_callback_util.h b/wifi/1.2/default/hidl_callback_util.h
similarity index 98%
rename from wifi/1.1/default/hidl_callback_util.h
rename to wifi/1.2/default/hidl_callback_util.h
index fb13622..65fe80b 100644
--- a/wifi/1.1/default/hidl_callback_util.h
+++ b/wifi/1.2/default/hidl_callback_util.h
@@ -51,7 +51,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace hidl_callback_util {
template <typename CallbackType>
@@ -114,7 +114,7 @@
} // namespace hidl_callback_util
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/hidl_return_util.h b/wifi/1.2/default/hidl_return_util.h
similarity index 98%
rename from wifi/1.1/default/hidl_return_util.h
rename to wifi/1.2/default/hidl_return_util.h
index f36c8bd..6fe382c 100644
--- a/wifi/1.1/default/hidl_return_util.h
+++ b/wifi/1.2/default/hidl_return_util.h
@@ -23,7 +23,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace hidl_return_util {
using namespace android::hardware::wifi::V1_0;
@@ -126,7 +126,7 @@
} // namespace hidl_util
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/hidl_struct_util.cpp b/wifi/1.2/default/hidl_struct_util.cpp
similarity index 99%
rename from wifi/1.1/default/hidl_struct_util.cpp
rename to wifi/1.2/default/hidl_struct_util.cpp
index c53cdc5..1ad838b 100644
--- a/wifi/1.1/default/hidl_struct_util.cpp
+++ b/wifi/1.2/default/hidl_struct_util.cpp
@@ -22,7 +22,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace hidl_struct_util {
@@ -2209,7 +2209,7 @@
}
} // namespace hidl_struct_util
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/hidl_struct_util.h b/wifi/1.2/default/hidl_struct_util.h
similarity index 99%
rename from wifi/1.1/default/hidl_struct_util.h
rename to wifi/1.2/default/hidl_struct_util.h
index 747fd2f..ee5cbe0 100644
--- a/wifi/1.1/default/hidl_struct_util.h
+++ b/wifi/1.2/default/hidl_struct_util.h
@@ -34,7 +34,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace hidl_struct_util {
using namespace android::hardware::wifi::V1_0;
@@ -168,7 +168,7 @@
std::vector<RttResult>* hidl_results);
} // namespace hidl_struct_util
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/hidl_sync_util.cpp b/wifi/1.2/default/hidl_sync_util.cpp
similarity index 96%
rename from wifi/1.1/default/hidl_sync_util.cpp
rename to wifi/1.2/default/hidl_sync_util.cpp
index ba18e34..0ee47b4 100644
--- a/wifi/1.1/default/hidl_sync_util.cpp
+++ b/wifi/1.2/default/hidl_sync_util.cpp
@@ -23,7 +23,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace hidl_sync_util {
@@ -33,7 +33,7 @@
} // namespace hidl_sync_util
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/hidl_sync_util.h b/wifi/1.2/default/hidl_sync_util.h
similarity index 96%
rename from wifi/1.1/default/hidl_sync_util.h
rename to wifi/1.2/default/hidl_sync_util.h
index 0e882df..8381862 100644
--- a/wifi/1.1/default/hidl_sync_util.h
+++ b/wifi/1.2/default/hidl_sync_util.h
@@ -24,13 +24,13 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace hidl_sync_util {
std::unique_lock<std::recursive_mutex> acquireGlobalLock();
} // namespace hidl_sync_util
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/service.cpp b/wifi/1.2/default/service.cpp
similarity index 91%
rename from wifi/1.1/default/service.cpp
rename to wifi/1.2/default/service.cpp
index b4aed6c..2a6c324 100644
--- a/wifi/1.1/default/service.cpp
+++ b/wifi/1.2/default/service.cpp
@@ -32,8 +32,8 @@
configureRpcThreadpool(1, true /* callerWillJoin */);
// Setup hwbinder service
- android::sp<android::hardware::wifi::V1_1::IWifi> service =
- new android::hardware::wifi::V1_1::implementation::Wifi();
+ android::sp<android::hardware::wifi::V1_2::IWifi> service =
+ new android::hardware::wifi::V1_2::implementation::Wifi();
CHECK_EQ(service->registerAsService(), android::NO_ERROR)
<< "Failed to register wifi HAL";
diff --git a/wifi/1.1/default/wifi.cpp b/wifi/1.2/default/wifi.cpp
similarity index 99%
rename from wifi/1.1/default/wifi.cpp
rename to wifi/1.2/default/wifi.cpp
index c46ef95..67fcb65 100644
--- a/wifi/1.1/default/wifi.cpp
+++ b/wifi/1.2/default/wifi.cpp
@@ -28,7 +28,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using hidl_return_util::validateAndCall;
using hidl_return_util::validateAndCallWithLock;
@@ -199,7 +199,7 @@
return createWifiStatus(WifiStatusCode::SUCCESS);
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi.h b/wifi/1.2/default/wifi.h
similarity index 93%
rename from wifi/1.1/default/wifi.h
rename to wifi/1.2/default/wifi.h
index 3a64cbd..95ae58f 100644
--- a/wifi/1.1/default/wifi.h
+++ b/wifi/1.2/default/wifi.h
@@ -20,7 +20,7 @@
#include <functional>
#include <android-base/macros.h>
-#include <android/hardware/wifi/1.1/IWifi.h>
+#include <android/hardware/wifi/1.2/IWifi.h>
#include <utils/Looper.h>
#include "hidl_callback_util.h"
@@ -31,14 +31,13 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
-using namespace android::hardware::wifi::V1_0;
/**
* Root HIDL interface object used to control the Wifi HAL.
*/
-class Wifi : public V1_1::IWifi {
+class Wifi : public V1_2::IWifi {
public:
Wifi();
@@ -81,7 +80,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_ap_iface.cpp b/wifi/1.2/default/wifi_ap_iface.cpp
similarity index 98%
rename from wifi/1.1/default/wifi_ap_iface.cpp
rename to wifi/1.2/default/wifi_ap_iface.cpp
index 150a6cc..347ffc6 100644
--- a/wifi/1.1/default/wifi_ap_iface.cpp
+++ b/wifi/1.2/default/wifi_ap_iface.cpp
@@ -24,7 +24,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using hidl_return_util::validateAndCall;
@@ -100,7 +100,7 @@
return {createWifiStatusFromLegacyError(legacy_status), valid_frequencies};
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_ap_iface.h b/wifi/1.2/default/wifi_ap_iface.h
similarity index 98%
rename from wifi/1.1/default/wifi_ap_iface.h
rename to wifi/1.2/default/wifi_ap_iface.h
index 608fe6b..b46425b 100644
--- a/wifi/1.1/default/wifi_ap_iface.h
+++ b/wifi/1.2/default/wifi_ap_iface.h
@@ -25,7 +25,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using namespace android::hardware::wifi::V1_0;
@@ -64,7 +64,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_chip.cpp b/wifi/1.2/default/wifi_chip.cpp
similarity index 99%
rename from wifi/1.1/default/wifi_chip.cpp
rename to wifi/1.2/default/wifi_chip.cpp
index 2f40234..63d17a2 100644
--- a/wifi/1.1/default/wifi_chip.cpp
+++ b/wifi/1.2/default/wifi_chip.cpp
@@ -46,7 +46,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using hidl_return_util::validateAndCall;
@@ -903,7 +903,7 @@
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_chip.h b/wifi/1.2/default/wifi_chip.h
similarity index 99%
rename from wifi/1.1/default/wifi_chip.h
rename to wifi/1.2/default/wifi_chip.h
index e88100b..2b9ca64 100644
--- a/wifi/1.1/default/wifi_chip.h
+++ b/wifi/1.2/default/wifi_chip.h
@@ -34,7 +34,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using namespace android::hardware::wifi::V1_0;
@@ -209,7 +209,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_feature_flags.h b/wifi/1.2/default/wifi_feature_flags.h
similarity index 96%
rename from wifi/1.1/default/wifi_feature_flags.h
rename to wifi/1.2/default/wifi_feature_flags.h
index 5939ffb..c692cd9 100644
--- a/wifi/1.1/default/wifi_feature_flags.h
+++ b/wifi/1.2/default/wifi_feature_flags.h
@@ -20,7 +20,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
class WifiFeatureFlags {
@@ -33,7 +33,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_legacy_hal.cpp b/wifi/1.2/default/wifi_legacy_hal.cpp
similarity index 99%
rename from wifi/1.1/default/wifi_legacy_hal.cpp
rename to wifi/1.2/default/wifi_legacy_hal.cpp
index a6f6971..54d9ca0 100644
--- a/wifi/1.1/default/wifi_legacy_hal.cpp
+++ b/wifi/1.2/default/wifi_legacy_hal.cpp
@@ -35,7 +35,7 @@
static constexpr uint32_t kLinkLayerStatsDataMpduSizeThreshold = 128;
static constexpr uint32_t kMaxWakeReasonStatsArraySize = 32;
static constexpr uint32_t kMaxRingBuffers = 10;
-static constexpr uint32_t kMaxStopCompleteWaitMs = 50;
+static constexpr uint32_t kMaxStopCompleteWaitMs = 100;
// Helper function to create a non-const char* for legacy Hal API's.
std::vector<char> makeCharVec(const std::string& str) {
@@ -49,7 +49,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace legacy_hal {
// Legacy HAL functions accept "C" style function pointers, so use global
@@ -1339,7 +1339,7 @@
} // namespace legacy_hal
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_legacy_hal.h b/wifi/1.2/default/wifi_legacy_hal.h
similarity index 99%
rename from wifi/1.1/default/wifi_legacy_hal.h
rename to wifi/1.2/default/wifi_legacy_hal.h
index 5498803..d7be1ee 100644
--- a/wifi/1.1/default/wifi_legacy_hal.h
+++ b/wifi/1.2/default/wifi_legacy_hal.h
@@ -27,7 +27,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
// This is in a separate namespace to prevent typename conflicts between
// the legacy HAL types and the HIDL interface types.
@@ -304,7 +304,7 @@
} // namespace legacy_hal
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_legacy_hal_stubs.cpp b/wifi/1.2/default/wifi_legacy_hal_stubs.cpp
similarity index 99%
rename from wifi/1.1/default/wifi_legacy_hal_stubs.cpp
rename to wifi/1.2/default/wifi_legacy_hal_stubs.cpp
index c02e3ba..48fce6d 100644
--- a/wifi/1.1/default/wifi_legacy_hal_stubs.cpp
+++ b/wifi/1.2/default/wifi_legacy_hal_stubs.cpp
@@ -20,7 +20,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace legacy_hal {
template <typename>
@@ -138,7 +138,7 @@
}
} // namespace legacy_hal
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_legacy_hal_stubs.h b/wifi/1.2/default/wifi_legacy_hal_stubs.h
similarity index 96%
rename from wifi/1.1/default/wifi_legacy_hal_stubs.h
rename to wifi/1.2/default/wifi_legacy_hal_stubs.h
index bfc4c9b..d560dd4 100644
--- a/wifi/1.1/default/wifi_legacy_hal_stubs.h
+++ b/wifi/1.2/default/wifi_legacy_hal_stubs.h
@@ -20,7 +20,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace legacy_hal {
#include <hardware_legacy/wifi_hal.h>
@@ -28,7 +28,7 @@
bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn);
} // namespace legacy_hal
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_mode_controller.cpp b/wifi/1.2/default/wifi_mode_controller.cpp
similarity index 98%
rename from wifi/1.1/default/wifi_mode_controller.cpp
rename to wifi/1.2/default/wifi_mode_controller.cpp
index b8a44c2..6d184ca 100644
--- a/wifi/1.1/default/wifi_mode_controller.cpp
+++ b/wifi/1.2/default/wifi_mode_controller.cpp
@@ -48,7 +48,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace mode_controller {
@@ -80,7 +80,7 @@
}
} // namespace mode_controller
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_mode_controller.h b/wifi/1.2/default/wifi_mode_controller.h
similarity index 97%
rename from wifi/1.1/default/wifi_mode_controller.h
rename to wifi/1.2/default/wifi_mode_controller.h
index 6984509..5619f67 100644
--- a/wifi/1.1/default/wifi_mode_controller.h
+++ b/wifi/1.2/default/wifi_mode_controller.h
@@ -24,7 +24,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
namespace mode_controller {
using namespace android::hardware::wifi::V1_0;
@@ -53,7 +53,7 @@
} // namespace mode_controller
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_nan_iface.cpp b/wifi/1.2/default/wifi_nan_iface.cpp
similarity index 99%
rename from wifi/1.1/default/wifi_nan_iface.cpp
rename to wifi/1.2/default/wifi_nan_iface.cpp
index a111d06..93b8902 100644
--- a/wifi/1.1/default/wifi_nan_iface.cpp
+++ b/wifi/1.2/default/wifi_nan_iface.cpp
@@ -24,7 +24,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using hidl_return_util::validateAndCall;
@@ -763,7 +763,7 @@
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_nan_iface.h b/wifi/1.2/default/wifi_nan_iface.h
similarity index 99%
rename from wifi/1.1/default/wifi_nan_iface.h
rename to wifi/1.2/default/wifi_nan_iface.h
index 260d8ab..34552ea 100644
--- a/wifi/1.1/default/wifi_nan_iface.h
+++ b/wifi/1.2/default/wifi_nan_iface.h
@@ -27,7 +27,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using namespace android::hardware::wifi::V1_0;
@@ -133,7 +133,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_p2p_iface.cpp b/wifi/1.2/default/wifi_p2p_iface.cpp
similarity index 97%
rename from wifi/1.1/default/wifi_p2p_iface.cpp
rename to wifi/1.2/default/wifi_p2p_iface.cpp
index 78e08db..41c8d0a 100644
--- a/wifi/1.1/default/wifi_p2p_iface.cpp
+++ b/wifi/1.2/default/wifi_p2p_iface.cpp
@@ -23,7 +23,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using hidl_return_util::validateAndCall;
@@ -64,7 +64,7 @@
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_p2p_iface.h b/wifi/1.2/default/wifi_p2p_iface.h
similarity index 97%
rename from wifi/1.1/default/wifi_p2p_iface.h
rename to wifi/1.2/default/wifi_p2p_iface.h
index f563a3d..6b85188 100644
--- a/wifi/1.1/default/wifi_p2p_iface.h
+++ b/wifi/1.2/default/wifi_p2p_iface.h
@@ -25,7 +25,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using namespace android::hardware::wifi::V1_0;
@@ -57,7 +57,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_rtt_controller.cpp b/wifi/1.2/default/wifi_rtt_controller.cpp
similarity index 99%
rename from wifi/1.1/default/wifi_rtt_controller.cpp
rename to wifi/1.2/default/wifi_rtt_controller.cpp
index 9ef702d..2fab06c 100644
--- a/wifi/1.1/default/wifi_rtt_controller.cpp
+++ b/wifi/1.2/default/wifi_rtt_controller.cpp
@@ -24,7 +24,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using hidl_return_util::validateAndCall;
@@ -291,7 +291,7 @@
return createWifiStatusFromLegacyError(legacy_status);
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_rtt_controller.h b/wifi/1.2/default/wifi_rtt_controller.h
similarity index 98%
rename from wifi/1.1/default/wifi_rtt_controller.h
rename to wifi/1.2/default/wifi_rtt_controller.h
index 5437885..f1a55da 100644
--- a/wifi/1.1/default/wifi_rtt_controller.h
+++ b/wifi/1.2/default/wifi_rtt_controller.h
@@ -27,7 +27,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
/**
@@ -97,7 +97,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_sta_iface.cpp b/wifi/1.2/default/wifi_sta_iface.cpp
similarity index 99%
rename from wifi/1.1/default/wifi_sta_iface.cpp
rename to wifi/1.2/default/wifi_sta_iface.cpp
index 28f3f02..3622805 100644
--- a/wifi/1.1/default/wifi_sta_iface.cpp
+++ b/wifi/1.2/default/wifi_sta_iface.cpp
@@ -24,7 +24,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using hidl_return_util::validateAndCall;
@@ -623,7 +623,7 @@
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_sta_iface.h b/wifi/1.2/default/wifi_sta_iface.h
similarity index 99%
rename from wifi/1.1/default/wifi_sta_iface.h
rename to wifi/1.2/default/wifi_sta_iface.h
index 587a5de..a8d11a7 100644
--- a/wifi/1.1/default/wifi_sta_iface.h
+++ b/wifi/1.2/default/wifi_sta_iface.h
@@ -27,7 +27,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using namespace android::hardware::wifi::V1_0;
@@ -160,7 +160,7 @@
};
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_status_util.cpp b/wifi/1.2/default/wifi_status_util.cpp
similarity index 98%
rename from wifi/1.1/default/wifi_status_util.cpp
rename to wifi/1.2/default/wifi_status_util.cpp
index 3a85e09..992eb10 100644
--- a/wifi/1.1/default/wifi_status_util.cpp
+++ b/wifi/1.2/default/wifi_status_util.cpp
@@ -19,7 +19,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
std::string legacyErrorToString(legacy_hal::wifi_error error) {
@@ -100,7 +100,7 @@
}
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/1.1/default/wifi_status_util.h b/wifi/1.2/default/wifi_status_util.h
similarity index 97%
rename from wifi/1.1/default/wifi_status_util.h
rename to wifi/1.2/default/wifi_status_util.h
index cc93d66..e9136b3 100644
--- a/wifi/1.1/default/wifi_status_util.h
+++ b/wifi/1.2/default/wifi_status_util.h
@@ -24,7 +24,7 @@
namespace android {
namespace hardware {
namespace wifi {
-namespace V1_1 {
+namespace V1_2 {
namespace implementation {
using namespace android::hardware::wifi::V1_0;
@@ -37,7 +37,7 @@
WifiStatus createWifiStatusFromLegacyError(legacy_hal::wifi_error error);
} // namespace implementation
-} // namespace V1_1
+} // namespace V1_2
} // namespace wifi
} // namespace hardware
} // namespace android
diff --git a/wifi/Android.bp b/wifi/Android.bp
index 1153b0c..14521ee 100644
--- a/wifi/Android.bp
+++ b/wifi/Android.bp
@@ -4,6 +4,7 @@
"1.0/vts/functional",
"1.1",
"1.1/vts/functional",
+ "1.2",
"offload/1.0",
"offload/1.0/vts/functional",
"supplicant/1.0",
diff --git a/wifi/offload/1.0/Android.bp b/wifi/offload/1.0/Android.bp
index 5b7fcad..017fc39 100644
--- a/wifi/offload/1.0/Android.bp
+++ b/wifi/offload/1.0/Android.bp
@@ -71,3 +71,79 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.wifi.offload@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.offload@1.0",
+ srcs: [
+ ":android.hardware.wifi.offload@1.0_hal",
+ ],
+ out: [
+ "android/hardware/wifi/offload/1.0/AOffload.cpp",
+ "android/hardware/wifi/offload/1.0/AOffloadCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi.offload@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.offload@1.0",
+ srcs: [
+ ":android.hardware.wifi.offload@1.0_hal",
+ ],
+ out: [
+ "android/hardware/wifi/offload/1.0/AOffload.h",
+ "android/hardware/wifi/offload/1.0/AOffloadCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.wifi.offload@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.wifi.offload@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.wifi.offload@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.wifi.offload@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.wifi.offload@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.wifi.offload@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi.offload@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.offload@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.wifi.offload@1.0-adapter",
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.wifi.offload@1.0",
+ "android.hardware.wifi.offload@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.wifi.offload@1.0-adapter_genc++"],
+}
diff --git a/wifi/supplicant/1.0/Android.bp b/wifi/supplicant/1.0/Android.bp
index 978192d..8a0b802 100644
--- a/wifi/supplicant/1.0/Android.bp
+++ b/wifi/supplicant/1.0/Android.bp
@@ -141,3 +141,100 @@
"libutils",
],
}
+
+genrule {
+ name: "android.hardware.wifi.supplicant@1.0-adapter-helper_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
+ srcs: [
+ ":android.hardware.wifi.supplicant@1.0_hal",
+ ],
+ out: [
+ "android/hardware/wifi/supplicant/1.0/ASupplicant.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantCallback.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantIface.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantNetwork.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pIface.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pIfaceCallback.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pNetwork.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pNetworkCallback.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaIface.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaIfaceCallback.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaNetwork.cpp",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaNetworkCallback.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi.supplicant@1.0-adapter-helper_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
+ srcs: [
+ ":android.hardware.wifi.supplicant@1.0_hal",
+ ],
+ out: [
+ "android/hardware/wifi/supplicant/1.0/ASupplicant.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantCallback.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantIface.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantNetwork.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pIface.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pIfaceCallback.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pNetwork.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantP2pNetworkCallback.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaIface.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaIfaceCallback.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaNetwork.h",
+ "android/hardware/wifi/supplicant/1.0/ASupplicantStaNetworkCallback.h",
+ ],
+}
+
+
+cc_library {
+ name: "android.hardware.wifi.supplicant@1.0-adapter-helper",
+ defaults: ["hidl-module-defaults"],
+ generated_sources: ["android.hardware.wifi.supplicant@1.0-adapter-helper_genc++"],
+ generated_headers: ["android.hardware.wifi.supplicant@1.0-adapter-helper_genc++_headers"],
+ export_generated_headers: ["android.hardware.wifi.supplicant@1.0-adapter-helper_genc++_headers"],
+ vendor_available: true,
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libhidladapter",
+ "android.hardware.wifi.supplicant@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libhidladapter",
+ "android.hardware.wifi.supplicant@1.0",
+ "android.hidl.base@1.0-adapter-helper",
+ ],
+}
+
+genrule {
+ name: "android.hardware.wifi.supplicant@1.0-adapter_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++-adapter-main -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.wifi.supplicant@1.0",
+ out: ["main.cpp"]
+}
+
+cc_test {
+ name: "android.hardware.wifi.supplicant@1.0-adapter",
+ defaults: ["hidl-module-defaults"],
+ shared_libs: [
+ "libhidladapter",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.wifi.supplicant@1.0",
+ "android.hardware.wifi.supplicant@1.0-adapter-helper",
+ ],
+ generated_sources: ["android.hardware.wifi.supplicant@1.0-adapter_genc++"],
+}