Merge "Add default config for new VHAL properties in Android T." into tm-dev
diff --git a/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp b/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp
index c709d40..7fcac38 100644
--- a/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp
+++ b/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp
@@ -430,8 +430,8 @@
mActiveCameras.push_back(pCam);
// Set up a frame receiver object which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -529,8 +529,8 @@
ASSERT_TRUE(pCam->setMaxFramesInFlight(kBuffersToHold).isOk());
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -619,8 +619,8 @@
mActiveCameras.push_back(pCam);
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, pDisplay, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, pDisplay, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Activate the display
@@ -697,10 +697,10 @@
mActiveCameras.push_back(pCam1);
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler0 =
- std::make_shared<FrameHandler>(pCam0, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandler1 =
- std::make_shared<FrameHandler>(pCam1, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler0 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam0, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler1 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam1, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler0, nullptr);
EXPECT_NE(frameHandler1, nullptr);
@@ -803,8 +803,8 @@
}
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -903,10 +903,11 @@
mActiveCameras.push_back(pSecondaryCam);
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandlerPrimary = std::make_shared<FrameHandler>(
+ std::shared_ptr<FrameHandler> frameHandlerPrimary = ndk::SharedRefBase::make<FrameHandler>(
pPrimaryCam, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandlerSecondary = std::make_shared<FrameHandler>(
- pSecondaryCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandlerSecondary =
+ ndk::SharedRefBase::make<FrameHandler>(pSecondaryCam, cam, nullptr,
+ FrameHandler::eAutoReturn);
EXPECT_NE(frameHandlerPrimary, nullptr);
EXPECT_NE(frameHandlerSecondary, nullptr);
@@ -1075,10 +1076,11 @@
}
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandlerPrimary = std::make_shared<FrameHandler>(
+ std::shared_ptr<FrameHandler> frameHandlerPrimary = ndk::SharedRefBase::make<FrameHandler>(
pPrimaryCam, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandlerSecondary = std::make_shared<FrameHandler>(
- pSecondaryCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandlerSecondary =
+ ndk::SharedRefBase::make<FrameHandler>(pSecondaryCam, cam, nullptr,
+ FrameHandler::eAutoReturn);
EXPECT_NE(frameHandlerPrimary, nullptr);
EXPECT_NE(frameHandlerSecondary, nullptr);
@@ -1418,10 +1420,10 @@
}
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler0 =
- std::make_shared<FrameHandler>(pCam0, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandler1 =
- std::make_shared<FrameHandler>(pCam1, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler0 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam0, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler1 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam1, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler0, nullptr);
EXPECT_NE(frameHandler1, nullptr);
@@ -1733,8 +1735,8 @@
mActiveCameras.push_back(pCam);
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, pDisplay, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, pDisplay, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Activate the display
@@ -1843,10 +1845,10 @@
EXPECT_NE(pCam1, nullptr);
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler0 =
- std::make_shared<FrameHandler>(pCam0, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandler1 =
- std::make_shared<FrameHandler>(pCam1, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler0 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam0, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler1 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam1, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler0, nullptr);
EXPECT_NE(frameHandler1, nullptr);
@@ -2008,8 +2010,8 @@
EXPECT_GE(delta, kBuffersToHold);
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -2101,7 +2103,7 @@
EXPECT_NE(pUltrasonicsArray, nullptr);
std::shared_ptr<FrameHandlerUltrasonics> frameHandler =
- std::make_shared<FrameHandlerUltrasonics>(pUltrasonicsArray);
+ ndk::SharedRefBase::make<FrameHandlerUltrasonics>(pUltrasonicsArray);
EXPECT_NE(frameHandler, nullptr);
// Start stream.
@@ -2141,7 +2143,7 @@
ASSERT_TRUE(pUltrasonicsArray->setMaxFramesInFlight(10).isOk());
std::shared_ptr<FrameHandlerUltrasonics> frameHandler =
- std::make_shared<FrameHandlerUltrasonics>(pUltrasonicsArray);
+ ndk::SharedRefBase::make<FrameHandlerUltrasonics>(pUltrasonicsArray);
EXPECT_NE(frameHandler, nullptr);
// Start stream.
diff --git a/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h b/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h
index f31ead3..fda0da9 100644
--- a/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h
+++ b/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h
@@ -1221,6 +1221,14 @@
},
.initialValue = {.stringValue = {"Test"}},
},
+ {
+ .config =
+ {
+ .prop = ECHO_REVERSE_BYTES,
+ .access = VehiclePropertyAccess::READ_WRITE,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ },
#ifdef ENABLE_VENDOR_CLUSTER_PROPERTY_FOR_TESTING
// Vendor propetry for E2E ClusterHomeService testing.
{
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h b/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
index 1c076d3..e799a28 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
@@ -131,6 +131,8 @@
const aidl::android::hardware::automotive::vehicle::VehiclePropValue& value);
ValueResultType getUserHalProp(
const aidl::android::hardware::automotive::vehicle::VehiclePropValue& value) const;
+ ValueResultType getEchoReverseBytes(
+ const aidl::android::hardware::automotive::vehicle::VehiclePropValue& value) const;
bool isHvacPropAndHvacNotAvailable(int32_t propId);
std::string dumpAllProperties();
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 462506d..f8b64f2 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
@@ -23,6 +23,7 @@
#include <FakeObd2Frame.h>
#include <JsonFakeValueGenerator.h>
#include <PropertyUtils.h>
+#include <TestPropertyUtils.h>
#include <VehicleHalTypes.h>
#include <VehicleUtils.h>
#include <android-base/parsedouble.h>
@@ -335,6 +336,9 @@
result.value()->timestamp = elapsedRealtimeNano();
}
return result;
+ case ECHO_REVERSE_BYTES:
+ *isSpecialValue = true;
+ return getEchoReverseBytes(value);
default:
// Do nothing.
break;
@@ -343,6 +347,22 @@
return nullptr;
}
+FakeVehicleHardware::ValueResultType FakeVehicleHardware::getEchoReverseBytes(
+ const VehiclePropValue& value) const {
+ auto readResult = mServerSidePropStore->readValue(value);
+ if (!readResult.ok()) {
+ return readResult;
+ }
+ auto& gotValue = readResult.value();
+ gotValue->timestamp = elapsedRealtimeNano();
+ std::vector<uint8_t> byteValues = gotValue->value.byteValues;
+ size_t byteSize = byteValues.size();
+ for (size_t i = 0; i < byteSize; i++) {
+ gotValue->value.byteValues[i] = byteValues[byteSize - 1 - i];
+ }
+ return std::move(gotValue);
+}
+
VhalResult<void> FakeVehicleHardware::maybeSetSpecialValue(const VehiclePropValue& value,
bool* isSpecialValue) {
*isSpecialValue = false;
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 6259f96..7a7fb37 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
@@ -276,6 +276,11 @@
continue;
}
+ if (config.config.prop == ECHO_REVERSE_BYTES) {
+ // Ignore ECHO_REVERSE_BYTES, it has special logic.
+ continue;
+ }
+
int propId = config.config.prop;
if (isGlobalProp(propId)) {
if (config.initialValue == RawPropValues{}) {
@@ -1487,6 +1492,24 @@
ASSERT_EQ(3.402823466E+38f, value.value.floatValues[2]);
}
+TEST_F(FakeVehicleHardwareTest, testGetEchoReverseBytes) {
+ ASSERT_EQ(setValue(VehiclePropValue{
+ .prop = ECHO_REVERSE_BYTES,
+ .value =
+ {
+ .byteValues = {0x01, 0x02, 0x03, 0x04},
+ },
+ }),
+ StatusCode::OK);
+
+ auto result = getValue(VehiclePropValue{
+ .prop = ECHO_REVERSE_BYTES,
+ });
+
+ ASSERT_TRUE(result.ok()) << "failed to get ECHO_REVERSE_BYTES value: " << getStatus(result);
+ ASSERT_EQ(result.value().value.byteValues, std::vector<uint8_t>({0x04, 0x03, 0x02, 0x01}));
+}
+
} // namespace fake
} // namespace vehicle
} // namespace automotive
diff --git a/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h b/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h
index 4213501..d512713 100644
--- a/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h
+++ b/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h
@@ -76,6 +76,16 @@
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 test purpose. End to end tests use this property to test set and get
// method for MIXED type properties.
constexpr int32_t kMixedTypePropertyForTest =