diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h index f09d75ba21..8ff492471d 100644 --- a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h +++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h @@ -1025,7 +1025,7 @@ const ConfigDeclaration kVehicleProperties[]{ .config = { .prop = toInt(VehicleProperty::EPOCH_TIME), - .access = VehiclePropertyAccess::READ_WRITE, + .access = VehiclePropertyAccess::WRITE, .changeMode = VehiclePropertyChangeMode::ON_CHANGE, }, }, diff --git a/automotive/vehicle/2.0/types.hal b/automotive/vehicle/2.0/types.hal index 6bfda32983..7c8e1f5bd8 100644 --- a/automotive/vehicle/2.0/types.hal +++ b/automotive/vehicle/2.0/types.hal @@ -487,8 +487,11 @@ enum VehicleProperty : int32_t { * int64Values[3] = rear right ticks * int64Values[4] = rear left ticks * - * configArray is used to indicate the micrometers-per-wheel-tick value and - * which wheels are supported. configArray is set as follows: + * configArray is used to indicate the micrometers-per-wheel-tick values and + * which wheels are supported. Each micrometers-per-wheel-tick value is static (i.e. will not + * update based on wheel's status) and a best approximation. For example, if a vehicle has + * multiple rim/tire size options, the micrometers-per-wheel-tick values are set to those for + * the typically expected rim/tire size. configArray is set as follows: * * configArray[0], bits [0:3] = supported wheels. Uses enum Wheel. * configArray[1] = micrometers per front left wheel tick @@ -1433,17 +1436,29 @@ enum VehicleProperty : int32_t { * This value denotes the number of milliseconds seconds that have * elapsed since 1/1/1970 UTC. * - * Reading this value will give you the system’s time. This can be - * useful to synchronize other vehicle systems (dash clock etc). + * AAOS will write to this value to give VHAL the Android system's time, + * if the VHAL supports this property. This can be useful to synchronize + * other vehicle systems (dash clock etc) with Android's time. * - * Writing this value will update the ‘ExternalTimeSuggestion’ - * value (if enabled). This value may be consumed by the “Time - * Detector Service”, if other sources do not have a higher - * priority. For information on how to adjust time source - * priorities see Time Detector Service documentation. + * AAOS writes to this property once during boot, and + * will thereafter write only when some time-source changes are propagated. + * AAOS will fill in VehiclePropValue.timestamp correctly. + * Note that AAOS will not send updates for natural elapse of time. + * int64Values[0] = provided Unix time (in milliseconds) + * + * Note that the property may take >0 ms to get propagated through the stack + * and, having a timestamped property helps reduce any time drift. So, + * for all writes to the property, the timestamp can be used to negate this + * drift: + * drift = currentTimeMillis - PropValue.timestamp + * effectiveTime = PropValue.value.int64Values[0] + diff + * + * Aside, this property could have been better named ANDROID_EPOCH_TIME, but it + * continues to be called EPOCH_TIME for legacy reasons. We will try to fix + * this naming discrepancy when we migrate to AIDL. * * @change_mode VehiclePropertyChangeMode:ON_CHANGE - * @access VehiclePropertyAccess:READ_WRITE + * @access VehiclePropertyAccess:WRITE_ONLY * @unit VehicleUnit:MILLI_SECS */ EPOCH_TIME = ( diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp index 5c886ee9b5..c89d983697 100644 --- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp +++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp @@ -3837,6 +3837,8 @@ TEST_P(CameraHidlTest, configureStreamsZSLInputOutputs) { getAvailableOutputStreams(staticMeta, outputStreams, &outputThreshold)); for (auto& outputIter : outputStreams) { + V3_2::DataspaceFlags outputDataSpace = + getDataspace(static_cast(outputIter.format)); V3_2::Stream zslStream = {streamId++, StreamType::OUTPUT, static_cast(input.width), @@ -3859,7 +3861,7 @@ TEST_P(CameraHidlTest, configureStreamsZSLInputOutputs) { static_cast(outputIter.height), static_cast(outputIter.format), GRALLOC1_CONSUMER_USAGE_HWCOMPOSER, - 0, + outputDataSpace, StreamRotation::ROTATION_0}; ::android::hardware::hidl_vec streams = {inputStream, zslStream, diff --git a/current.txt b/current.txt index 59fbfa96be..21ee123576 100644 --- a/current.txt +++ b/current.txt @@ -898,6 +898,8 @@ ea465970e96d9605ee6f6706b3b512726c66d2644738added9128c739f8f8b0c android.hardwar c8a57364f6ad20842be14f4db284df5304f7521ca8eac6bcc1fa6c5b466fb8a6 android.hardware.wifi.supplicant@1.4::ISupplicantStaNetwork 2123482b69f3b531c88023aa2a007110e130efbf4ed68ac9ce0bc55d5e82bc8b android.hardware.wifi.supplicant@1.4::ISupplicantStaNetworkCallback 0821f516e4d428bc15251969f7e19411c94d8f2ccbd99e1fc8168d8e49e38b0f android.hardware.wifi.supplicant@1.4::types +4a087a308608d146b022ebc15633de989f5f4dfe1491a83fa41763290a82e40d android.hardware.automotive.vehicle@2.0::types +70eb14415391f835fb218b43a1e25f5d6495f098f96fa2acaea70985e98e1ce8 android.hardware.automotive.vehicle@2.0::types # ABI preserving changes to HALs during Android T 62ace52d9c3ff1f60f94118557a2aaf0b953513e59dcd34d5f94ae28d4c7e780 android.hardware.fastboot@1.0::IFastboot diff --git a/gnss/aidl/vts/gnss_hal_test_cases.cpp b/gnss/aidl/vts/gnss_hal_test_cases.cpp index b484f9c383..0cd782ebc1 100644 --- a/gnss/aidl/vts/gnss_hal_test_cases.cpp +++ b/gnss/aidl/vts/gnss_hal_test_cases.cpp @@ -53,17 +53,16 @@ TEST_P(GnssHalTest, SetupTeardownCreateCleanup) {} /* * TestPsdsExtension: - * 1. Gets the PsdsExtension and verifies that it returns a non-null extension. + * 1. Gets the PsdsExtension * 2. Injects empty PSDS data and verifies that it returns an error. */ TEST_P(GnssHalTest, TestPsdsExtension) { sp iGnssPsds; auto status = aidl_gnss_hal_->getExtensionPsds(&iGnssPsds); - ASSERT_TRUE(status.isOk()); - ASSERT_TRUE(iGnssPsds != nullptr); - - status = iGnssPsds->injectPsdsData(PsdsType::LONG_TERM, std::vector()); - ASSERT_FALSE(status.isOk()); + if (status.isOk() && iGnssPsds != nullptr) { + status = iGnssPsds->injectPsdsData(PsdsType::LONG_TERM, std::vector()); + ASSERT_FALSE(status.isOk()); + } } void CheckSatellitePvt(const SatellitePvt& satellitePvt) { diff --git a/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp b/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp index 476eed8b19..93fb19d23d 100644 --- a/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp +++ b/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp @@ -940,7 +940,11 @@ TEST_P(NewKeyGenerationTest, HmacDigestNone) { * UNSUPPORTED_KEY_SIZE. */ TEST_P(NewKeyGenerationTest, AesInvalidKeySize) { + int32_t firstApiLevel = property_get_int32("ro.board.first_api_level", 0); for (auto key_size : InvalidKeySizes(Algorithm::AES)) { + if (key_size == 192 && SecLevel() == SecurityLevel::STRONGBOX && firstApiLevel < 31) { + continue; + } ASSERT_EQ(ErrorCode::UNSUPPORTED_KEY_SIZE, GenerateKey(AuthorizationSetBuilder() .Authorization(TAG_NO_AUTH_REQUIRED) diff --git a/media/omx/1.0/vts/functional/store/VtsHalMediaOmxV1_0TargetStoreTest.cpp b/media/omx/1.0/vts/functional/store/VtsHalMediaOmxV1_0TargetStoreTest.cpp index e73196cfb2..8699de3eb8 100644 --- a/media/omx/1.0/vts/functional/store/VtsHalMediaOmxV1_0TargetStoreTest.cpp +++ b/media/omx/1.0/vts/functional/store/VtsHalMediaOmxV1_0TargetStoreTest.cpp @@ -264,11 +264,13 @@ TEST_P(StoreHidlTest, ListRoles) { // Make sure role name follows expected format based on type and // isEncoder - const std::string role_name( - ::android::GetComponentRole(role.isEncoder, role.type.c_str())); - EXPECT_EQ(role_name, role.role) << "Role \"" << role.role << "\" does not match " - << (role.isEncoder ? "an encoder " : "a decoder ") - << "for mime type \"" << role.type << "."; + const char* role_name = ::android::GetComponentRole(role.isEncoder, role.type.c_str()); + if (role_name != nullptr) { + EXPECT_EQ(std::string(role_name), role.role) + << "Role \"" << role.role << "\" does not match " + << (role.isEncoder ? "an encoder " : "a decoder ") << "for media type \"" + << role.type << "."; + } // Check the nodes for this role std::set nodeKeys; diff --git a/tv/tuner/1.0/vts/functional/DvrTests.cpp b/tv/tuner/1.0/vts/functional/DvrTests.cpp index ba211894f7..599abfb0b9 100644 --- a/tv/tuner/1.0/vts/functional/DvrTests.cpp +++ b/tv/tuner/1.0/vts/functional/DvrTests.cpp @@ -204,6 +204,7 @@ bool DvrCallback::readRecordFMQ() { void DvrCallback::stopRecordThread() { mKeepReadingRecordFMQ = false; mRecordThreadRunning = false; + android::Mutex::Autolock autoLock(mRecordThreadLock); } AssertionResult DvrTests::openDvrInDemux(DvrType type, uint32_t bufferSize) { diff --git a/wifi/1.5/default/wifi.cpp b/wifi/1.5/default/wifi.cpp index b9f20a4615..a85b242a8a 100644 --- a/wifi/1.5/default/wifi.cpp +++ b/wifi/1.5/default/wifi.cpp @@ -131,8 +131,14 @@ WifiStatus Wifi::startInternal() { WifiStatus wifi_status = createWifiStatus(WifiStatusCode::ERROR_UNKNOWN, error); for (const auto& callback : event_cb_handler_.getCallbacks()) { + LOG(INFO) << "Attempting to invoke onSubsystemRestart " + "callback"; if (!callback->onSubsystemRestart(wifi_status).isOk()) { - LOG(ERROR) << "Failed to invoke onFailure callback"; + LOG(ERROR) + << "Failed to invoke onSubsystemRestart callback"; + } else { + LOG(INFO) << "Succeeded to invoke onSubsystemRestart " + "callback"; } } }; diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp index ac39a24fa4..eabbf1b141 100644 --- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp +++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp @@ -38,12 +38,15 @@ class SupplicantHidlTest : public ::testing::TestWithParam> { public: virtual void SetUp() override { + // Stop Wi-Fi + ASSERT_TRUE(stopWifiFramework()); // stop & wait for wifi to shutdown. + wifi_instance_name_ = std::get<0>(GetParam()); supplicant_instance_name_ = std::get<1>(GetParam()); + std::system("/system/bin/start"); + ASSERT_TRUE(waitForFrameworkReady()); isP2pOn_ = testing::deviceSupportsFeature("android.hardware.wifi.direct"); - // Stop Framework - std::system("/system/bin/stop"); stopSupplicant(wifi_instance_name_); startSupplicantAndWaitForHidlService(wifi_instance_name_, supplicant_instance_name_); @@ -53,8 +56,8 @@ class SupplicantHidlTest virtual void TearDown() override { stopSupplicant(wifi_instance_name_); - // Start Framework - std::system("/system/bin/start"); + // Start Wi-Fi + startWifiFramework(); } protected: @@ -220,4 +223,4 @@ INSTANTIATE_TEST_CASE_P( android::hardware::getAllHalInstanceNames(IWifi::descriptor)), testing::ValuesIn(android::hardware::getAllHalInstanceNames( ISupplicant::descriptor))), - android::hardware::PrintInstanceTupleNameToString<>); \ No newline at end of file + android::hardware::PrintInstanceTupleNameToString<>); diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp index be6aad9583..8cb7e22f0e 100644 --- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp +++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp @@ -48,6 +48,26 @@ using ::android::wifi_system::InterfaceTool; using ::android::wifi_system::SupplicantManager; namespace { +bool waitForSupplicantState(bool is_running) { + SupplicantManager supplicant_manager; + int count = 50; /* wait at most 5 seconds for completion */ + while (count-- > 0) { + if (supplicant_manager.IsSupplicantRunning() == is_running) { + return true; + } + usleep(100000); + } + LOG(ERROR) << "Supplicant not " << is_running ? "running" : "stopped"; + return false; +} + +// Helper function to wait for supplicant to be started by framework on wifi +// enable. +bool waitForSupplicantStart() { return waitForSupplicantState(true); } + +// Helper function to wait for supplicant to be stopped by framework on wifi +// disable. +bool waitForSupplicantStop() { return waitForSupplicantState(false); } // Helper function to initialize the driver and firmware to STA mode // using the vendor HAL HIDL interface. @@ -118,6 +138,18 @@ std::string getP2pIfaceName() { } } // namespace +bool startWifiFramework() { + std::system("svc wifi enable"); + std::system("cmd wifi set-scan-always-available enabled"); + return waitForSupplicantStart(); // wait for wifi to start. +} + +bool stopWifiFramework() { + std::system("svc wifi disable"); + std::system("cmd wifi set-scan-always-available disabled"); + return waitForSupplicantStop(); // wait for wifi to shutdown. +} + void stopSupplicant() { stopSupplicant(""); } void stopSupplicant(const std::string& wifi_instance_name) { diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h index 33945ccb19..22cea8c14c 100644 --- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h +++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.h @@ -29,9 +29,11 @@ #include "wifi_hidl_test_utils.h" +// Used to start the android wifi framework after every test. +bool startWifiFramework(); + // Used to stop the android wifi framework before every test. -void stopWifiFramework(const std::string& wifi_instance_name); -void startWifiFramework(const std::string& wifi_instance_name); +bool stopWifiFramework(); void stopSupplicant(const std::string& wifi_instance_name); // Used to configure the chip, driver and start wpa_supplicant before every @@ -70,16 +72,16 @@ class SupplicantHidlTestBase : public ::testing::TestWithParam> { public: virtual void SetUp() override { + // Stop Wi-Fi + ASSERT_TRUE(stopWifiFramework()); // stop & wait for wifi to shutdown. + // should always be v1.0 wifi wifi_v1_0_instance_name_ = std::get<0>(GetParam()); supplicant_instance_name_ = std::get<1>(GetParam()); std::system("/system/bin/start"); ASSERT_TRUE(waitForFrameworkReady()); - isP2pOn_ = testing::deviceSupportsFeature("android.hardware.wifi.direct"); - // Stop Framework - std::system("/system/bin/stop"); stopSupplicant(wifi_v1_0_instance_name_); startSupplicantAndWaitForHidlService(wifi_v1_0_instance_name_, supplicant_instance_name_); @@ -88,8 +90,8 @@ class SupplicantHidlTestBase virtual void TearDown() override { stopSupplicant(wifi_v1_0_instance_name_); - // Start Framework - std::system("/system/bin/start"); + // Start Wi-Fi + startWifiFramework(); } protected: diff --git a/wifi/supplicant/1.3/vts/functional/Android.bp b/wifi/supplicant/1.3/vts/functional/Android.bp index ec25de2a43..4b563367c9 100644 --- a/wifi/supplicant/1.3/vts/functional/Android.bp +++ b/wifi/supplicant/1.3/vts/functional/Android.bp @@ -74,5 +74,4 @@ cc_test { "general-tests", "vts", ], - disable_framework: true, }