Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2fd9496e authored by Yu Shan's avatar Yu Shan
Browse files

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
parent 3a129d7a
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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"],
+33 −21
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@
#include <PropertyUtils.h>

#ifdef ENABLE_VEHICLE_HAL_TEST_PROPERTIES
#include <TestPropertyUtils.h>
#include <android/hardware/automotive/vehicle/TestVendorProperty.h>
#endif  // ENABLE_VEHICLE_HAL_TEST_PROPERTIES

#include <android-base/strings.h>
@@ -91,10 +91,6 @@ const std::unordered_map<std::string, int> 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<std::string, int> 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 T>
class ConstantParser final : public ConstantParserInterface {
  public:
@@ -181,6 +162,33 @@ class ConstantParser final : public ConstantParserInterface {
    std::unordered_map<std::string, int> 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 T>
class CppConstantParser final : public ConstantParserInterface {
  public:
    CppConstantParser() {
        for (const T& v : android::enum_range<T>()) {
            std::string name = android::hardware::automotive::vehicle::toString(v);
            mValueByName[name] = toInt(v);
        }
    }

    ~CppConstantParser() = default;

    Result<int> 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<std::string, int> 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<ConstantParser<LaneCenteringAssistState>>();
    mConstantParsersByType["Constants"] = std::make_unique<LocalVariableParser>();
#ifdef ENABLE_VEHICLE_HAL_TEST_PROPERTIES
    mConstantParsersByType["TestVendorProperty"] =
            std::make_unique<CppConstantParser<TestVendorProperty>>();
#endif  // ENABLE_VEHICLE_HAL_TEST_PROPERTIES
}

template <>
+14 −14
Original line number Diff line number Diff line
{
    "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"
            ]
+5 −5
Original line number Diff line number Diff line
{
    "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"
        }
+5 −2
Original line number Diff line number Diff line
@@ -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: [
Loading