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
This commit is contained in:
Yu Shan 2023-08-21 19:46:23 -07:00
parent 3a129d7a3b
commit 2fd9496ecd
15 changed files with 258 additions and 202 deletions

View file

@ -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"],

View file

@ -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 <>

View file

@ -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"
]

View file

@ -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"
}

View file

@ -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: [

View file

@ -24,7 +24,6 @@
#include <JsonFakeValueGenerator.h>
#include <LinearFakeValueGenerator.h>
#include <PropertyUtils.h>
#include <TestPropertyUtils.h>
#include <VehicleHalTypes.h>
#include <VehicleUtils.h>
@ -32,6 +31,7 @@
#include <android-base/parsedouble.h>
#include <android-base/properties.h>
#include <android-base/strings.h>
#include <android/hardware/automotive/vehicle/TestVendorProperty.h>
#include <utils/Log.h>
#include <utils/SystemClock.h>
#include <utils/Trace.h>
@ -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<std::string> 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<void> 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<void> 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);

View file

@ -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"],
}

View file

@ -19,9 +19,9 @@
#include <FakeObd2Frame.h>
#include <FakeUserHal.h>
#include <PropertyUtils.h>
#include <TestPropertyUtils.h>
#include <aidl/android/hardware/automotive/vehicle/VehicleApPowerStateShutdownParam.h>
#include <android/hardware/automotive/vehicle/TestVendorProperty.h>
#include <android-base/expected.h>
#include <android-base/file.h>
@ -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<SetSpecialValueTestCase> setSpecialValueTestCases() {
.expectedValuesToGet =
{
VehiclePropValue{
.prop = VENDOR_CLUSTER_REPORT_STATE,
.prop = toInt(TestVendorProperty::
VENDOR_CLUSTER_REPORT_STATE),
.value.int32Values = {1},
},
},
@ -985,7 +986,8 @@ std::vector<SetSpecialValueTestCase> setSpecialValueTestCases() {
.expectedValuesToGet =
{
VehiclePropValue{
.prop = VENDOR_CLUSTER_REQUEST_DISPLAY,
.prop = toInt(TestVendorProperty::
VENDOR_CLUSTER_REQUEST_DISPLAY),
.value.int32Values = {1},
},
},
@ -1003,7 +1005,8 @@ std::vector<SetSpecialValueTestCase> setSpecialValueTestCases() {
.expectedValuesToGet =
{
VehiclePropValue{
.prop = VENDOR_CLUSTER_NAVIGATION_STATE,
.prop = toInt(TestVendorProperty::
VENDOR_CLUSTER_NAVIGATION_STATE),
.value.byteValues = {0x1},
},
},
@ -1013,7 +1016,8 @@ std::vector<SetSpecialValueTestCase> setSpecialValueTestCases() {
.valuesToSet =
{
VehiclePropValue{
.prop = VENDOR_CLUSTER_SWITCH_UI,
.prop = toInt(
TestVendorProperty::VENDOR_CLUSTER_SWITCH_UI),
.value.int32Values = {1},
},
},
@ -1030,7 +1034,8 @@ std::vector<SetSpecialValueTestCase> 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);

View file

@ -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.

View file

@ -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);

View file

@ -27,7 +27,6 @@ cc_test {
"libgtest",
"libgmock",
],
header_libs: ["VehicleHalTestUtilHeaders"],
defaults: ["VehicleHalDefaults"],
test_suites: ["device-tests"],
}

View file

@ -16,7 +16,6 @@
#include <ConcurrentQueue.h>
#include <PropertyUtils.h>
#include <TestPropertyUtils.h>
#include <VehicleUtils.h>
#include <gtest/gtest.h>
@ -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<InvalidPropValueTestCase> getInvalidPropValuesTestCases() {
return std::vector<InvalidPropValueTestCase>(

View file

@ -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 <VehicleHalTypes.h>
#include <VehicleUtils.h>
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_

View file

@ -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__",
],
}

View file

@ -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,
}