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 ad14a9b3f8..5916307a53 100644 --- a/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h +++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h @@ -49,11 +49,6 @@ namespace fake { class FakeVehicleHardware : public IVehicleHardware { public: - // Supports Suspend_to_ram. - static constexpr int32_t SUPPORT_S2R = 0x1; - // Supports Suspend_to_disk. - static constexpr int32_t SUPPORT_S2D = 0x4; - using ValueResultType = VhalResult; FakeVehicleHardware(); @@ -61,6 +56,13 @@ class FakeVehicleHardware : public IVehicleHardware { FakeVehicleHardware(std::string defaultConfigDir, std::string overrideConfigDir, bool forceOverride); + // s2rS2dConfig is the config for whether S2R or S2D is supported, must be a bit flag combining + // values from VehicleApPowerStateConfigFlag. + // The default implementation is reading this from system property: + // "ro.vendor.fake_vhal.ap_power_state_req.config". + FakeVehicleHardware(std::string defaultConfigDir, std::string overrideConfigDir, + bool forceOverride, int32_t s2rS2dConfig); + ~FakeVehicleHardware(); // Get all the property configs. @@ -122,12 +124,6 @@ class FakeVehicleHardware : public IVehicleHardware { bool UseOverrideConfigDir(); - // Gets the config whether S2R or S2D is supported, must returns a bit flag made up of - // SUPPORT_S2R and SUPPORT_S2D, for example, 0x0 means no support, 0x5 means support both. - // The default implementation is reading this from system property: - // "ro.vendor.fake_vhal.ap_power_state_req.config". - int32_t getS2rS2dConfig(); - private: // Expose private methods to unit test. friend class FakeVehicleHardwareTestHelper; @@ -204,7 +200,7 @@ class FakeVehicleHardware : public IVehicleHardware { // provides power controlling related properties. std::string mPowerControllerServiceAddress = ""; - void init(); + void init(int32_t s2rS2dConfig); // Stores the initial value to property store. void storePropInitialValue(const ConfigDeclaration& config); // The callback that would be called when a vehicle property value change happens. 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 855d85f5a6..6668d16833 100644 --- a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp +++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp @@ -348,6 +348,13 @@ FakeVehicleHardware::FakeVehicleHardware() FakeVehicleHardware::FakeVehicleHardware(std::string defaultConfigDir, std::string overrideConfigDir, bool forceOverride) + : FakeVehicleHardware(defaultConfigDir, overrideConfigDir, forceOverride, + /*s2rS2dConfig=*/ + GetIntProperty(POWER_STATE_REQ_CONFIG_PROPERTY, /*default_value=*/0)) {} + +FakeVehicleHardware::FakeVehicleHardware(std::string defaultConfigDir, + std::string overrideConfigDir, bool forceOverride, + int32_t s2rS2dConfig) : mValuePool(std::make_unique()), mServerSidePropStore(new VehiclePropertyStore(mValuePool)), mDefaultConfigDir(defaultConfigDir), @@ -360,7 +367,7 @@ FakeVehicleHardware::FakeVehicleHardware(std::string defaultConfigDir, mPendingGetValueRequests(this), mPendingSetValueRequests(this), mForceOverride(forceOverride) { - init(); + init(s2rS2dConfig); } FakeVehicleHardware::~FakeVehicleHardware() { @@ -388,7 +395,7 @@ std::unordered_map FakeVehicleHardware::loadConfigDe return configsByPropId; } -void FakeVehicleHardware::init() { +void FakeVehicleHardware::init(int32_t s2rS2dConfig) { maybeGetGrpcServiceInfo(&mPowerControllerServiceAddress); for (auto& [_, configDeclaration] : loadConfigDeclarations()) { @@ -396,7 +403,7 @@ void FakeVehicleHardware::init() { VehiclePropertyStore::TokenFunction tokenFunction = nullptr; if (cfg.prop == toInt(VehicleProperty::AP_POWER_STATE_REQ)) { - cfg.configArray[0] = getS2rS2dConfig(); + cfg.configArray[0] = s2rS2dConfig; } else if (cfg.prop == OBD2_FREEZE_FRAME) { tokenFunction = [](const VehiclePropValue& propValue) { return propValue.timestamp; }; } @@ -425,10 +432,6 @@ void FakeVehicleHardware::init() { }); } -int32_t FakeVehicleHardware::getS2rS2dConfig() { - return GetIntProperty(POWER_STATE_REQ_CONFIG_PROPERTY, /*default_value=*/0); -} - std::vector FakeVehicleHardware::getAllPropertyConfigs() const { std::vector allConfigs = mServerSidePropStore->getAllConfigs(); if (mAddExtraTestVendorConfigs) { 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 95647dfae1..f6098cabd1 100644 --- a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp +++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -73,6 +74,7 @@ using ::aidl::android::hardware::automotive::vehicle::SetValueRequest; using ::aidl::android::hardware::automotive::vehicle::SetValueResult; using ::aidl::android::hardware::automotive::vehicle::StatusCode; using ::aidl::android::hardware::automotive::vehicle::SubscribeOptions; +using ::aidl::android::hardware::automotive::vehicle::VehicleApPowerStateConfigFlag; using ::aidl::android::hardware::automotive::vehicle::VehicleApPowerStateReport; using ::aidl::android::hardware::automotive::vehicle::VehicleApPowerStateReq; using ::aidl::android::hardware::automotive::vehicle::VehicleApPowerStateShutdownParam; @@ -3863,6 +3865,25 @@ TEST_F(FakeVehicleHardwareTest, testSetHvacTemperatureValueSuggestion) { } } +TEST_F(FakeVehicleHardwareTest, testOverrideApPowerStateReqConfig) { + auto hardware = std::make_unique( + android::base::GetExecutableDirectory(), + /*overrideConfigDir=*/"", + /*forceOverride=*/false, + toInt(VehicleApPowerStateConfigFlag::ENABLE_DEEP_SLEEP_FLAG) | + toInt(VehicleApPowerStateConfigFlag::ENABLE_HIBERNATION_FLAG)); + + std::vector configs = hardware->getAllPropertyConfigs(); + + for (const auto& config : configs) { + if (config.prop != toInt(VehicleProperty::AP_POWER_STATE_REQ)) { + continue; + } + ASSERT_EQ(config.configArray[0], 0x5); + break; + } +} + } // namespace fake } // namespace vehicle } // namespace automotive