From 2fd9496ecd4fc432f103ccd73625aed4b7cec5c0 Mon Sep 17 00:00:00 2001 From: Yu Shan Date: Mon, 21 Aug 2023 19:46:23 -0700 Subject: [PATCH] Use AIDL for test vendor properties. Use AIDL enum instead of hard coding the test vendor property definitions so that we don't have to duplicate the value among VHAL and the clients. This also shows how vendor can uses a custom AIDL enum to define vendor properties. Test: atest FakeVehicleHardwareTest Bug: 296913406 Change-Id: Ief889b86bfbef136f8afd4a4f49405f2213b441c --- .../JsonConfigLoader/Android.bp | 7 +- .../JsonConfigLoader/src/JsonConfigLoader.cpp | 54 ++++--- .../default_config/config/TestProperties.json | 28 ++-- .../config/VendorClusterTestProperties.json | 10 +- .../aidl/impl/fake_impl/hardware/Android.bp | 7 +- .../hardware/src/FakeVehicleHardware.cpp | 25 ++- .../impl/fake_impl/hardware/test/Android.bp | 11 +- .../hardware/test/FakeVehicleHardwareTest.cpp | 27 ++-- automotive/vehicle/aidl/impl/utils/README.md | 4 +- .../impl/utils/common/include/PropertyUtils.h | 16 -- .../aidl/impl/utils/common/test/Android.bp | 1 - .../utils/common/test/VehicleUtilsTest.cpp | 4 +- .../utils/test/include/TestPropertyUtils.h | 105 ------------- .../Android.bp | 16 +- .../vehicle/TestVendorProperty.aidl | 145 ++++++++++++++++++ 15 files changed, 258 insertions(+), 202 deletions(-) delete mode 100644 automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h rename automotive/vehicle/aidl/impl/utils/{test => test_vendor_properties}/Android.bp (68%) create mode 100644 automotive/vehicle/aidl/impl/utils/test_vendor_properties/android/hardware/automotive/vehicle/TestVendorProperty.aidl diff --git a/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/Android.bp b/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/Android.bp index 6984d5e2d5..75a3541cdd 100644 --- a/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/Android.bp +++ b/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/Android.bp @@ -35,14 +35,17 @@ cc_library { cc_library { name: "VehicleHalJsonConfigLoaderEnableTestProperties", vendor: true, - srcs: ["src/*.cpp"], + srcs: [ + "src/*.cpp", + ":VhalTestVendorProperties", + ], local_include_dirs: ["include"], export_include_dirs: ["include"], defaults: ["VehicleHalDefaults"], static_libs: ["VehicleHalUtils"], header_libs: [ - "VehicleHalTestUtilHeaders", "IVehicleGeneratedHeaders", + "libbinder_headers", ], cflags: ["-DENABLE_VEHICLE_HAL_TEST_PROPERTIES"], shared_libs: ["libjsoncpp"], diff --git a/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/src/JsonConfigLoader.cpp b/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/src/JsonConfigLoader.cpp index 0a1f90414e..39ce10e64d 100644 --- a/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/src/JsonConfigLoader.cpp +++ b/automotive/vehicle/aidl/impl/default_config/JsonConfigLoader/src/JsonConfigLoader.cpp @@ -21,7 +21,7 @@ #include #ifdef ENABLE_VEHICLE_HAL_TEST_PROPERTIES -#include +#include #endif // ENABLE_VEHICLE_HAL_TEST_PROPERTIES #include @@ -91,10 +91,6 @@ const std::unordered_map CONSTANTS_BY_NAME = { {"HVAC_ALL", HVAC_ALL}, {"HVAC_LEFT", HVAC_LEFT}, {"HVAC_RIGHT", HVAC_RIGHT}, - {"VENDOR_EXTENSION_INT_PROPERTY", VENDOR_EXTENSION_INT_PROPERTY}, - {"VENDOR_EXTENSION_BOOLEAN_PROPERTY", VENDOR_EXTENSION_BOOLEAN_PROPERTY}, - {"VENDOR_EXTENSION_STRING_PROPERTY", VENDOR_EXTENSION_STRING_PROPERTY}, - {"VENDOR_EXTENSION_FLOAT_PROPERTY", VENDOR_EXTENSION_FLOAT_PROPERTY}, {"WINDOW_1_LEFT", WINDOW_1_LEFT}, {"WINDOW_1_RIGHT", WINDOW_1_RIGHT}, {"WINDOW_2_LEFT", WINDOW_2_LEFT}, @@ -133,24 +129,9 @@ const std::unordered_map CONSTANTS_BY_NAME = { {"EV_STOPPING_MODE_HOLD", EV_STOPPING_MODE_HOLD}, {"MIRROR_DRIVER_LEFT_RIGHT", toInt(VehicleAreaMirror::DRIVER_LEFT) | toInt(VehicleAreaMirror::DRIVER_RIGHT)}, -#ifdef ENABLE_VEHICLE_HAL_TEST_PROPERTIES - // Following are test properties: - {"ECHO_REVERSE_BYTES", ECHO_REVERSE_BYTES}, - {"VENDOR_PROPERTY_ID", VENDOR_PROPERTY_ID}, - {"kMixedTypePropertyForTest", kMixedTypePropertyForTest}, - {"VENDOR_CLUSTER_NAVIGATION_STATE", VENDOR_CLUSTER_NAVIGATION_STATE}, - {"VENDOR_CLUSTER_REQUEST_DISPLAY", VENDOR_CLUSTER_REQUEST_DISPLAY}, - {"VENDOR_CLUSTER_SWITCH_UI", VENDOR_CLUSTER_SWITCH_UI}, - {"VENDOR_CLUSTER_DISPLAY_STATE", VENDOR_CLUSTER_DISPLAY_STATE}, - {"VENDOR_CLUSTER_REPORT_STATE", VENDOR_CLUSTER_REPORT_STATE}, - {"PLACEHOLDER_PROPERTY_INT", PLACEHOLDER_PROPERTY_INT}, - {"PLACEHOLDER_PROPERTY_FLOAT", PLACEHOLDER_PROPERTY_FLOAT}, - {"PLACEHOLDER_PROPERTY_BOOLEAN", PLACEHOLDER_PROPERTY_BOOLEAN}, - {"PLACEHOLDER_PROPERTY_STRING", PLACEHOLDER_PROPERTY_STRING} -#endif // ENABLE_VEHICLE_HAL_TEST_PROPERTIES }; -// A class to parse constant values for type T. +// A class to parse constant values for type T where T is defined as an enum in NDK AIDL backend. template class ConstantParser final : public ConstantParserInterface { public: @@ -181,6 +162,33 @@ class ConstantParser final : public ConstantParserInterface { std::unordered_map mValueByName; }; +#ifdef ENABLE_VEHICLE_HAL_TEST_PROPERTIES +// A class to parse constant values for type T where T is defined as an enum in CPP AIDL backend. +template +class CppConstantParser final : public ConstantParserInterface { + public: + CppConstantParser() { + for (const T& v : android::enum_range()) { + std::string name = android::hardware::automotive::vehicle::toString(v); + mValueByName[name] = toInt(v); + } + } + + ~CppConstantParser() = default; + + Result parseValue(const std::string& name) const override { + auto it = mValueByName.find(name); + if (it == mValueByName.end()) { + return Error() << "Constant name: " << name << " is not defined"; + } + return it->second; + } + + private: + std::unordered_map mValueByName; +}; +#endif + // A class to parse constant values defined in CONSTANTS_BY_NAME map. class LocalVariableParser final : public ConstantParserInterface { public: @@ -260,6 +268,10 @@ JsonValueParser::JsonValueParser() { mConstantParsersByType["LaneCenteringAssistState"] = std::make_unique>(); mConstantParsersByType["Constants"] = std::make_unique(); +#ifdef ENABLE_VEHICLE_HAL_TEST_PROPERTIES + mConstantParsersByType["TestVendorProperty"] = + std::make_unique>(); +#endif // ENABLE_VEHICLE_HAL_TEST_PROPERTIES } template <> diff --git a/automotive/vehicle/aidl/impl/default_config/config/TestProperties.json b/automotive/vehicle/aidl/impl/default_config/config/TestProperties.json index fd4b0026bd..73e4d44d0c 100644 --- a/automotive/vehicle/aidl/impl/default_config/config/TestProperties.json +++ b/automotive/vehicle/aidl/impl/default_config/config/TestProperties.json @@ -1,7 +1,7 @@ { "properties": [ { - "property": "Constants::kMixedTypePropertyForTest", + "property": "TestVendorProperty::MIXED_TYPE_PROPERTY_FOR_TEST", "defaultValue": { "floatValues": [ 4.5 @@ -28,7 +28,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::VENDOR_EXTENSION_BOOLEAN_PROPERTY", + "property": "TestVendorProperty::VENDOR_EXTENSION_BOOLEAN_PROPERTY", "areas": [ { "defaultValue": { @@ -67,7 +67,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::VENDOR_EXTENSION_FLOAT_PROPERTY", + "property": "TestVendorProperty::VENDOR_EXTENSION_FLOAT_PROPERTY", "areas": [ { "defaultValue": { @@ -94,7 +94,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::VENDOR_EXTENSION_INT_PROPERTY", + "property": "TestVendorProperty::VENDOR_EXTENSION_INT_PROPERTY", "areas": [ { "defaultValue": { @@ -131,7 +131,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::VENDOR_EXTENSION_STRING_PROPERTY", + "property": "TestVendorProperty::VENDOR_EXTENSION_STRING_PROPERTY", "defaultValue": { "stringValue": "Vendor String Property" }, @@ -139,7 +139,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::PLACEHOLDER_PROPERTY_INT", + "property": "TestVendorProperty::PLACEHOLDER_PROPERTY_INT", "defaultValue": { "int32Values": [ 0 @@ -149,7 +149,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::PLACEHOLDER_PROPERTY_FLOAT", + "property": "TestVendorProperty::PLACEHOLDER_PROPERTY_FLOAT", "defaultValue": { "floatValues": [ 0.0 @@ -159,7 +159,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::PLACEHOLDER_PROPERTY_BOOLEAN", + "property": "TestVendorProperty::PLACEHOLDER_PROPERTY_BOOLEAN", "defaultValue": { "int32Values": [ 0 @@ -169,7 +169,7 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::PLACEHOLDER_PROPERTY_STRING", + "property": "TestVendorProperty::PLACEHOLDER_PROPERTY_STRING", "defaultValue": { "stringValue": "Test" }, @@ -177,12 +177,12 @@ "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::ECHO_REVERSE_BYTES", + "property": "TestVendorProperty::ECHO_REVERSE_BYTES", "access": "VehiclePropertyAccess::READ_WRITE", "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::VENDOR_PROPERTY_ID", + "property": "TestVendorProperty::VENDOR_PROPERTY_FOR_ERROR_CODE_TESTING", "access": "VehiclePropertyAccess::READ_WRITE", "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, @@ -194,13 +194,13 @@ ] }, "configArray": [ - "Constants::kMixedTypePropertyForTest", + "TestVendorProperty::MIXED_TYPE_PROPERTY_FOR_TEST", "VehicleVendorPermission::PERMISSION_GET_VENDOR_CATEGORY_INFO", "VehicleVendorPermission::PERMISSION_SET_VENDOR_CATEGORY_INFO", - "Constants::VENDOR_EXTENSION_INT_PROPERTY", + "TestVendorProperty::VENDOR_EXTENSION_INT_PROPERTY", "VehicleVendorPermission::PERMISSION_GET_VENDOR_CATEGORY_SEAT", "VehicleVendorPermission::PERMISSION_NOT_ACCESSIBLE", - "Constants::VENDOR_EXTENSION_FLOAT_PROPERTY", + "TestVendorProperty::VENDOR_EXTENSION_FLOAT_PROPERTY", "VehicleVendorPermission::PERMISSION_DEFAULT", "VehicleVendorPermission::PERMISSION_DEFAULT" ] diff --git a/automotive/vehicle/aidl/impl/default_config/config/VendorClusterTestProperties.json b/automotive/vehicle/aidl/impl/default_config/config/VendorClusterTestProperties.json index 3a1a783b84..8c2bc93e1c 100644 --- a/automotive/vehicle/aidl/impl/default_config/config/VendorClusterTestProperties.json +++ b/automotive/vehicle/aidl/impl/default_config/config/VendorClusterTestProperties.json @@ -1,17 +1,17 @@ { "properties": [ { - "property": "Constants::VENDOR_CLUSTER_SWITCH_UI", + "property": "TestVendorProperty::VENDOR_CLUSTER_SWITCH_UI", "access": "VehiclePropertyAccess::WRITE", "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::VENDOR_CLUSTER_DISPLAY_STATE", + "property": "TestVendorProperty::VENDOR_CLUSTER_DISPLAY_STATE", "access": "VehiclePropertyAccess::WRITE", "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" }, { - "property": "Constants::VENDOR_CLUSTER_REPORT_STATE", + "property": "TestVendorProperty::VENDOR_CLUSTER_REPORT_STATE", "defaultValue": { "int32Values": [ 0, @@ -44,7 +44,7 @@ "Value means 0 /* Off */, -1, -1, -1, -1 /* Bounds */, -1, -1, -1, -1 /* Insets */, 0 /* ClusterHome */, -1 /* ClusterNone */" }, { - "property": "Constants::VENDOR_CLUSTER_REQUEST_DISPLAY", + "property": "TestVendorProperty::VENDOR_CLUSTER_REQUEST_DISPLAY", "defaultValue": { "int32Values": [ 0 @@ -55,7 +55,7 @@ "comment": "0 means ClusterHome" }, { - "property": "Constants::VENDOR_CLUSTER_NAVIGATION_STATE", + "property": "TestVendorProperty::VENDOR_CLUSTER_NAVIGATION_STATE", "access": "VehiclePropertyAccess::READ", "changeMode": "VehiclePropertyChangeMode::ON_CHANGE" } diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/Android.bp b/automotive/vehicle/aidl/impl/fake_impl/hardware/Android.bp index 4c17cded42..e75f6485b8 100644 --- a/automotive/vehicle/aidl/impl/fake_impl/hardware/Android.bp +++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/Android.bp @@ -21,7 +21,10 @@ package { cc_library { name: "FakeVehicleHardware", vendor: true, - srcs: ["src/*.cpp"], + srcs: [ + "src/*.cpp", + ":VhalTestVendorProperties", + ], local_include_dirs: ["include"], export_include_dirs: ["include"], cflags: ["-DENABLE_VEHICLE_HAL_TEST_PROPERTIES"], @@ -35,7 +38,7 @@ cc_defaults { name: "FakeVehicleHardwareDefaults", header_libs: [ "IVehicleHardware", - "VehicleHalTestUtilHeaders", + "libbinder_headers", ], export_header_lib_headers: ["IVehicleHardware"], static_libs: [ diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp index efd7f8e6a3..82c3ea072e 100644 --- a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp +++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include #include @@ -32,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -63,6 +63,7 @@ using ::aidl::android::hardware::automotive::vehicle::SetValueResult; using ::aidl::android::hardware::automotive::vehicle::StatusCode; using ::aidl::android::hardware::automotive::vehicle::VehicleApPowerStateReport; using ::aidl::android::hardware::automotive::vehicle::VehicleApPowerStateReq; +using ::aidl::android::hardware::automotive::vehicle::VehicleArea; using ::aidl::android::hardware::automotive::vehicle::VehicleHwKeyInputAction; using ::aidl::android::hardware::automotive::vehicle::VehiclePropConfig; using ::aidl::android::hardware::automotive::vehicle::VehicleProperty; @@ -87,14 +88,12 @@ using ::android::base::StringPrintf; // getPropertiesAsync, and setPropertiesAsync. // 0x21403000 constexpr int32_t STARTING_VENDOR_CODE_PROPERTIES_FOR_TEST = - 0x3000 | toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::INT32); + 0x3000 | toInt(VehiclePropertyGroup::VENDOR) | toInt(VehicleArea::GLOBAL) | + toInt(VehiclePropertyType::INT32); // 0x21405000 constexpr int32_t ENDING_VENDOR_CODE_PROPERTIES_FOR_TEST = - 0x5000 | toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::INT32); + 0x5000 | toInt(VehiclePropertyGroup::VENDOR) | toInt(VehicleArea::GLOBAL) | + toInt(VehiclePropertyType::INT32); // The directory for default property configuration file. // For config file format, see impl/default_config/config/README.md. constexpr char DEFAULT_CONFIG_DIR[] = "/vendor/etc/automotive/vhalconfig/"; @@ -105,7 +104,7 @@ constexpr char OVERRIDE_CONFIG_DIR[] = "/vendor/etc/automotive/vhaloverride/"; // overwrite the default configs. constexpr char OVERRIDE_PROPERTY[] = "persist.vendor.vhal_init_value_override"; constexpr char POWER_STATE_REQ_CONFIG_PROPERTY[] = "ro.vendor.fake_vhal.ap_power_state_req.config"; -// The value to be returned if VENDOR_PROPERTY_ID is set as the property +// The value to be returned if VENDOR_PROPERTY_FOR_ERROR_CODE_TESTING is set as the property constexpr int VENDOR_ERROR_CODE = 0x00ab0005; // A list of supported options for "--set" command. const std::unordered_set SET_PROP_OPTIONS = { @@ -668,10 +667,10 @@ FakeVehicleHardware::ValueResultType FakeVehicleHardware::maybeGetSpecialValue( result.value()->timestamp = elapsedRealtimeNano(); } return result; - case ECHO_REVERSE_BYTES: + case toInt(TestVendorProperty::ECHO_REVERSE_BYTES): *isSpecialValue = true; return getEchoReverseBytes(value); - case VENDOR_PROPERTY_ID: + case toInt(TestVendorProperty::VENDOR_PROPERTY_FOR_ERROR_CODE_TESTING): *isSpecialValue = true; return StatusError((StatusCode)VENDOR_ERROR_CODE); case toInt(VehicleProperty::CRUISE_CONTROL_TARGET_SPEED): @@ -835,7 +834,7 @@ VhalResult FakeVehicleHardware::maybeSetSpecialValue(const VehiclePropValu case OBD2_FREEZE_FRAME_CLEAR: *isSpecialValue = true; return mFakeObd2Frame->clearObd2FreezeFrames(value); - case VENDOR_PROPERTY_ID: + case toInt(TestVendorProperty::VENDOR_PROPERTY_FOR_ERROR_CODE_TESTING): *isSpecialValue = true; return StatusError((StatusCode)VENDOR_ERROR_CODE); case toInt(VehicleProperty::HVAC_TEMPERATURE_VALUE_SUGGESTION): @@ -900,9 +899,9 @@ VhalResult FakeVehicleHardware::maybeSetSpecialValue(const VehiclePropValu [[fallthrough]]; case toInt(VehicleProperty::CLUSTER_NAVIGATION_STATE): [[fallthrough]]; - case VENDOR_CLUSTER_SWITCH_UI: + case toInt(TestVendorProperty::VENDOR_CLUSTER_SWITCH_UI): [[fallthrough]]; - case VENDOR_CLUSTER_DISPLAY_STATE: + case toInt(TestVendorProperty::VENDOR_CLUSTER_DISPLAY_STATE): *isSpecialValue = true; updatedValue = mValuePool->obtain(getPropType(value.prop)); updatedValue->prop = value.prop & ~toInt(VehiclePropertyGroup::MASK); diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/Android.bp b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/Android.bp index 8d8fcf5908..b763d2f55d 100644 --- a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/Android.bp +++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/Android.bp @@ -21,11 +21,14 @@ package { cc_test { name: "FakeVehicleHardwareTest", vendor: true, - srcs: ["*.cpp"], + srcs: [ + "*.cpp", + ":VhalTestVendorProperties", + ], cflags: ["-DENABLE_VEHICLE_HAL_TEST_PROPERTIES"], header_libs: [ "IVehicleHardware", - "VehicleHalTestUtilHeaders", + "libbinder_headers", ], static_libs: [ "VehicleHalJsonConfigLoaderEnableTestProperties", @@ -47,7 +50,9 @@ cc_test { ":FakeVehicleHardwareTestOverrideJson", ":FakeVehicleHardwareTestPropJson", ], - defaults: ["VehicleHalDefaults"], + defaults: [ + "VehicleHalDefaults", + ], test_suites: ["device-tests"], } diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp index a77d565d6e..6cc06bc3ac 100644 --- a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp +++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp @@ -19,9 +19,9 @@ #include #include #include -#include #include +#include #include #include @@ -429,13 +429,13 @@ TEST_F(FakeVehicleHardwareTest, testGetDefaultValues) { continue; } - if (propId == ECHO_REVERSE_BYTES) { + if (propId == toInt(TestVendorProperty::ECHO_REVERSE_BYTES)) { // Ignore ECHO_REVERSE_BYTES, it has special logic. continue; } - if (propId == VENDOR_PROPERTY_ID) { - // Ignore VENDOR_PROPERTY_ID, it has special logic. + if (propId == toInt(TestVendorProperty::VENDOR_PROPERTY_FOR_ERROR_CODE_TESTING)) { + // Ignore VENDOR_PROPERTY_FOR_ERROR_CODE_TESTING, it has special logic. continue; } @@ -968,7 +968,8 @@ std::vector setSpecialValueTestCases() { .expectedValuesToGet = { VehiclePropValue{ - .prop = VENDOR_CLUSTER_REPORT_STATE, + .prop = toInt(TestVendorProperty:: + VENDOR_CLUSTER_REPORT_STATE), .value.int32Values = {1}, }, }, @@ -985,7 +986,8 @@ std::vector setSpecialValueTestCases() { .expectedValuesToGet = { VehiclePropValue{ - .prop = VENDOR_CLUSTER_REQUEST_DISPLAY, + .prop = toInt(TestVendorProperty:: + VENDOR_CLUSTER_REQUEST_DISPLAY), .value.int32Values = {1}, }, }, @@ -1003,7 +1005,8 @@ std::vector setSpecialValueTestCases() { .expectedValuesToGet = { VehiclePropValue{ - .prop = VENDOR_CLUSTER_NAVIGATION_STATE, + .prop = toInt(TestVendorProperty:: + VENDOR_CLUSTER_NAVIGATION_STATE), .value.byteValues = {0x1}, }, }, @@ -1013,7 +1016,8 @@ std::vector setSpecialValueTestCases() { .valuesToSet = { VehiclePropValue{ - .prop = VENDOR_CLUSTER_SWITCH_UI, + .prop = toInt( + TestVendorProperty::VENDOR_CLUSTER_SWITCH_UI), .value.int32Values = {1}, }, }, @@ -1030,7 +1034,8 @@ std::vector setSpecialValueTestCases() { .valuesToSet = { VehiclePropValue{ - .prop = VENDOR_CLUSTER_DISPLAY_STATE, + .prop = toInt(TestVendorProperty:: + VENDOR_CLUSTER_DISPLAY_STATE), .value.int32Values = {1, 2}, }, }, @@ -2928,7 +2933,7 @@ TEST_F(FakeVehicleHardwareTest, testDebugGenFakeDataMotionInput) { TEST_F(FakeVehicleHardwareTest, testGetEchoReverseBytes) { ASSERT_EQ(setValue(VehiclePropValue{ - .prop = ECHO_REVERSE_BYTES, + .prop = toInt(TestVendorProperty::ECHO_REVERSE_BYTES), .value = { .byteValues = {0x01, 0x02, 0x03, 0x04}, @@ -2937,7 +2942,7 @@ TEST_F(FakeVehicleHardwareTest, testGetEchoReverseBytes) { StatusCode::OK); auto result = getValue(VehiclePropValue{ - .prop = ECHO_REVERSE_BYTES, + .prop = toInt(TestVendorProperty::ECHO_REVERSE_BYTES), }); ASSERT_TRUE(result.ok()) << "failed to get ECHO_REVERSE_BYTES value: " << getStatus(result); diff --git a/automotive/vehicle/aidl/impl/utils/README.md b/automotive/vehicle/aidl/impl/utils/README.md index 87bb7e3034..255131ddc1 100644 --- a/automotive/vehicle/aidl/impl/utils/README.md +++ b/automotive/vehicle/aidl/impl/utils/README.md @@ -57,6 +57,6 @@ delete and lookup. Defines many useful utility functions. -## test +## test_vendor_properties -Defines utility libraries for test only. +Contains vendor properties used for testing purpose in reference VHAL. diff --git a/automotive/vehicle/aidl/impl/utils/common/include/PropertyUtils.h b/automotive/vehicle/aidl/impl/utils/common/include/PropertyUtils.h index 7275ba30f9..e41ec3074c 100644 --- a/automotive/vehicle/aidl/impl/utils/common/include/PropertyUtils.h +++ b/automotive/vehicle/aidl/impl/utils/common/include/PropertyUtils.h @@ -77,22 +77,6 @@ constexpr int SEAT_1_RIGHT = toInt(propertyutils_impl::VehicleAreaSeat::ROW_1_RI constexpr int SEAT_2_LEFT = toInt(propertyutils_impl::VehicleAreaSeat::ROW_2_LEFT); constexpr int SEAT_2_RIGHT = toInt(propertyutils_impl::VehicleAreaSeat::ROW_2_RIGHT); constexpr int SEAT_2_CENTER = toInt(propertyutils_impl::VehicleAreaSeat::ROW_2_CENTER); -constexpr int VENDOR_EXTENSION_BOOLEAN_PROPERTY = - 0x101 | toInt(propertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(propertyutils_impl::VehiclePropertyType::BOOLEAN) | - toInt(propertyutils_impl::VehicleArea::DOOR); -constexpr int VENDOR_EXTENSION_FLOAT_PROPERTY = - 0x102 | toInt(propertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(propertyutils_impl::VehiclePropertyType::FLOAT) | - toInt(propertyutils_impl::VehicleArea::SEAT); -constexpr int VENDOR_EXTENSION_INT_PROPERTY = - 0x103 | toInt(propertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(propertyutils_impl::VehiclePropertyType::INT32) | - toInt(propertyutils_impl::VehicleArea::WINDOW); -constexpr int VENDOR_EXTENSION_STRING_PROPERTY = - 0x104 | toInt(propertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(propertyutils_impl::VehiclePropertyType::STRING) | - toInt(propertyutils_impl::VehicleArea::GLOBAL); constexpr int FUEL_DOOR_REAR_LEFT = toInt(propertyutils_impl::PortLocationType::REAR_LEFT); constexpr int CHARGE_PORT_FRONT_LEFT = toInt(propertyutils_impl::PortLocationType::FRONT_LEFT); constexpr int CHARGE_PORT_REAR_LEFT = toInt(propertyutils_impl::PortLocationType::REAR_LEFT); diff --git a/automotive/vehicle/aidl/impl/utils/common/test/Android.bp b/automotive/vehicle/aidl/impl/utils/common/test/Android.bp index 250b33135b..dd43712558 100644 --- a/automotive/vehicle/aidl/impl/utils/common/test/Android.bp +++ b/automotive/vehicle/aidl/impl/utils/common/test/Android.bp @@ -27,7 +27,6 @@ cc_test { "libgtest", "libgmock", ], - header_libs: ["VehicleHalTestUtilHeaders"], defaults: ["VehicleHalDefaults"], test_suites: ["device-tests"], } diff --git a/automotive/vehicle/aidl/impl/utils/common/test/VehicleUtilsTest.cpp b/automotive/vehicle/aidl/impl/utils/common/test/VehicleUtilsTest.cpp index 411539b38f..9abb2a2fe6 100644 --- a/automotive/vehicle/aidl/impl/utils/common/test/VehicleUtilsTest.cpp +++ b/automotive/vehicle/aidl/impl/utils/common/test/VehicleUtilsTest.cpp @@ -16,7 +16,6 @@ #include #include -#include #include #include @@ -56,6 +55,9 @@ constexpr int32_t int64Prop = toInt(VehicleProperty::ANDROID_EPOCH_TIME); constexpr int32_t int64VecProp = toInt(VehicleProperty::WHEEL_TICK); constexpr int32_t floatProp = toInt(VehicleProperty::ENV_OUTSIDE_TEMPERATURE); constexpr int32_t floatVecProp = toInt(VehicleProperty::HVAC_TEMPERATURE_VALUE_SUGGESTION); +constexpr int32_t kMixedTypePropertyForTest = 0x1111 | toInt(VehiclePropertyGroup::VENDOR) | + toInt(VehicleArea::GLOBAL) | + toInt(VehiclePropertyType::MIXED); std::vector getInvalidPropValuesTestCases() { return std::vector( diff --git a/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h b/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h deleted file mode 100644 index 14002884f5..0000000000 --- a/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2021 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_automotive_vehicle_utils_test_include_TestPropertyUtils_H_ -#define android_hardware_automotive_vehicle_utils_test_include_TestPropertyUtils_H_ - -#include -#include - -namespace android { -namespace hardware { -namespace automotive { -namespace vehicle { - -namespace testpropertyutils_impl { - -// These names are not part of the API since we only expose ints. -using ::aidl::android::hardware::automotive::vehicle::VehicleArea; -using ::aidl::android::hardware::automotive::vehicle::VehicleProperty; -using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyGroup; -using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyType; - -} // namespace testpropertyutils_impl - -// Converts the system property to the vendor property. -// WARNING: This is only for the end-to-end testing, Should NOT include in the user build. -inline constexpr int32_t toVendor( - const aidl::android::hardware::automotive::vehicle::VehicleProperty& prop) { - return (toInt(prop) & ~toInt(testpropertyutils_impl::VehiclePropertyGroup::MASK)) | - toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR); -} - -// These properties are used for the end-to-end testing of ClusterHomeService. -constexpr int32_t VENDOR_CLUSTER_SWITCH_UI = - toVendor(testpropertyutils_impl::VehicleProperty::CLUSTER_SWITCH_UI); -constexpr int32_t VENDOR_CLUSTER_DISPLAY_STATE = - toVendor(testpropertyutils_impl::VehicleProperty::CLUSTER_DISPLAY_STATE); -constexpr int32_t VENDOR_CLUSTER_REPORT_STATE = - toVendor(testpropertyutils_impl::VehicleProperty::CLUSTER_REPORT_STATE); -constexpr int32_t VENDOR_CLUSTER_REQUEST_DISPLAY = - toVendor(testpropertyutils_impl::VehicleProperty::CLUSTER_REQUEST_DISPLAY); -constexpr int32_t VENDOR_CLUSTER_NAVIGATION_STATE = - toVendor(testpropertyutils_impl::VehicleProperty::CLUSTER_NAVIGATION_STATE); - -// These properties are placeholder properties for developers to test new features without -// implementing a real property. -constexpr int32_t PLACEHOLDER_PROPERTY_INT = - 0x2a11 | toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::INT32); -constexpr int32_t PLACEHOLDER_PROPERTY_FLOAT = - 0x2a11 | toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::FLOAT); -constexpr int32_t PLACEHOLDER_PROPERTY_BOOLEAN = - 0x2a11 | toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::BOOLEAN); -constexpr int32_t PLACEHOLDER_PROPERTY_STRING = - 0x2a11 | toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::STRING); - -// This property is used for testing LargeParcelable marshalling/unmarhsalling end to end. -// It acts as an regular property that stores the property value when setting and return the value -// when getting, except that all the byteValues used in the setValue response would be filled in -// the reverse order. -// 0x21702a12 -constexpr int32_t ECHO_REVERSE_BYTES = 0x2a12 | - toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::BYTES); - -// This property is used for testing vendor error codes end to end. -// 0x21402a13 -constexpr int32_t VENDOR_PROPERTY_ID = 0x2a13 | - toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::INT32); - -// This property is used for test purpose. End to end tests use this property to test set and get -// method for MIXED type properties. -constexpr int32_t kMixedTypePropertyForTest = - 0x1111 | toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) | - toInt(testpropertyutils_impl::VehicleArea::GLOBAL) | - toInt(testpropertyutils_impl::VehiclePropertyType::MIXED); -} // namespace vehicle -} // namespace automotive -} // namespace hardware -} // namespace android - -#endif // android_hardware_automotive_vehicle_utils_test_include_TestPropertyUtils_H_ diff --git a/automotive/vehicle/aidl/impl/utils/test/Android.bp b/automotive/vehicle/aidl/impl/utils/test_vendor_properties/Android.bp similarity index 68% rename from automotive/vehicle/aidl/impl/utils/test/Android.bp rename to automotive/vehicle/aidl/impl/utils/test_vendor_properties/Android.bp index ad9954fbf2..62c89acff8 100644 --- a/automotive/vehicle/aidl/impl/utils/test/Android.bp +++ b/automotive/vehicle/aidl/impl/utils/test_vendor_properties/Android.bp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2023 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. @@ -18,9 +18,13 @@ package { default_applicable_licenses: ["Android-Apache-2.0"], } -cc_library_headers { - name: "VehicleHalTestUtilHeaders", - vendor: true, - header_libs: ["VehicleHalUtilHeaders"], - export_include_dirs: ["include"], +filegroup { + name: "VhalTestVendorProperties", + srcs: [ + "**/*.aidl", + ], + visibility: [ + "//hardware/interfaces/automotive/vehicle/aidl:__subpackages__", + "//packages/services/Car:__subpackages__", + ], } diff --git a/automotive/vehicle/aidl/impl/utils/test_vendor_properties/android/hardware/automotive/vehicle/TestVendorProperty.aidl b/automotive/vehicle/aidl/impl/utils/test_vendor_properties/android/hardware/automotive/vehicle/TestVendorProperty.aidl new file mode 100644 index 0000000000..3c877fa1ce --- /dev/null +++ b/automotive/vehicle/aidl/impl/utils/test_vendor_properties/android/hardware/automotive/vehicle/TestVendorProperty.aidl @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2023 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.automotive.vehicle; + +/** + * Test vendor properties used in reference VHAL implementation. + */ +@Backing(type="int") +enum TestVendorProperty { + + /** + * Vendor version of CLUSTER_SWITCH_UI, used for the end-to-end testing of ClusterHomeService. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.INT32, + */ + VENDOR_CLUSTER_SWITCH_UI = 0x0F34 + 0x20000000 + 0x01000000 + 0x00400000, + + /** + * Vendor version of CLUSTER_DISPLAY_STATE, used for the end-to-end testing of + * ClusterHomeService. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.INT32_VEC + */ + VENDOR_CLUSTER_DISPLAY_STATE = 0x0F35 + 0x20000000 + 0x01000000 + 0x00410000, + + /** + * Vendor version of CLUSTER_REPORT_STATE, used for the end-to-end testing of + * ClusterHomeService. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyGroup.MIXED + */ + VENDOR_CLUSTER_REPORT_STATE = 0x0F36 + 0x20000000 + 0x01000000 + 0x00E00000, + + /** + * Vendor version of CLUSTER_REQUEST_DISPLAY, used for the end-to-end testing of + * ClusterHomeService. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.INT32 + */ + VENDOR_CLUSTER_REQUEST_DISPLAY = 0x0F37 + 0x20000000 + 0x01000000 + 0x00400000, + + /** + * Vendor version of CLUSTER_NAVIGATION_STATE, used for the end-to-end testing of + * ClusterHomeService. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.BYTES + */ + VENDOR_CLUSTER_NAVIGATION_STATE = 0x0F38 + 0x20000000 + 0x01000000 + 0x00700000, + + // These properties are placeholder properties for developers to test new features without + // implementing a real property. + + /** + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.INT32 + */ + PLACEHOLDER_PROPERTY_INT = 0x2A11 + 0x20000000 + 0x01000000 + 0x00400000, + + /** + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.FLOAT + */ + PLACEHOLDER_PROPERTY_FLOAT = 0x2A11 + 0x20000000 + 0x01000000 + 0x00600000, + + /** + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.BOOLEAN + */ + PLACEHOLDER_PROPERTY_BOOLEAN = 0x2A11 + 0x20000000 + 0x01000000 + 0x00200000, + + /** + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.STRING + */ + PLACEHOLDER_PROPERTY_STRING = 0x2A11 + 0x20000000 + 0x01000000 + 0x00100000, + + /** + * This property is used for testing LargeParcelable marshalling/unmarhsalling end to end. + * It acts as an regular property that stores the property value when setting and return the + * value when getting, except that all the byteValues used in the setValue response would be + * filled in the reverse order. + * + * This is used in {@code VehicleHalLargeParcelableTest}. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.BYTES + * + * 0x21702a12 + */ + ECHO_REVERSE_BYTES = 0x2A12 + 0x20000000 + 0x01000000 + 0x00700000, + + /** + * This property is used for testing vendor error codes end to end. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyType.INT32 + * + * 0x21402a13 + */ + VENDOR_PROPERTY_FOR_ERROR_CODE_TESTING = 0x2A13 + 0x20000000 + 0x01000000 + 0x00400000, + + /** + * This property is used for test purpose. End to end tests use this property to test set and + * get method for MIXED type properties. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyGroup.MIXED + */ + MIXED_TYPE_PROPERTY_FOR_TEST = 0x1111 + 0x20000000 + 0x01000000 + 0x00E00000, + + /** + * Property used for {@code CarVendorPropertyCustomPermissionTest}. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.DOOR | VehiclePropertyGroup.BOOLEAN + */ + VENDOR_EXTENSION_BOOLEAN_PROPERTY = 0x0101 + 0x20000000 + 0x06000000 + 0x00200000, + + /** + * Property used for {@code CarVendorPropertyCustomPermissionTest}. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.SEAT | VehiclePropertyGroup.FLOAT + */ + VENDOR_EXTENSION_FLOAT_PROPERTY = 0x102 + 0x20000000 + 0x05000000 + 0x00600000, + + /** + * Property used for {@code CarVendorPropertyCustomPermissionTest}. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.WINDOW | VehiclePropertyGroup.INT32 + */ + VENDOR_EXTENSION_INT_PROPERTY = 0x103 + 0x20000000 + 0x03000000 + 0x00400000, + + /** + * Property used for {@code CarVendorPropertyCustomPermissionTest}. + * + * VehiclePropertyGroup.VENDOR | VehicleArea.GLOBAL | VehiclePropertyGroup.STRING + */ + VENDOR_EXTENSION_STRING_PROPERTY = 0x103 + 0x20000000 + 0x01000000 + 0x00100000, +}