Snap for 9549188 from 303092c46f33f8ba0ce0f9df1bc43b8a7f4bcebd to mainline-uwb-release Change-Id: Ica7ceb18a84e09acca00a4122bae842ca2f6d8b4
diff --git a/audio/core/all-versions/vts/functional/7.0/AudioPrimaryHidlHalTest.cpp b/audio/core/all-versions/vts/functional/7.0/AudioPrimaryHidlHalTest.cpp index 505c54c..95564e0 100644 --- a/audio/core/all-versions/vts/functional/7.0/AudioPrimaryHidlHalTest.cpp +++ b/audio/core/all-versions/vts/functional/7.0/AudioPrimaryHidlHalTest.cpp
@@ -687,7 +687,12 @@ InputStreamTest::TearDown(); } - bool canQueryCapturePosition() const { return !xsd::isTelephonyDevice(address.deviceType); } + bool canQueryCapturePosition() const { + // See b/263305254 and b/259636577. Must use the device initially passed in + // as a parameter, not 'address' which gets adjusted during test setup for + // the telephony case. + return !xsd::isTelephonyDevice(getAttachedDeviceAddress().deviceType); + } void createPatchIfNeeded() { if (areAudioPatchesSupported()) {
diff --git a/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h b/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h index e46e5b4..98e49a2 100644 --- a/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h +++ b/audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h
@@ -1014,9 +1014,8 @@ if (mDataPosition == 0) mOnDataStart(); const size_t dataSize = std::min(mData.size() - mDataPosition, mDataMQ->availableToWrite()); bool success = mDataMQ->write(mData.data() + mDataPosition, dataSize); + bool wrapped = false; ALOGE_IF(!success, "data message queue write failed"); - mDataPosition += dataSize; - if (mDataPosition >= mData.size()) mDataPosition = 0; mEfGroup->wake(static_cast<uint32_t>(MessageQueueFlagBits::NOT_EMPTY)); uint32_t efState = 0; @@ -1034,6 +1033,11 @@ ALOGE("bad write status: %d", writeStatus.retval); success = false; } + mDataPosition += writeStatus.reply.written; + if (mDataPosition >= mData.size()) { + mDataPosition = 0; + wrapped = true; + } } if (ret == -EAGAIN || ret == -EINTR) { // Spurious wakeup. This normally retries no more than once. @@ -1042,7 +1046,7 @@ ALOGE("bad wait status: %d", ret); success = false; } - if (success && mDataPosition == 0) { + if (wrapped) { success = mOnDataWrap(); } return success; @@ -1270,6 +1274,8 @@ if (!xsd::isTelephonyDevice(address.deviceType)) { metadata.source = toString(xsd::AudioSource::AUDIO_SOURCE_UNPROCESSED); metadata.channelMask = getConfig().base.channelMask; + } else { + address.deviceType = toString(xsd::AudioDevice::AUDIO_DEVICE_IN_DEFAULT); } #if MAJOR_VERSION == 7 && MINOR_VERSION >= 1 auto flagsIt = std::find(flags.begin(), flags.end(),
diff --git a/audio/policy/1.0/xml/api/current.txt b/audio/policy/1.0/xml/api/current.txt index 0b77d45..84a2b71 100644 --- a/audio/policy/1.0/xml/api/current.txt +++ b/audio/policy/1.0/xml/api/current.txt
@@ -217,6 +217,10 @@ enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_GAME; enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_MEDIA; enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_NOTIFICATION; + enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED; + enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT; + enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST; + enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_NOTIFICATION_EVENT; enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE; enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_UNKNOWN; enum_constant public static final audio.policy.V1_0.UsageEnumType AUDIO_USAGE_VIRTUAL_SOURCE;
diff --git a/audio/policy/1.0/xml/audio_policy_engine_configuration.xsd b/audio/policy/1.0/xml/audio_policy_engine_configuration.xsd index 3ce12e7..b58a6c8 100644 --- a/audio/policy/1.0/xml/audio_policy_engine_configuration.xsd +++ b/audio/policy/1.0/xml/audio_policy_engine_configuration.xsd
@@ -347,6 +347,11 @@ <xs:enumeration value="AUDIO_USAGE_ALARM"/> <xs:enumeration value="AUDIO_USAGE_NOTIFICATION"/> <xs:enumeration value="AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE"/> + <!-- Note: the following 3 values were deprecated in Android T (13) SDK --> + <xs:enumeration value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/> + <xs:enumeration value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/> + <xs:enumeration value="AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/> + <xs:enumeration value="AUDIO_USAGE_NOTIFICATION_EVENT"/> <xs:enumeration value="AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY"/> <xs:enumeration value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/> <xs:enumeration value="AUDIO_USAGE_ASSISTANCE_SONIFICATION"/>
diff --git a/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp b/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp index 623438f..9c8bfc4 100644 --- a/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp +++ b/automotive/evs/1.1/vts/functional/VtsHalEvsV1_1TargetTest.cpp
@@ -250,8 +250,7 @@ // Stream configurations are found in metadata RawStreamConfig *ptr = reinterpret_cast<RawStreamConfig *>(streamCfgs.data.i32); for (unsigned offset = 0; offset < streamCfgs.count; offset += kStreamCfgSz) { - if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT && - ptr->format == HAL_PIXEL_FORMAT_RGBA_8888) { + if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT) { targetCfg.width = ptr->width; targetCfg.height = ptr->height; targetCfg.format = static_cast<PixelFormat>(ptr->format); @@ -631,29 +630,29 @@ targetDisplayId = ids[0]; }); - // Request exclusive access to the first EVS display - sp<IEvsDisplay_1_1> pDisplay = pEnumerator->openDisplay_1_1(targetDisplayId); - ASSERT_NE(pDisplay, nullptr); - LOG(INFO) << "Display " << targetDisplayId << " is alreay in use."; - - // Get the display descriptor - pDisplay->getDisplayInfo_1_1([](const HwDisplayConfig& config, const HwDisplayState& state) { - ASSERT_GT(config.size(), 0); - ASSERT_GT(state.size(), 0); - - android::ui::DisplayMode* pConfig = (android::ui::DisplayMode*)config.data(); - const auto width = pConfig->resolution.getWidth(); - const auto height = pConfig->resolution.getHeight(); - LOG(INFO) << " Resolution: " << width << "x" << height; - ASSERT_GT(width, 0); - ASSERT_GT(height, 0); - - android::ui::DisplayState* pState = (android::ui::DisplayState*)state.data(); - ASSERT_NE(pState->layerStack, android::ui::INVALID_LAYER_STACK); - }); - // Test each reported camera for (auto&& cam: cameraInfo) { + // Request exclusive access to the first EVS display + sp<IEvsDisplay_1_1> pDisplay = pEnumerator->openDisplay_1_1(targetDisplayId); + ASSERT_NE(pDisplay, nullptr); + LOG(INFO) << "Display " << targetDisplayId << " is already in use."; + + // Get the display descriptor + pDisplay->getDisplayInfo_1_1([](const HwDisplayConfig& config, const HwDisplayState& state) { + ASSERT_GT(config.size(), 0); + ASSERT_GT(state.size(), 0); + + android::ui::DisplayMode* pConfig = (android::ui::DisplayMode*)config.data(); + const auto width = pConfig->resolution.getWidth(); + const auto height = pConfig->resolution.getHeight(); + LOG(INFO) << " Resolution: " << width << "x" << height; + ASSERT_GT(width, 0); + ASSERT_GT(height, 0); + + android::ui::DisplayState* pState = (android::ui::DisplayState*)state.data(); + ASSERT_NE(pState->layerStack, android::ui::INVALID_LAYER_STACK); + }); + bool isLogicalCam = false; getPhysicalCameraIds(cam.v1.cameraId, isLogicalCam); if (mIsHwModule && isLogicalCam) { @@ -708,10 +707,10 @@ // Explicitly release the camera pEnumerator->closeCamera(pCam); activeCameras.clear(); - } - // Explicitly release the display - pEnumerator->closeDisplay(pDisplay); + // Explicitly release the display + pEnumerator->closeDisplay(pDisplay); + } } @@ -1632,12 +1631,12 @@ // Get the camera list loadCameraList(); - // Request exclusive access to the EVS display - sp<IEvsDisplay_1_0> pDisplay = pEnumerator->openDisplay(); - ASSERT_NE(pDisplay, nullptr); - // Test each reported camera for (auto&& cam: cameraInfo) { + // Request exclusive access to the EVS display + sp<IEvsDisplay_1_0> pDisplay = pEnumerator->openDisplay(); + ASSERT_NE(pDisplay, nullptr); + // Read a target resolution from the metadata Stream targetCfg = getFirstStreamConfiguration(reinterpret_cast<camera_metadata_t*>(cam.metadata.data())); @@ -1979,10 +1978,9 @@ pEnumerator->closeCamera(pCam1); activeCameras.clear(); + // Explicitly release the display + pEnumerator->closeDisplay(pDisplay); } - - // Explicitly release the display - pEnumerator->closeDisplay(pDisplay); } @@ -1998,12 +1996,12 @@ // Get the camera list loadCameraList(); - // Request exclusive access to the EVS display - sp<IEvsDisplay_1_0> pDisplay = pEnumerator->openDisplay(); - ASSERT_NE(pDisplay, nullptr); - // Test each reported camera for (auto&& cam: cameraInfo) { + // Request exclusive access to the EVS display + sp<IEvsDisplay_1_0> pDisplay = pEnumerator->openDisplay(); + ASSERT_NE(pDisplay, nullptr); + // choose a configuration that has a frame rate faster than minReqFps. Stream targetCfg = {}; const int32_t minReqFps = 15; @@ -2017,13 +2015,12 @@ // Stream configurations are found in metadata RawStreamConfig *ptr = reinterpret_cast<RawStreamConfig *>(streamCfgs.data.i32); for (unsigned offset = 0; offset < streamCfgs.count; offset += kStreamCfgSz) { - if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT && - ptr->format == HAL_PIXEL_FORMAT_RGBA_8888) { - + if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT) { if (ptr->width * ptr->height > maxArea && ptr->framerate >= minReqFps) { targetCfg.width = ptr->width; targetCfg.height = ptr->height; + targetCfg.format = static_cast<PixelFormat>(ptr->format); maxArea = ptr->width * ptr->height; foundCfg = true; @@ -2032,8 +2029,6 @@ ++ptr; } } - targetCfg.format = - static_cast<PixelFormat>(HAL_PIXEL_FORMAT_RGBA_8888); if (!foundCfg) { // Current EVS camera does not provide stream configurations in the @@ -2082,10 +2077,10 @@ // Explicitly release the camera pEnumerator->closeCamera(pCam); activeCameras.clear(); - } - // Explicitly release the display - pEnumerator->closeDisplay(pDisplay); + // Explicitly release the display + pEnumerator->closeDisplay(pDisplay); + } } @@ -2120,13 +2115,12 @@ // Stream configurations are found in metadata RawStreamConfig *ptr = reinterpret_cast<RawStreamConfig *>(streamCfgs.data.i32); for (unsigned offset = 0; offset < streamCfgs.count; offset += kStreamCfgSz) { - if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT && - ptr->format == HAL_PIXEL_FORMAT_RGBA_8888) { - + if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT) { if (ptr->width * ptr->height > maxArea && ptr->framerate >= minReqFps) { targetCfg.width = ptr->width; targetCfg.height = ptr->height; + targetCfg.format = static_cast<PixelFormat>(ptr->format); maxArea = ptr->width * ptr->height; foundCfg = true; @@ -2135,8 +2129,6 @@ ++ptr; } } - targetCfg.format = - static_cast<PixelFormat>(HAL_PIXEL_FORMAT_RGBA_8888); if (!foundCfg) { LOG(INFO) << "Device " << cam.v1.cameraId
diff --git a/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp b/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp index 9c6c573..3cab204 100644 --- a/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp +++ b/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp
@@ -231,8 +231,7 @@ // Stream configurations are found in metadata RawStreamConfig* ptr = reinterpret_cast<RawStreamConfig*>(streamCfgs.data.i32); for (unsigned offset = 0; offset < streamCfgs.count; offset += kStreamCfgSz) { - if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT && - ptr->format == HAL_PIXEL_FORMAT_RGBA_8888) { + if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT) { targetCfg.width = ptr->width; targetCfg.height = ptr->height; targetCfg.format = static_cast<PixelFormat>(ptr->format); @@ -601,21 +600,21 @@ EXPECT_GT(displayIds.size(), 0); targetDisplayId = displayIds[0]; - // Request exclusive access to the first EVS display - std::shared_ptr<IEvsDisplay> pDisplay; - ASSERT_TRUE(mEnumerator->openDisplay(targetDisplayId, &pDisplay).isOk()); - EXPECT_NE(pDisplay, nullptr); - LOG(INFO) << "Display " << static_cast<int>(targetDisplayId) << " is in use."; - - // Get the display descriptor - DisplayDesc displayDesc; - ASSERT_TRUE(pDisplay->getDisplayInfo(&displayDesc).isOk()); - LOG(INFO) << " Resolution: " << displayDesc.width << "x" << displayDesc.height; - ASSERT_GT(displayDesc.width, 0); - ASSERT_GT(displayDesc.height, 0); - // Test each reported camera for (auto&& cam : mCameraInfo) { + // Request exclusive access to the first EVS display + std::shared_ptr<IEvsDisplay> pDisplay; + ASSERT_TRUE(mEnumerator->openDisplay(targetDisplayId, &pDisplay).isOk()); + EXPECT_NE(pDisplay, nullptr); + LOG(INFO) << "Display " << static_cast<int>(targetDisplayId) << " is in use."; + + // Get the display descriptor + DisplayDesc displayDesc; + ASSERT_TRUE(pDisplay->getDisplayInfo(&displayDesc).isOk()); + LOG(INFO) << " Resolution: " << displayDesc.width << "x" << displayDesc.height; + ASSERT_GT(displayDesc.width, 0); + ASSERT_GT(displayDesc.height, 0); + bool isLogicalCam = false; getPhysicalCameraIds(cam.id, isLogicalCam); if (mIsHwModule && isLogicalCam) { @@ -669,10 +668,10 @@ // Explicitly release the camera ASSERT_TRUE(mEnumerator->closeCamera(pCam).isOk()); mActiveCameras.clear(); - } - // Explicitly release the display - ASSERT_TRUE(mEnumerator->closeDisplay(pDisplay).isOk()); + // Explicitly release the display + ASSERT_TRUE(mEnumerator->closeDisplay(pDisplay).isOk()); + } } /* @@ -1396,20 +1395,20 @@ // Get the camera list loadCameraList(); - // Request available display IDs - uint8_t targetDisplayId = 0; - std::vector<uint8_t> displayIds; - ASSERT_TRUE(mEnumerator->getDisplayIdList(&displayIds).isOk()); - EXPECT_GT(displayIds.size(), 0); - targetDisplayId = displayIds[0]; - - // Request exclusive access to the EVS display - std::shared_ptr<IEvsDisplay> pDisplay; - ASSERT_TRUE(mEnumerator->openDisplay(targetDisplayId, &pDisplay).isOk()); - EXPECT_NE(pDisplay, nullptr); - // Test each reported camera for (auto&& cam : mCameraInfo) { + // Request available display IDs + uint8_t targetDisplayId = 0; + std::vector<uint8_t> displayIds; + ASSERT_TRUE(mEnumerator->getDisplayIdList(&displayIds).isOk()); + EXPECT_GT(displayIds.size(), 0); + targetDisplayId = displayIds[0]; + + // Request exclusive access to the EVS display + std::shared_ptr<IEvsDisplay> pDisplay; + ASSERT_TRUE(mEnumerator->openDisplay(targetDisplayId, &pDisplay).isOk()); + EXPECT_NE(pDisplay, nullptr); + // Read a target resolution from the metadata Stream targetCfg = getFirstStreamConfiguration( reinterpret_cast<camera_metadata_t*>(cam.metadata.data())); @@ -1688,10 +1687,10 @@ ASSERT_TRUE(mEnumerator->closeCamera(pCam0).isOk()); ASSERT_TRUE(mEnumerator->closeCamera(pCam1).isOk()); mActiveCameras.clear(); - } - // Explicitly release the display - ASSERT_TRUE(mEnumerator->closeDisplay(pDisplay).isOk()); + // Explicitly release the display + ASSERT_TRUE(mEnumerator->closeDisplay(pDisplay).isOk()); + } } /* @@ -1713,13 +1712,13 @@ EXPECT_GT(displayIds.size(), 0); targetDisplayId = displayIds[0]; - // Request exclusive access to the EVS display - std::shared_ptr<IEvsDisplay> pDisplay; - ASSERT_TRUE(mEnumerator->openDisplay(targetDisplayId, &pDisplay).isOk()); - EXPECT_NE(pDisplay, nullptr); - // Test each reported camera for (auto&& cam : mCameraInfo) { + // Request exclusive access to the EVS display + std::shared_ptr<IEvsDisplay> pDisplay; + ASSERT_TRUE(mEnumerator->openDisplay(targetDisplayId, &pDisplay).isOk()); + EXPECT_NE(pDisplay, nullptr); + // choose a configuration that has a frame rate faster than minReqFps. Stream targetCfg = {}; const int32_t minReqFps = 15; @@ -1732,11 +1731,11 @@ // Stream configurations are found in metadata RawStreamConfig* ptr = reinterpret_cast<RawStreamConfig*>(streamCfgs.data.i32); for (unsigned offset = 0; offset < streamCfgs.count; offset += kStreamCfgSz) { - if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT && - ptr->format == HAL_PIXEL_FORMAT_RGBA_8888) { + if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT) { if (ptr->width * ptr->height > maxArea && ptr->framerate >= minReqFps) { targetCfg.width = ptr->width; targetCfg.height = ptr->height; + targetCfg.format = static_cast<PixelFormat>(ptr->format); maxArea = ptr->width * ptr->height; foundCfg = true; @@ -1745,7 +1744,6 @@ ++ptr; } } - targetCfg.format = static_cast<PixelFormat>(HAL_PIXEL_FORMAT_RGBA_8888); if (!foundCfg) { // Current EVS camera does not provide stream configurations in the @@ -1793,10 +1791,10 @@ // Explicitly release the camera ASSERT_TRUE(mEnumerator->closeCamera(pCam).isOk()); mActiveCameras.clear(); - } - // Explicitly release the display - ASSERT_TRUE(mEnumerator->closeDisplay(pDisplay).isOk()); + // Explicitly release the display + ASSERT_TRUE(mEnumerator->closeDisplay(pDisplay).isOk()); + } } /* @@ -1829,11 +1827,11 @@ // Stream configurations are found in metadata RawStreamConfig* ptr = reinterpret_cast<RawStreamConfig*>(streamCfgs.data.i32); for (unsigned offset = 0; offset < streamCfgs.count; offset += kStreamCfgSz) { - if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT && - ptr->format == HAL_PIXEL_FORMAT_RGBA_8888) { + if (ptr->direction == ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT) { if (ptr->width * ptr->height > maxArea && ptr->framerate >= minReqFps) { targetCfg.width = ptr->width; targetCfg.height = ptr->height; + targetCfg.format = static_cast<PixelFormat>(ptr->format); maxArea = ptr->width * ptr->height; foundCfg = true; @@ -1842,7 +1840,6 @@ ++ptr; } } - targetCfg.format = static_cast<PixelFormat>(HAL_PIXEL_FORMAT_RGBA_8888); if (!foundCfg) { LOG(INFO) << "Device " << cam.id
diff --git a/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.xml b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.xml index ea7adc9..6010c60 100644 --- a/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.xml +++ b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.xml
@@ -24,8 +24,10 @@ <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> <option name="run-command" value="settings put global ble_scan_always_enabled 0" /> - <option name="run-command" value="su u$(am get-current-user)_system svc bluetooth disable" /> - <option name="teardown-command" value="su u$(am get-current-user)_system svc bluetooth enable" /> + <option name="run-command" value="cmd bluetooth_manager disable" /> + <option name="run-command" value="cmd bluetooth_manager wait-for-state:STATE_OFF" /> + <option name="teardown-command" value="cmd bluetooth_manager enable" /> + <option name="teardown-command" value="cmd bluetooth_manager wait-for-state:STATE_ON" /> <option name="teardown-command" value="settings put global ble_scan_always_enabled 1" /> </target_preparer>
diff --git a/bluetooth/1.1/vts/functional/VtsHalBluetoothV1_1TargetTest.xml b/bluetooth/1.1/vts/functional/VtsHalBluetoothV1_1TargetTest.xml index d64751a..0234dc8 100644 --- a/bluetooth/1.1/vts/functional/VtsHalBluetoothV1_1TargetTest.xml +++ b/bluetooth/1.1/vts/functional/VtsHalBluetoothV1_1TargetTest.xml
@@ -20,8 +20,13 @@ <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"> </target_preparer> - <target_preparer class="com.android.tradefed.targetprep.DeviceSetup"> - <option name="bluetooth" value="off" /> + <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> + <option name="run-command" value="settings put global ble_scan_always_enabled 0" /> + <option name="run-command" value="cmd bluetooth_manager disable" /> + <option name="run-command" value="cmd bluetooth_manager wait-for-state:STATE_OFF" /> + <option name="teardown-command" value="cmd bluetooth_manager enable" /> + <option name="teardown-command" value="cmd bluetooth_manager wait-for-state:STATE_ON" /> + <option name="teardown-command" value="settings put global ble_scan_always_enabled 1" /> </target_preparer> <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
diff --git a/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp b/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp index ebd728d..e9b74b7 100644 --- a/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp +++ b/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp
@@ -23,6 +23,7 @@ #include <android/binder_process.h> #include <binder/IServiceManager.h> #include <binder/ProcessState.h> +#include <cutils/properties.h> #include <fmq/AidlMessageQueue.h> #include <cstdint> @@ -248,7 +249,8 @@ case SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH: case SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH: case SessionType::LE_AUDIO_BROADCAST_HARDWARE_OFFLOAD_ENCODING_DATAPATH: { - ASSERT_FALSE(temp_provider_capabilities_.empty()); + // empty capability means offload is unsupported since capabilities are + // not hardcoded for (auto audio_capability : temp_provider_capabilities_) { ASSERT_EQ(audio_capability.getTag(), AudioCapabilities::leAudioCapabilities); @@ -513,8 +515,9 @@ for (auto channel_mode : opus_capability->channelMode) { OpusConfiguration opus_data{ .samplingFrequencyHz = samplingFrequencyHz, + .frameDurationUs = frameDurationUs, .channelMode = channel_mode, - .frameDurationUs = frameDurationUs}; + }; opus_codec_specifics.push_back( CodecConfiguration::CodecSpecific(opus_data)); } @@ -623,8 +626,8 @@ for (auto channel_mode : a2dp_channel_modes) { PcmConfiguration pcm_config{ .sampleRateHz = sample_rate, - .bitsPerSample = bits_per_sample, .channelMode = channel_mode, + .bitsPerSample = bits_per_sample, }; bool is_codec_config_valid = IsPcmConfigSupported(pcm_config); DataMQDesc mq_desc; @@ -937,8 +940,8 @@ for (auto channel_mode : hearing_aid_channel_modes_) { PcmConfiguration pcm_config{ .sampleRateHz = sample_rate, - .bitsPerSample = bits_per_sample, .channelMode = channel_mode, + .bitsPerSample = bits_per_sample, }; bool is_codec_config_valid = IsPcmConfigSupported(pcm_config); DataMQDesc mq_desc; @@ -1008,8 +1011,8 @@ for (auto data_interval_us : le_audio_output_data_interval_us_) { PcmConfiguration pcm_config{ .sampleRateHz = sample_rate, - .bitsPerSample = bits_per_sample, .channelMode = channel_mode, + .bitsPerSample = bits_per_sample, .dataIntervalUs = data_interval_us, }; bool is_codec_config_valid = @@ -1081,8 +1084,8 @@ for (auto data_interval_us : le_audio_input_data_interval_us_) { PcmConfiguration pcm_config{ .sampleRateHz = sample_rate, - .bitsPerSample = bits_per_sample, .channelMode = channel_mode, + .bitsPerSample = bits_per_sample, .dataIntervalUs = data_interval_us, }; bool is_codec_config_valid = @@ -1144,7 +1147,7 @@ bool supported) { std::vector<Lc3Configuration> le_audio_codec_configs; if (!supported) { - Lc3Configuration lc3_config{.samplingFrequencyHz = 0, .pcmBitDepth = 0}; + Lc3Configuration lc3_config{.pcmBitDepth = 0, .samplingFrequencyHz = 0}; le_audio_codec_configs.push_back(lc3_config); return le_audio_codec_configs; } @@ -1428,8 +1431,8 @@ for (auto data_interval_us : le_audio_output_data_interval_us_) { PcmConfiguration pcm_config{ .sampleRateHz = sample_rate, - .bitsPerSample = bits_per_sample, .channelMode = channel_mode, + .bitsPerSample = bits_per_sample, .dataIntervalUs = data_interval_us, }; bool is_codec_config_valid = @@ -1490,7 +1493,7 @@ std::vector<Lc3Configuration> GetBroadcastLc3SupportedList(bool supported) { std::vector<Lc3Configuration> le_audio_codec_configs; if (!supported) { - Lc3Configuration lc3_config{.samplingFrequencyHz = 0, .pcmBitDepth = 0}; + Lc3Configuration lc3_config{.pcmBitDepth = 0, .samplingFrequencyHz = 0}; le_audio_codec_configs.push_back(lc3_config); return le_audio_codec_configs; } @@ -1650,8 +1653,8 @@ for (auto channel_mode : a2dp_channel_modes) { PcmConfiguration pcm_config{ .sampleRateHz = sample_rate, - .bitsPerSample = bits_per_sample, .channelMode = channel_mode, + .bitsPerSample = bits_per_sample, }; bool is_codec_config_valid = IsPcmConfigSupported(pcm_config); DataMQDesc mq_desc;
diff --git a/broadcastradio/2.0/vts/OWNERS b/broadcastradio/2.0/vts/OWNERS index 1ff7407..eb03052 100644 --- a/broadcastradio/2.0/vts/OWNERS +++ b/broadcastradio/2.0/vts/OWNERS
@@ -1,6 +1,6 @@ # Automotive team -egranata@google.com -twasilczyk@google.com +xuweilin@google.com +oscarazu@google.com # VTS team dshi@google.com
diff --git a/broadcastradio/2.0/vts/functional/VtsHalBroadcastradioV2_0TargetTest.cpp b/broadcastradio/2.0/vts/functional/VtsHalBroadcastradioV2_0TargetTest.cpp index 615fde0..63e3b55 100644 --- a/broadcastradio/2.0/vts/functional/VtsHalBroadcastradioV2_0TargetTest.cpp +++ b/broadcastradio/2.0/vts/functional/VtsHalBroadcastradioV2_0TargetTest.cpp
@@ -514,9 +514,48 @@ ASSERT_TRUE(openSession()); + auto programList = getProgramList(); + + if (!programList) { + printSkipped("Empty Station-List, tune cannot be performed"); + return; + } + ProgramSelector sel = {}; - uint64_t freq = config[config.size() / 2].frequency; - sel.primaryId = make_identifier(IdentifierType::DAB_FREQUENCY,freq); + uint64_t freq = 0; + bool dabStnPresent = false; + + for (auto&& programInfo : *programList) { + if (utils::hasId(programInfo.selector, IdentifierType::DAB_FREQUENCY)) { + for (auto&& config_entry : config) { + if (config_entry.frequency == utils::getId(programInfo.selector, + IdentifierType::DAB_FREQUENCY, 0)) { + freq = config_entry.frequency; + break; + } + } + // Do not trigger a tune request if the programList entry does not contain + // a valid DAB frequency + if (freq == 0) { + continue; + } + uint64_t dabSidExt = utils::getId(programInfo.selector, IdentifierType::DAB_SID_EXT, 0); + uint64_t dabEns = utils::getId(programInfo.selector, IdentifierType::DAB_ENSEMBLE, 0); + sel.primaryId = make_identifier(IdentifierType::DAB_SID_EXT, dabSidExt); + hidl_vec<ProgramIdentifier> secondaryIds = { + make_identifier(IdentifierType::DAB_ENSEMBLE, dabEns), + make_identifier(IdentifierType::DAB_FREQUENCY, freq) + }; + sel.secondaryIds = secondaryIds; + dabStnPresent = true; + break; + } + } + + if (!dabStnPresent) { + printSkipped("No DAB stations in the list, tune cannot be performed"); + return; + } std::this_thread::sleep_for(gTuneWorkaround);
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp index 6866776..b0ae20e 100644 --- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp +++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -7883,6 +7883,7 @@ } } + camera_metadata_t* staticMetadata; camera_metadata_ro_entry physicalMultiResStreamConfigs; camera_metadata_ro_entry physicalStreamConfigs; camera_metadata_ro_entry physicalMaxResolutionStreamConfigs; @@ -7901,8 +7902,9 @@ ret = subDevice->getCameraCharacteristics([&](auto status, const auto& chars) { ASSERT_EQ(Status::OK, status); - const camera_metadata_t* staticMetadata = - reinterpret_cast<const camera_metadata_t*>(chars.data()); + staticMetadata = clone_camera_metadata( + reinterpret_cast<const camera_metadata_t*>(chars.data())); + ASSERT_NE(nullptr, staticMetadata); rc = getSystemCameraKind(staticMetadata, &physSystemCameraKind); ASSERT_EQ(rc, Status::OK); // Make sure that the system camera kind of a non-hidden @@ -7936,7 +7938,9 @@ verifyCameraCharacteristics(status, chars); verifyMonochromeCharacteristics(chars, deviceVersion); - auto staticMetadata = (const camera_metadata_t*)chars.data(); + staticMetadata = clone_camera_metadata( + reinterpret_cast<const camera_metadata_t*>(chars.data())); + ASSERT_NE(nullptr, staticMetadata); retcode = find_camera_metadata_ro_entry( staticMetadata, ANDROID_CONTROL_ZOOM_RATIO_RANGE, &entry); bool subCameraHasZoomRatioRange = (0 == retcode && entry.count == 2); @@ -8064,6 +8068,7 @@ } } } + free_camera_metadata(staticMetadata); } // If a multi-resolution stream is supported, there must be at least one
diff --git a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp index 70ab7a0..2c98db8 100644 --- a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp +++ b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
@@ -1846,7 +1846,6 @@ // Generate and verify 10-bit dynamic range request TEST_P(CameraAidlTest, process10BitDynamicRangeRequest) { std::vector<std::string> cameraDeviceNames = getCameraDeviceNames(mProvider); - int64_t bufferId = 1; CameraMetadata settings; for (const auto& name : cameraDeviceNames) { @@ -1927,12 +1926,12 @@ // Stream as long as needed to fill the Hal inflight queue std::vector<CaptureRequest> requests(halStreams[0].maxBuffers); - for (int32_t frameNumber = 0; frameNumber < requests.size(); frameNumber++) { + for (int32_t requestId = 0; requestId < requests.size(); requestId++) { std::shared_ptr<InFlightRequest> inflightReq = std::make_shared<InFlightRequest>( static_cast<ssize_t>(halStreams.size()), false, supportsPartialResults, partialResultCount, std::unordered_set<std::string>(), resultQueue); - CaptureRequest& request = requests[frameNumber]; + CaptureRequest& request = requests[requestId]; std::vector<StreamBuffer>& outputBuffers = request.outputBuffers; outputBuffers.resize(halStreams.size()); @@ -1941,6 +1940,7 @@ std::vector<buffer_handle_t> graphicBuffers; graphicBuffers.reserve(halStreams.size()); + auto bufferId = requestId + 1; // Buffer id value 0 is not valid for (const auto& halStream : halStreams) { buffer_handle_t buffer_handle; if (useHalBufManager) { @@ -1959,14 +1959,13 @@ outputBuffers[k] = {halStream.id, bufferId, android::makeToAidl(buffer_handle), BufferStatus::OK, NativeHandle(), NativeHandle()}; - bufferId++; } k++; } request.inputBuffer = { -1, 0, NativeHandle(), BufferStatus::ERROR, NativeHandle(), NativeHandle()}; - request.frameNumber = frameNumber; + request.frameNumber = bufferId; request.fmqSettingsSize = 0; request.settings = settings; request.inputWidth = 0; @@ -1974,7 +1973,7 @@ { std::unique_lock<std::mutex> l(mLock); - mInflightMap[frameNumber] = inflightReq; + mInflightMap[bufferId] = inflightReq; } } @@ -1990,7 +1989,10 @@ std::vector<int32_t> {halStreams[0].id}); ASSERT_TRUE(returnStatus.isOk()); - for (int32_t frameNumber = 0; frameNumber < requests.size(); frameNumber++) { + // We are keeping frame numbers and buffer ids consistent. Buffer id value of 0 + // is used to indicate a buffer that is not present/available so buffer ids as well + // as frame numbers begin with 1. + for (int32_t frameNumber = 1; frameNumber <= requests.size(); frameNumber++) { const auto& inflightReq = mInflightMap[frameNumber]; std::unique_lock<std::mutex> l(mLock); while (!inflightReq->errorCodeValid &&
diff --git a/camera/provider/aidl/vts/camera_aidl_test.cpp b/camera/provider/aidl/vts/camera_aidl_test.cpp index 20f32bf..48816ad9 100644 --- a/camera/provider/aidl/vts/camera_aidl_test.cpp +++ b/camera/provider/aidl/vts/camera_aidl_test.cpp
@@ -167,7 +167,7 @@ ScopedAStatus physicalCameraDeviceStatusChange( const std::string&, const std::string&, ::aidl::android::hardware::camera::common::CameraDeviceStatus) override { - return ndk::ScopedAStatus(); + return ScopedAStatus::ok(); } std::vector<std::string> externalCameraDeviceNames; @@ -1181,6 +1181,7 @@ camera_metadata_ro_entry physicalMultiResStreamConfigs; camera_metadata_ro_entry physicalStreamConfigs; camera_metadata_ro_entry physicalMaxResolutionStreamConfigs; + CameraMetadata physChars; bool isUltraHighRes = false; std::unordered_set<int32_t> subCameraPrivacyTestPatterns; if (isPublicId) { @@ -1189,12 +1190,11 @@ ASSERT_TRUE(ret.isOk()); ASSERT_NE(subDevice, nullptr); - CameraMetadata subDeviceChars; - ret = subDevice->getCameraCharacteristics(&subDeviceChars); + ret = subDevice->getCameraCharacteristics(&physChars); ASSERT_TRUE(ret.isOk()); const camera_metadata_t* staticMetadata = - reinterpret_cast<const camera_metadata_t*>(subDeviceChars.metadata.data()); + reinterpret_cast<const camera_metadata_t*>(physChars.metadata.data()); retStatus = getSystemCameraKind(staticMetadata, &physSystemCameraKind); ASSERT_EQ(retStatus, Status::OK); @@ -1215,7 +1215,6 @@ getPrivacyTestPatternModes(staticMetadata, &subCameraPrivacyTestPatterns); } else { // Check camera characteristics for hidden camera id - CameraMetadata physChars; ndk::ScopedAStatus ret = device->getPhysicalCameraCharacteristics(physicalId, &physChars); ASSERT_TRUE(ret.isOk());
diff --git a/camera/provider/aidl/vts/device_cb.cpp b/camera/provider/aidl/vts/device_cb.cpp index 4698b4a..3ec96a1 100644 --- a/camera/provider/aidl/vts/device_cb.cpp +++ b/camera/provider/aidl/vts/device_cb.cpp
@@ -429,10 +429,11 @@ CameraAidlTest::InFlightRequest::StreamBufferAndTimestamp streamBufferAndTimestamp; auto outstandingBuffers = mUseHalBufManager ? mOutstandingBufferIds : request->mOutstandingBufferIds; + auto bufferId = mUseHalBufManager ? buffer.bufferId : results.frameNumber; auto outputBuffer = outstandingBuffers.empty() ? ::android::makeFromAidl(buffer.buffer) : - outstandingBuffers[buffer.streamId][buffer.bufferId]; + outstandingBuffers[buffer.streamId][bufferId]; streamBufferAndTimestamp.buffer = {buffer.streamId, - buffer.bufferId, + bufferId, outputBuffer, buffer.status, ::android::makeFromAidl(buffer.acquireFence),
diff --git a/drm/aidl/vts/drm_hal_common.cpp b/drm/aidl/vts/drm_hal_common.cpp index 7de8167..f5ef0e7 100644 --- a/drm/aidl/vts/drm_hal_common.cpp +++ b/drm/aidl/vts/drm_hal_common.cpp
@@ -187,6 +187,12 @@ auto svc = GetParamService(); const string drmInstance = HalFullName(kDrmIface, svc); + if (!vendorModule) { + ASSERT_NE(drmInstance, HalFullName(kDrmIface, "widevine")) << "Widevine requires vendor module."; + ASSERT_NE(drmInstance, HalFullName(kDrmIface, "clearkey")) << "Clearkey requires vendor module."; + GTEST_SKIP() << "No vendor module installed"; + } + if (drmInstance.find("IDrmFactory") != std::string::npos) { drmFactory = IDrmFactory::fromBinder( ::ndk::SpAIBinder(AServiceManager_waitForService(drmInstance.c_str()))); @@ -195,12 +201,6 @@ cryptoPlugin = createCryptoPlugin(); } - if (!vendorModule) { - ASSERT_NE(drmInstance, "widevine") << "Widevine requires vendor module."; - ASSERT_NE(drmInstance, "clearkey") << "Clearkey requires vendor module."; - GTEST_SKIP() << "No vendor module installed"; - } - ASSERT_EQ(HalBaseName(drmInstance), vendorModule->getServiceName()); contentConfigurations = vendorModule->getContentConfigurations();
diff --git a/drm/aidl/vts/drm_hal_test.cpp b/drm/aidl/vts/drm_hal_test.cpp index 14b3acf..847a4dc 100644 --- a/drm/aidl/vts/drm_hal_test.cpp +++ b/drm/aidl/vts/drm_hal_test.cpp
@@ -198,6 +198,18 @@ EXPECT_NE(keySetId, keySetId2.keySetId); } + for (auto level : {kHwSecureAll, kSwSecureCrypto}) { + Status err = Status::OK; + auto sid = openSession(level, &err); + if (err == Status::OK) { + closeSession(sid); + } else if (err == Status::ERROR_DRM_CANNOT_HANDLE) { + continue; + } else { + EXPECT_EQ(Status::ERROR_DRM_NOT_PROVISIONED, err); + provision(); + } + } ret = drmPlugin->removeOfflineLicense({keySetId}); EXPECT_TXN(ret); EXPECT_EQ(Status::BAD_VALUE, DrmErr(ret));
diff --git a/gnss/aidl/android/hardware/gnss/IGnss.aidl b/gnss/aidl/android/hardware/gnss/IGnss.aidl index f0b583d..aaafe7f 100644 --- a/gnss/aidl/android/hardware/gnss/IGnss.aidl +++ b/gnss/aidl/android/hardware/gnss/IGnss.aidl
@@ -104,7 +104,7 @@ * * The framework calls this method to instruct the GPS engine to prepare for serving requests * from the framework. The GNSS HAL implementation must respond to all GNSS requests from the - * framework upon successful return from this method until cleanup() method is called to + * framework upon successful return from this method until close() method is called to * close this interface. * * @param callback Callback interface for IGnss.
diff --git a/gnss/aidl/vts/gnss_hal_test.cpp b/gnss/aidl/vts/gnss_hal_test.cpp index 0e1218e..3907f57 100644 --- a/gnss/aidl/vts/gnss_hal_test.cpp +++ b/gnss/aidl/vts/gnss_hal_test.cpp
@@ -107,6 +107,17 @@ } } +void GnssHalTest::TearDown() { + GnssHalTestTemplate<IGnss_V2_1>::TearDown(); + if (aidl_gnss_hal_ != nullptr) { + aidl_gnss_hal_->close(); + aidl_gnss_hal_ = nullptr; + } + + // Set to nullptr to destruct the callback event queues and warn of any unprocessed events. + aidl_gnss_cb_ = nullptr; +} + void GnssHalTest::CheckLocation(const GnssLocation& location, bool check_speed) { Utils::checkLocation(location, check_speed, /* check_more_accuracies= */ true); }
diff --git a/gnss/aidl/vts/gnss_hal_test.h b/gnss/aidl/vts/gnss_hal_test.h index 645fc82..c49c1b9 100644 --- a/gnss/aidl/vts/gnss_hal_test.h +++ b/gnss/aidl/vts/gnss_hal_test.h
@@ -64,6 +64,7 @@ virtual void SetUp() override; virtual void SetUpGnssCallback() override; + virtual void TearDown() override; void CheckLocation(const android::hardware::gnss::GnssLocation& location, const bool check_speed);
diff --git a/gnss/aidl/vts/gnss_hal_test_cases.cpp b/gnss/aidl/vts/gnss_hal_test_cases.cpp index 3696233..c7fc32a 100644 --- a/gnss/aidl/vts/gnss_hal_test_cases.cpp +++ b/gnss/aidl/vts/gnss_hal_test_cases.cpp
@@ -526,6 +526,11 @@ EXPECT_EQ(gnssPowerIndicationCallback->capabilities_cbq_.calledCount(), 1); + if (gnssPowerIndicationCallback->last_capabilities_ == 0) { + // Skipping the test since GnssPowerIndication is not supported. + return; + } + // Request and verify a GnssPowerStats is received gnssPowerIndicationCallback->gnss_power_stats_cbq_.reset(); iGnssPowerIndication->requestGnssPowerStats();
diff --git a/graphics/composer/aidl/vts/VtsComposerClient.cpp b/graphics/composer/aidl/vts/VtsComposerClient.cpp index 2b60703..dd4161e 100644 --- a/graphics/composer/aidl/vts/VtsComposerClient.cpp +++ b/graphics/composer/aidl/vts/VtsComposerClient.cpp
@@ -393,14 +393,31 @@ return {std::move(configs.first), vtsDisplays}; } for (int config : configs.second) { - auto status = updateDisplayProperties(&vtsDisplay, config); + auto status = addDisplayConfig(&vtsDisplay, config); if (!status.isOk()) { - ALOGE("Unable to get the displays for test, failed to update the properties " + ALOGE("Unable to get the displays for test, failed to add config " "for display %" PRId64, display); return {std::move(status), vtsDisplays}; } } + + auto config = getActiveConfig(display); + if (!config.first.isOk()) { + ALOGE("Unable to get the displays for test, failed to get active config " + "for display %" PRId64, display); + return {std::move(config.first), vtsDisplays}; + } + + auto status = updateDisplayProperties(&vtsDisplay, config.second); + if (!status.isOk()) { + ALOGE("Unable to get the displays for test, " + "failed to update the properties " + "for display %" PRId64, + display); + return {std::move(status), vtsDisplays}; + } + vtsDisplays.emplace_back(vtsDisplay); addDisplayToDisplayResources(display, /*isVirtual*/ false); } @@ -409,7 +426,7 @@ } } -ScopedAStatus VtsComposerClient::updateDisplayProperties(VtsDisplay* vtsDisplay, int32_t config) { +ScopedAStatus VtsComposerClient::addDisplayConfig(VtsDisplay* vtsDisplay, int32_t config) { const auto width = getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::WIDTH); const auto height = @@ -420,7 +437,6 @@ getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::CONFIG_GROUP); if (width.first.isOk() && height.first.isOk() && vsyncPeriod.first.isOk() && configGroup.first.isOk()) { - vtsDisplay->setDimensions(width.second, height.second); vtsDisplay->addDisplayConfig(config, {vsyncPeriod.second, configGroup.second}); return ScopedAStatus::ok(); } @@ -431,6 +447,21 @@ return ScopedAStatus::fromServiceSpecificError(IComposerClient::EX_BAD_CONFIG); } +ScopedAStatus VtsComposerClient::updateDisplayProperties(VtsDisplay* vtsDisplay, int32_t config) { + const auto width = + getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::WIDTH); + const auto height = + getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::HEIGHT); + if (width.first.isOk() && height.first.isOk()) { + vtsDisplay->setDimensions(width.second, height.second); + return ScopedAStatus::ok(); + } + + LOG(ERROR) << "Failed to update display property for width: " << width.first.isOk() + << ", height: " << height.first.isOk(); + return ScopedAStatus::fromServiceSpecificError(IComposerClient::EX_BAD_CONFIG); +} + ScopedAStatus VtsComposerClient::addDisplayToDisplayResources(int64_t display, bool isVirtual) { if (mDisplayResources.insert({display, DisplayResource(isVirtual)}).second) { return ScopedAStatus::ok(); @@ -488,10 +519,13 @@ } bool VtsComposerClient::destroyAllLayers() { - for (const auto& it : mDisplayResources) { - const auto& [display, resource] = it; + std::unordered_map<int64_t, DisplayResource> physicalDisplays; + while (!mDisplayResources.empty()) { + const auto& it = mDisplayResources.begin(); + const auto& [display, resource] = *it; - for (auto layer : resource.layers) { + while (!resource.layers.empty()) { + auto layer = *resource.layers.begin(); const auto status = destroyLayer(display, layer); if (!status.isOk()) { ALOGE("Unable to destroy all the layers, failed at layer %" PRId64 " with error %s", @@ -507,8 +541,12 @@ status.getDescription().c_str()); return false; } + } else { + auto extractIter = mDisplayResources.extract(it); + physicalDisplays.insert(std::move(extractIter)); } } + mDisplayResources.swap(physicalDisplays); mDisplayResources.clear(); return true; }
diff --git a/graphics/composer/aidl/vts/VtsComposerClient.h b/graphics/composer/aidl/vts/VtsComposerClient.h index 3625c8c..74c5da5 100644 --- a/graphics/composer/aidl/vts/VtsComposerClient.h +++ b/graphics/composer/aidl/vts/VtsComposerClient.h
@@ -173,6 +173,7 @@ std::pair<ScopedAStatus, std::vector<VtsDisplay>> getDisplays(); private: + ScopedAStatus addDisplayConfig(VtsDisplay* vtsDisplay, int32_t config); ScopedAStatus updateDisplayProperties(VtsDisplay* vtsDisplay, int32_t config); ScopedAStatus addDisplayToDisplayResources(int64_t display, bool isVirtual);
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 fb5048a..728cc91 100644 --- a/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp +++ b/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp
@@ -4866,6 +4866,11 @@ if (vsr_api_level < 33) { GTEST_SKIP() << "Applies only to VSR API level 33, this device is: " << vsr_api_level; } + char soc_model[PROPERTY_VALUE_MAX] = {}; + property_get("ro.soc.model", soc_model, ""); + if (!strcmp(soc_model, "SM8550")) { + GTEST_SKIP() << "Skip QTI SM8550 chipset, the SOC model of this device is: " << soc_model; + } FAIL() << "VSR 13+ requires KeyMint version 2"; }
diff --git a/neuralnetworks/1.0/vts/functional/Android.bp b/neuralnetworks/1.0/vts/functional/Android.bp index 29b31d2..a41f37f 100644 --- a/neuralnetworks/1.0/vts/functional/Android.bp +++ b/neuralnetworks/1.0/vts/functional/Android.bp
@@ -90,7 +90,6 @@ "libneuralnetworks_headers", ], test_suites: [ - "general-tests", "vts", ], }
diff --git a/neuralnetworks/1.0/vts/functional/ValidateModel.cpp b/neuralnetworks/1.0/vts/functional/ValidateModel.cpp index 5ffbd43..34bc962 100644 --- a/neuralnetworks/1.0/vts/functional/ValidateModel.cpp +++ b/neuralnetworks/1.0/vts/functional/ValidateModel.cpp
@@ -232,26 +232,24 @@ // currently 1Mb, which is shared by all transactions in progress // for the process." // -// Will our representation fit under this limit? There are two complications: +// Will our representation fit under this limit? There are three complications: // - Our representation size is just approximate (see sizeForBinder()). -// - This object may not be the only occupant of the Binder transaction buffer. +// - This object may not be the only occupant of the Binder transaction buffer +// (although our VTS test suite should not be putting multiple objects in the +// buffer at once). +// - IBinder.MAX_IPC_SIZE recommends limiting a transaction to 64 * 1024 bytes. // So we'll be very conservative: We want the representation size to be no -// larger than half the transaction buffer size. +// larger than half the recommended limit. // // If our representation grows large enough that it still fits within // the transaction buffer but combined with other transactions may // exceed the buffer size, then we may see intermittent HAL transport // errors. static bool exceedsBinderSizeLimit(size_t representationSize) { - // Instead of using this fixed buffer size, we might instead be able to use - // ProcessState::self()->getMmapSize(). However, this has a potential - // problem: The binder/mmap size of the current process does not necessarily - // indicate the binder/mmap size of the service (i.e., the other process). - // The only way it would be a good indication is if both the current process - // and the service use the default size. - static const size_t kHalfBufferSize = 1024 * 1024 / 2; + // There is no C++ API to retrieve the value of the Java variable IBinder.MAX_IPC_SIZE. + static const size_t kHalfMaxIPCSize = 64 * 1024 / 2; - return representationSize > kHalfBufferSize; + return representationSize > kHalfMaxIPCSize; } ///////////////////////// VALIDATE EXECUTION ORDER ////////////////////////////
diff --git a/neuralnetworks/1.1/vts/functional/Android.bp b/neuralnetworks/1.1/vts/functional/Android.bp index e9d4b76..7c1c118 100644 --- a/neuralnetworks/1.1/vts/functional/Android.bp +++ b/neuralnetworks/1.1/vts/functional/Android.bp
@@ -58,7 +58,6 @@ "libneuralnetworks_headers", ], test_suites: [ - "general-tests", "vts", ], }
diff --git a/neuralnetworks/1.1/vts/functional/ValidateModel.cpp b/neuralnetworks/1.1/vts/functional/ValidateModel.cpp index 1f4e4ed..dbabbaf 100644 --- a/neuralnetworks/1.1/vts/functional/ValidateModel.cpp +++ b/neuralnetworks/1.1/vts/functional/ValidateModel.cpp
@@ -252,26 +252,24 @@ // currently 1Mb, which is shared by all transactions in progress // for the process." // -// Will our representation fit under this limit? There are two complications: +// Will our representation fit under this limit? There are three complications: // - Our representation size is just approximate (see sizeForBinder()). -// - This object may not be the only occupant of the Binder transaction buffer. +// - This object may not be the only occupant of the Binder transaction buffer +// (although our VTS test suite should not be putting multiple objects in the +// buffer at once). +// - IBinder.MAX_IPC_SIZE recommends limiting a transaction to 64 * 1024 bytes. // So we'll be very conservative: We want the representation size to be no -// larger than half the transaction buffer size. +// larger than half the recommended limit. // // If our representation grows large enough that it still fits within // the transaction buffer but combined with other transactions may // exceed the buffer size, then we may see intermittent HAL transport // errors. static bool exceedsBinderSizeLimit(size_t representationSize) { - // Instead of using this fixed buffer size, we might instead be able to use - // ProcessState::self()->getMmapSize(). However, this has a potential - // problem: The binder/mmap size of the current process does not necessarily - // indicate the binder/mmap size of the service (i.e., the other process). - // The only way it would be a good indication is if both the current process - // and the service use the default size. - static const size_t kHalfBufferSize = 1024 * 1024 / 2; + // There is no C++ API to retrieve the value of the Java variable IBinder.MAX_IPC_SIZE. + static const size_t kHalfMaxIPCSize = 64 * 1024 / 2; - return representationSize > kHalfBufferSize; + return representationSize > kHalfMaxIPCSize; } ///////////////////////// VALIDATE EXECUTION ORDER ////////////////////////////
diff --git a/neuralnetworks/1.2/utils/src/BurstUtils.cpp b/neuralnetworks/1.2/utils/src/BurstUtils.cpp index b589c46..c4c096d 100644 --- a/neuralnetworks/1.2/utils/src/BurstUtils.cpp +++ b/neuralnetworks/1.2/utils/src/BurstUtils.cpp
@@ -190,12 +190,13 @@ size_t index = 0; // validate packet information - if (data.size() == 0 || data[index].getDiscriminator() != discriminator::packetInformation) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::packetInformation) { return NN_ERROR() << "FMQ Request packet ill-formed"; } // unpackage packet information - const FmqRequestDatum::PacketInformation& packetInfo = data[index].packetInformation(); + const FmqRequestDatum::PacketInformation& packetInfo = data.at(index).packetInformation(); index++; const uint32_t packetSize = packetInfo.packetSize; const uint32_t numberOfInputOperands = packetInfo.numberOfInputOperands; @@ -212,13 +213,14 @@ inputs.reserve(numberOfInputOperands); for (size_t operand = 0; operand < numberOfInputOperands; ++operand) { // validate input operand information - if (data[index].getDiscriminator() != discriminator::inputOperandInformation) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::inputOperandInformation) { return NN_ERROR() << "FMQ Request packet ill-formed"; } // unpackage operand information const FmqRequestDatum::OperandInformation& operandInfo = - data[index].inputOperandInformation(); + data.at(index).inputOperandInformation(); index++; const bool hasNoValue = operandInfo.hasNoValue; const V1_0::DataLocation location = operandInfo.location; @@ -229,12 +231,13 @@ dimensions.reserve(numberOfDimensions); for (size_t i = 0; i < numberOfDimensions; ++i) { // validate dimension - if (data[index].getDiscriminator() != discriminator::inputOperandDimensionValue) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::inputOperandDimensionValue) { return NN_ERROR() << "FMQ Request packet ill-formed"; } // unpackage dimension - const uint32_t dimension = data[index].inputOperandDimensionValue(); + const uint32_t dimension = data.at(index).inputOperandDimensionValue(); index++; // store result @@ -251,13 +254,14 @@ outputs.reserve(numberOfOutputOperands); for (size_t operand = 0; operand < numberOfOutputOperands; ++operand) { // validate output operand information - if (data[index].getDiscriminator() != discriminator::outputOperandInformation) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::outputOperandInformation) { return NN_ERROR() << "FMQ Request packet ill-formed"; } // unpackage operand information const FmqRequestDatum::OperandInformation& operandInfo = - data[index].outputOperandInformation(); + data.at(index).outputOperandInformation(); index++; const bool hasNoValue = operandInfo.hasNoValue; const V1_0::DataLocation location = operandInfo.location; @@ -268,12 +272,13 @@ dimensions.reserve(numberOfDimensions); for (size_t i = 0; i < numberOfDimensions; ++i) { // validate dimension - if (data[index].getDiscriminator() != discriminator::outputOperandDimensionValue) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::outputOperandDimensionValue) { return NN_ERROR() << "FMQ Request packet ill-formed"; } // unpackage dimension - const uint32_t dimension = data[index].outputOperandDimensionValue(); + const uint32_t dimension = data.at(index).outputOperandDimensionValue(); index++; // store result @@ -290,12 +295,13 @@ slots.reserve(numberOfPools); for (size_t pool = 0; pool < numberOfPools; ++pool) { // validate input operand information - if (data[index].getDiscriminator() != discriminator::poolIdentifier) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::poolIdentifier) { return NN_ERROR() << "FMQ Request packet ill-formed"; } // unpackage operand information - const int32_t poolId = data[index].poolIdentifier(); + const int32_t poolId = data.at(index).poolIdentifier(); index++; // store result @@ -303,17 +309,17 @@ } // validate measureTiming - if (data[index].getDiscriminator() != discriminator::measureTiming) { + if (index >= data.size() || data.at(index).getDiscriminator() != discriminator::measureTiming) { return NN_ERROR() << "FMQ Request packet ill-formed"; } // unpackage measureTiming - const V1_2::MeasureTiming measure = data[index].measureTiming(); + const V1_2::MeasureTiming measure = data.at(index).measureTiming(); index++; // validate packet information if (index != packetSize) { - return NN_ERROR() << "FMQ Result packet ill-formed"; + return NN_ERROR() << "FMQ Request packet ill-formed"; } // return request @@ -328,12 +334,13 @@ size_t index = 0; // validate packet information - if (data.size() == 0 || data[index].getDiscriminator() != discriminator::packetInformation) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::packetInformation) { return NN_ERROR() << "FMQ Result packet ill-formed"; } // unpackage packet information - const FmqResultDatum::PacketInformation& packetInfo = data[index].packetInformation(); + const FmqResultDatum::PacketInformation& packetInfo = data.at(index).packetInformation(); index++; const uint32_t packetSize = packetInfo.packetSize; const V1_0::ErrorStatus errorStatus = packetInfo.errorStatus; @@ -349,12 +356,13 @@ outputShapes.reserve(numberOfOperands); for (size_t operand = 0; operand < numberOfOperands; ++operand) { // validate operand information - if (data[index].getDiscriminator() != discriminator::operandInformation) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::operandInformation) { return NN_ERROR() << "FMQ Result packet ill-formed"; } // unpackage operand information - const FmqResultDatum::OperandInformation& operandInfo = data[index].operandInformation(); + const FmqResultDatum::OperandInformation& operandInfo = data.at(index).operandInformation(); index++; const bool isSufficient = operandInfo.isSufficient; const uint32_t numberOfDimensions = operandInfo.numberOfDimensions; @@ -364,12 +372,13 @@ dimensions.reserve(numberOfDimensions); for (size_t i = 0; i < numberOfDimensions; ++i) { // validate dimension - if (data[index].getDiscriminator() != discriminator::operandDimensionValue) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::operandDimensionValue) { return NN_ERROR() << "FMQ Result packet ill-formed"; } // unpackage dimension - const uint32_t dimension = data[index].operandDimensionValue(); + const uint32_t dimension = data.at(index).operandDimensionValue(); index++; // store result @@ -381,12 +390,13 @@ } // validate execution timing - if (data[index].getDiscriminator() != discriminator::executionTiming) { + if (index >= data.size() || + data.at(index).getDiscriminator() != discriminator::executionTiming) { return NN_ERROR() << "FMQ Result packet ill-formed"; } // unpackage execution timing - const V1_2::Timing timing = data[index].executionTiming(); + const V1_2::Timing timing = data.at(index).executionTiming(); index++; // validate packet information
diff --git a/neuralnetworks/1.2/vts/functional/Android.bp b/neuralnetworks/1.2/vts/functional/Android.bp index 2177924..7e4b5bb 100644 --- a/neuralnetworks/1.2/vts/functional/Android.bp +++ b/neuralnetworks/1.2/vts/functional/Android.bp
@@ -85,7 +85,6 @@ "libneuralnetworks_headers", ], test_suites: [ - "general-tests", "vts", ], }
diff --git a/neuralnetworks/1.2/vts/functional/ValidateModel.cpp b/neuralnetworks/1.2/vts/functional/ValidateModel.cpp index 3375602..d7cd6f5 100644 --- a/neuralnetworks/1.2/vts/functional/ValidateModel.cpp +++ b/neuralnetworks/1.2/vts/functional/ValidateModel.cpp
@@ -291,26 +291,24 @@ // currently 1Mb, which is shared by all transactions in progress // for the process." // -// Will our representation fit under this limit? There are two complications: +// Will our representation fit under this limit? There are three complications: // - Our representation size is just approximate (see sizeForBinder()). -// - This object may not be the only occupant of the Binder transaction buffer. +// - This object may not be the only occupant of the Binder transaction buffer +// (although our VTS test suite should not be putting multiple objects in the +// buffer at once). +// - IBinder.MAX_IPC_SIZE recommends limiting a transaction to 64 * 1024 bytes. // So we'll be very conservative: We want the representation size to be no -// larger than half the transaction buffer size. +// larger than half the recommended limit. // // If our representation grows large enough that it still fits within // the transaction buffer but combined with other transactions may // exceed the buffer size, then we may see intermittent HAL transport // errors. static bool exceedsBinderSizeLimit(size_t representationSize) { - // Instead of using this fixed buffer size, we might instead be able to use - // ProcessState::self()->getMmapSize(). However, this has a potential - // problem: The binder/mmap size of the current process does not necessarily - // indicate the binder/mmap size of the service (i.e., the other process). - // The only way it would be a good indication is if both the current process - // and the service use the default size. - static const size_t kHalfBufferSize = 1024 * 1024 / 2; + // There is no C++ API to retrieve the value of the Java variable IBinder.MAX_IPC_SIZE. + static const size_t kHalfMaxIPCSize = 64 * 1024 / 2; - return representationSize > kHalfBufferSize; + return representationSize > kHalfMaxIPCSize; } ///////////////////////// VALIDATE EXECUTION ORDER ////////////////////////////
diff --git a/neuralnetworks/1.3/vts/functional/Android.bp b/neuralnetworks/1.3/vts/functional/Android.bp index 9fa0f0a..07071cc 100644 --- a/neuralnetworks/1.3/vts/functional/Android.bp +++ b/neuralnetworks/1.3/vts/functional/Android.bp
@@ -92,7 +92,6 @@ "libneuralnetworks_headers", ], test_suites: [ - "general-tests", "vts", ], }
diff --git a/neuralnetworks/1.3/vts/functional/ValidateModel.cpp b/neuralnetworks/1.3/vts/functional/ValidateModel.cpp index 849ef7b..d8c7cd1 100644 --- a/neuralnetworks/1.3/vts/functional/ValidateModel.cpp +++ b/neuralnetworks/1.3/vts/functional/ValidateModel.cpp
@@ -308,26 +308,24 @@ // currently 1Mb, which is shared by all transactions in progress // for the process." // -// Will our representation fit under this limit? There are two complications: +// Will our representation fit under this limit? There are three complications: // - Our representation size is just approximate (see sizeForBinder()). -// - This object may not be the only occupant of the Binder transaction buffer. +// - This object may not be the only occupant of the Binder transaction buffer +// (although our VTS test suite should not be putting multiple objects in the +// buffer at once). +// - IBinder.MAX_IPC_SIZE recommends limiting a transaction to 64 * 1024 bytes. // So we'll be very conservative: We want the representation size to be no -// larger than half the transaction buffer size. +// larger than half the recommended limit. // // If our representation grows large enough that it still fits within // the transaction buffer but combined with other transactions may // exceed the buffer size, then we may see intermittent HAL transport // errors. static bool exceedsBinderSizeLimit(size_t representationSize) { - // Instead of using this fixed buffer size, we might instead be able to use - // ProcessState::self()->getMmapSize(). However, this has a potential - // problem: The binder/mmap size of the current process does not necessarily - // indicate the binder/mmap size of the service (i.e., the other process). - // The only way it would be a good indication is if both the current process - // and the service use the default size. - static const size_t kHalfBufferSize = 1024 * 1024 / 2; + // There is no C++ API to retrieve the value of the Java variable IBinder.MAX_IPC_SIZE. + static const size_t kHalfMaxIPCSize = 64 * 1024 / 2; - return representationSize > kHalfBufferSize; + return representationSize > kHalfMaxIPCSize; } ///////////////////////// VALIDATE EXECUTION ORDER ////////////////////////////
diff --git a/neuralnetworks/TEST_MAPPING b/neuralnetworks/TEST_MAPPING index d296828..3218206 100644 --- a/neuralnetworks/TEST_MAPPING +++ b/neuralnetworks/TEST_MAPPING
@@ -17,54 +17,10 @@ }, { "name": "neuralnetworks_utils_hal_aidl_test" - }, - { - "name": "VtsHalNeuralnetworksV1_0TargetTest", - "options": [ - { - // Do not use any sample driver except sample-all in order to reduce - // testing time. The other sample drivers (fast-float, quant, etc.) - // are subsets of sample-all. - "include-filter": "-*sample_float_fast*:*sample_float_slow*:*sample_minimal*:*sample_quant*" - } - ] - }, - { - "name": "VtsHalNeuralnetworksV1_1TargetTest", - "options": [ - { - // Do not use any sample driver except sample-all in order to reduce - // testing time. The other sample drivers (fast-float, quant, etc.) - // are subsets of sample-all. - "include-filter": "-*sample_float_fast*:*sample_float_slow*:*sample_minimal*:*sample_quant*" - } - ] } ], "presubmit-large": [ { - "name": "VtsHalNeuralnetworksV1_2TargetTest", - "options": [ - { - // Do not use any sample driver except sample-all in order to reduce - // testing time. The other sample drivers (fast-float, quant, etc.) - // are subsets of sample-all. - "include-filter": "-*sample_float_fast*:*sample_float_slow*:*sample_minimal*:*sample_quant*" - } - ] - }, - { - "name": "VtsHalNeuralnetworksV1_3TargetTest", - "options": [ - { - // Do not use any sample driver except sample-all in order to reduce - // testing time. The other sample drivers (fast-float, quant, etc.) - // are subsets of sample-all. - "include-filter": "-*sample_float_fast*:*sample_float_slow*:*sample_minimal*:*sample_quant*" - } - ] - }, - { "name": "VtsHalNeuralnetworksTargetTest", "options": [ {
diff --git a/neuralnetworks/aidl/vts/functional/ValidateModel.cpp b/neuralnetworks/aidl/vts/functional/ValidateModel.cpp index 060434e..d7baf19 100644 --- a/neuralnetworks/aidl/vts/functional/ValidateModel.cpp +++ b/neuralnetworks/aidl/vts/functional/ValidateModel.cpp
@@ -344,26 +344,24 @@ // currently 1Mb, which is shared by all transactions in progress // for the process." // -// Will our representation fit under this limit? There are two complications: +// Will our representation fit under this limit? There are three complications: // - Our representation size is just approximate (see sizeForBinder()). -// - This object may not be the only occupant of the Binder transaction buffer. +// - This object may not be the only occupant of the Binder transaction buffer +// (although our VTS test suite should not be putting multiple objects in the +// buffer at once). +// - IBinder.MAX_IPC_SIZE recommends limiting a transaction to 64 * 1024 bytes. // So we'll be very conservative: We want the representation size to be no -// larger than half the transaction buffer size. +// larger than half the recommended limit. // // If our representation grows large enough that it still fits within // the transaction buffer but combined with other transactions may // exceed the buffer size, then we may see intermittent HAL transport // errors. static bool exceedsBinderSizeLimit(size_t representationSize) { - // Instead of using this fixed buffer size, we might instead be able to use - // ProcessState::self()->getMmapSize(). However, this has a potential - // problem: The binder/mmap size of the current process does not necessarily - // indicate the binder/mmap size of the service (i.e., the other process). - // The only way it would be a good indication is if both the current process - // and the service use the default size. - static const size_t kHalfBufferSize = 1024 * 1024 / 2; + // There is no C++ API to retrieve the value of the Java variable IBinder.MAX_IPC_SIZE. + static const size_t kHalfMaxIPCSize = 64 * 1024 / 2; - return representationSize > kHalfBufferSize; + return representationSize > kHalfMaxIPCSize; } ///////////////////////// VALIDATE EXECUTION ORDER ////////////////////////////
diff --git a/radio/aidl/vts/radio_aidl_hal_utils.cpp b/radio/aidl/vts/radio_aidl_hal_utils.cpp index efc4f26..6ed8e7d 100644 --- a/radio/aidl/vts/radio_aidl_hal_utils.cpp +++ b/radio/aidl/vts/radio_aidl_hal_utils.cpp
@@ -92,6 +92,10 @@ return testing::checkSubstringInCommandOutput("getprop persist.radio.multisim.config", "dsds"); } +bool isDsDaEnabled() { + return testing::checkSubstringInCommandOutput("getprop persist.radio.multisim.config", "dsda"); +} + bool isTsTsEnabled() { return testing::checkSubstringInCommandOutput("getprop persist.radio.multisim.config", "tsts"); }
diff --git a/radio/aidl/vts/radio_aidl_hal_utils.h b/radio/aidl/vts/radio_aidl_hal_utils.h index 47976b9..8170a01 100644 --- a/radio/aidl/vts/radio_aidl_hal_utils.h +++ b/radio/aidl/vts/radio_aidl_hal_utils.h
@@ -104,6 +104,11 @@ bool isDsDsEnabled(); /* + * Check if device is in DSDA (Dual SIM Dual Active). + */ +bool isDsDaEnabled(); + +/* * Check if device is in TSTS (Triple SIM Triple Standby). */ bool isTsTsEnabled();
diff --git a/radio/aidl/vts/radio_config_test.cpp b/radio/aidl/vts/radio_config_test.cpp index 258b172..c979d28 100644 --- a/radio/aidl/vts/radio_config_test.cpp +++ b/radio/aidl/vts/radio_config_test.cpp
@@ -176,7 +176,7 @@ slotPortMapping.physicalSlotId = -1; slotPortMapping.portId = -1; std::vector<SlotPortMapping> slotPortMappingList = {slotPortMapping}; - if (isDsDsEnabled()) { + if (isDsDsEnabled() || isDsDaEnabled()) { slotPortMappingList.push_back(slotPortMapping); } else if (isTsTsEnabled()) { slotPortMappingList.push_back(slotPortMapping); @@ -252,7 +252,7 @@ } if (isSsSsEnabled()) { EXPECT_EQ(1, simCount); - } else if (isDsDsEnabled()) { + } else if (isDsDsEnabled() || isDsDaEnabled()) { EXPECT_EQ(2, simCount); } else if (isTsTsEnabled()) { EXPECT_EQ(3, simCount);
diff --git a/security/keymint/aidl/vts/functional/Android.bp b/security/keymint/aidl/vts/functional/Android.bp index ef5b0bd..f30e29c 100644 --- a/security/keymint/aidl/vts/functional/Android.bp +++ b/security/keymint/aidl/vts/functional/Android.bp
@@ -31,8 +31,10 @@ "VtsHalTargetTestDefaults", ], shared_libs: [ + "libbinder", "libbinder_ndk", "libcrypto", + "packagemanager_aidl-cpp", ], static_libs: [ "android.hardware.security.secureclock-V1-ndk",
diff --git a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp index 46db4f0..20c0bf5 100644 --- a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp +++ b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
@@ -23,6 +23,7 @@ #include <android-base/logging.h> #include <android/binder_manager.h> +#include <android/content/pm/IPackageManagerNative.h> #include <cppbor_parse.h> #include <cutils/properties.h> #include <gmock/gmock.h> @@ -1923,6 +1924,29 @@ *signingKey = std::move(pubKey); } +// Check whether the given named feature is available. +bool check_feature(const std::string& name) { + ::android::sp<::android::IServiceManager> sm(::android::defaultServiceManager()); + ::android::sp<::android::IBinder> binder(sm->getService(::android::String16("package_native"))); + if (binder == nullptr) { + GTEST_LOG_(ERROR) << "getService package_native failed"; + return false; + } + ::android::sp<::android::content::pm::IPackageManagerNative> packageMgr = + ::android::interface_cast<::android::content::pm::IPackageManagerNative>(binder); + if (packageMgr == nullptr) { + GTEST_LOG_(ERROR) << "Cannot find package manager"; + return false; + } + bool hasFeature = false; + auto status = packageMgr->hasSystemFeature(::android::String16(name.c_str()), 0, &hasFeature); + if (!status.isOk()) { + GTEST_LOG_(ERROR) << "hasSystemFeature('" << name << "') failed: " << status; + return false; + } + return hasFeature; +} + } // namespace test } // namespace aidl::android::hardware::security::keymint
diff --git a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h index 8f9df24..7d3bc30 100644 --- a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h +++ b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h
@@ -386,6 +386,7 @@ void check_maced_pubkey(const MacedPublicKey& macedPubKey, bool testMode, vector<uint8_t>* payload_value); void p256_pub_key(const vector<uint8_t>& coseKeyData, EVP_PKEY_Ptr* signingKey); +bool check_feature(const std::string& name); AuthorizationSet HwEnforcedAuthorizations(const vector<KeyCharacteristics>& key_characteristics); AuthorizationSet SwEnforcedAuthorizations(const vector<KeyCharacteristics>& key_characteristics);
diff --git a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl index 6ec8d57..b9ac7b9 100644 --- a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl +++ b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
@@ -43,10 +43,12 @@ CCC_SUPPORTED_UWB_CONFIGS = 165, CCC_SUPPORTED_PULSE_SHAPE_COMBOS = 166, CCC_SUPPORTED_RAN_MULTIPLIER = 167, + CCC_SUPPORTED_MAX_RANGING_SESSION_NUMBER = 168, SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING = 227, SUPPORTED_MIN_RANGING_INTERVAL_MS = 228, SUPPORTED_RANGE_DATA_NTF_CONFIG = 229, SUPPORTED_RSSI_REPORTING = 230, SUPPORTED_DIAGNOSTICS = 231, SUPPORTED_MIN_SLOT_DURATION = 232, + SUPPORTED_MAX_RANGING_SESSION_NUMBER = 233, }
diff --git a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl index b182f9d..a3bb7a6 100644 --- a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl +++ b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
@@ -139,6 +139,11 @@ /** Int value for indicating supported ran multiplier */ CCC_SUPPORTED_RAN_MULTIPLIER = 0xA7, + /** + * Int value to indicate supported max number of ccc ranging sessions + */ + CCC_SUPPORTED_MAX_RANGING_SESSION_NUMBER = 0xA8, + /********************************************* * FIRA specific ********************************************/ @@ -184,4 +189,9 @@ * 4 byte value to indicate supported min slot duration in ms. */ SUPPORTED_MIN_SLOT_DURATION = 0xE8, + + /** + * Int value to indicate supported max number of fira ranging sessions + */ + SUPPORTED_MAX_RANGING_SESSION_NUMBER = 0xE9, }
diff --git a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp index e6e61cf..02f8209 100644 --- a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp +++ b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
@@ -66,7 +66,7 @@ bool configureChipToSupportIfaceTypeInternal(const sp<IWifiChip>& wifi_chip, IfaceType type, ChipModeId* configured_mode_id) { - if (!configured_mode_id) { + if (!configured_mode_id || !wifi_chip.get()) { return false; } const auto& status_and_modes = HIDL_INVOKE(wifi_chip, getAvailableModes);
diff --git a/wifi/1.4/vts/functional/wifi_hidl_test_utils_1_4.h b/wifi/1.4/vts/functional/wifi_hidl_test_utils_1_4.h index a2c5815..ca7b57a 100644 --- a/wifi/1.4/vts/functional/wifi_hidl_test_utils_1_4.h +++ b/wifi/1.4/vts/functional/wifi_hidl_test_utils_1_4.h
@@ -28,6 +28,6 @@ // These helper functions should be modified to return vectors if we support // multiple instances. android::sp<android::hardware::wifi::V1_4::IWifiChip> getWifiChip_1_4( - const std::string& instance_name); + const std::string& instance_name); android::sp<android::hardware::wifi::V1_4::IWifiApIface> getWifiApIface_1_4( - const std::string& instance_name); + const std::string& instance_name);
diff --git a/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp b/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp index 2fade4d..5c59819 100644 --- a/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp +++ b/wifi/hostapd/1.2/vts/functional/hostapd_hidl_test.cpp
@@ -122,7 +122,8 @@ IHostapd::IfaceParams getIfaceParamsWithAcs(std::string iface_name) { // First get the settings for WithoutAcs and then make changes - IHostapd::IfaceParams iface_params_1_2 = getIfaceParamsWithoutAcs(iface_name); + IHostapd::IfaceParams iface_params_1_2 = + getIfaceParamsWithoutAcs(iface_name); iface_params_1_2.V1_1.V1_0.channelParams.enableAcs = true; iface_params_1_2.V1_1.V1_0.channelParams.acsShouldExcludeDfs = true; iface_params_1_2.V1_1.V1_0.channelParams.channel = 0; @@ -132,8 +133,10 @@ return iface_params_1_2; } - IHostapd::IfaceParams getIfaceParamsWithAcsAndFreqRange(std::string iface_name) { - IHostapd::IfaceParams iface_params_1_2 = getIfaceParamsWithAcs(iface_name); + IHostapd::IfaceParams getIfaceParamsWithAcsAndFreqRange( + std::string iface_name) { + IHostapd::IfaceParams iface_params_1_2 = + getIfaceParamsWithAcs(iface_name); ::android::hardware::wifi::hostapd::V1_2::IHostapd::AcsFrequencyRange acsFrequencyRange; acsFrequencyRange.start = 2412; @@ -147,8 +150,10 @@ return iface_params_1_2; } - IHostapd::IfaceParams getIfaceParamsWithAcsAndInvalidFreqRange(std::string iface_name) { - IHostapd::IfaceParams iface_params_1_2 = getIfaceParamsWithAcsAndFreqRange(iface_name); + IHostapd::IfaceParams getIfaceParamsWithAcsAndInvalidFreqRange( + std::string iface_name) { + IHostapd::IfaceParams iface_params_1_2 = + getIfaceParamsWithAcsAndFreqRange(iface_name); iface_params_1_2.channelParams.acsChannelFreqRangesMhz[0].start = 222; iface_params_1_2.channelParams.acsChannelFreqRangesMhz[0].end = 999; return iface_params_1_2; @@ -210,8 +215,10 @@ return nw_params_1_2; } - IHostapd::IfaceParams getIfaceParamsWithInvalidChannel(std::string iface_name) { - IHostapd::IfaceParams iface_params_1_2 = getIfaceParamsWithoutAcs(iface_name); + IHostapd::IfaceParams getIfaceParamsWithInvalidChannel( + std::string iface_name) { + IHostapd::IfaceParams iface_params_1_2 = + getIfaceParamsWithoutAcs(iface_name); iface_params_1_2.V1_1.V1_0.channelParams.channel = kIfaceInvalidChannel; return iface_params_1_2; } @@ -237,8 +244,8 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithAcs(ifname), - getPskNwParams()); + auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithAcs(ifname), getPskNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } @@ -252,7 +259,8 @@ GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, - getIfaceParamsWithAcsAndFreqRange(ifname), getPskNwParams()); + getIfaceParamsWithAcsAndFreqRange(ifname), + getPskNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } @@ -266,7 +274,8 @@ GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, - getIfaceParamsWithAcsAndInvalidFreqRange(ifname), getPskNwParams()); + getIfaceParamsWithAcsAndInvalidFreqRange(ifname), + getPskNwParams()); EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); } @@ -279,8 +288,8 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithAcs(ifname), - getOpenNwParams()); + auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithAcs(ifname), getOpenNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } @@ -292,8 +301,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), - getPskNwParams()); + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getPskNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } @@ -305,8 +315,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), - getOpenNwParams()); + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getOpenNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } @@ -319,7 +330,8 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), + auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getSaeTransitionNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } @@ -333,8 +345,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), - getSaeNwParams()); + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getSaeNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status.code); } @@ -347,8 +360,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status_1_2 = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithAcs(ifname), - getPskNwParams()); + auto status_1_2 = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithAcs(ifname), + getPskNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status_1_2.code); auto status = HIDL_INVOKE(hostapd_, removeAccessPoint, ifname); EXPECT_EQ( @@ -364,8 +378,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status_1_2 = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), - getPskNwParams()); + auto status_1_2 = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getPskNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status_1_2.code); auto status = HIDL_INVOKE(hostapd_, removeAccessPoint, ifname); EXPECT_EQ( @@ -381,8 +396,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, - getIfaceParamsWithInvalidChannel(ifname), getPskNwParams()); + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithInvalidChannel(ifname), getPskNwParams()); EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); } @@ -394,8 +410,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), - getInvalidPskNwParams()); + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getInvalidPskNwParams()); EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); } @@ -408,7 +425,8 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), + auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getInvalidSaeTransitionNwParams()); EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); } @@ -422,8 +440,9 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), - getInvalidSaeNwParams()); + auto status = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getInvalidSaeNwParams()); EXPECT_NE(HostapdStatusCode::SUCCESS, status.code); } @@ -433,8 +452,8 @@ */ TEST_P(HostapdHidlTest, DisconnectClientWhenIfaceNotAvailable) { std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status = HIDL_INVOKE(hostapd_, forceClientDisconnect, ifname, kTestZeroMacAddr, - kTestDisconnectReasonCode); + auto status = HIDL_INVOKE(hostapd_, forceClientDisconnect, ifname, + kTestZeroMacAddr, kTestDisconnectReasonCode); EXPECT_EQ(HostapdStatusCode::FAILURE_IFACE_UNKNOWN, status.code); } @@ -446,12 +465,13 @@ if (is_1_3(hostapd_)) GTEST_SKIP() << "Ignore addAccessPoint_1_2 on hostapd 1_3"; std::string ifname = setupApIfaceIfNeededAndGetName(); - auto status_1_2 = HIDL_INVOKE(hostapd_, addAccessPoint_1_2, getIfaceParamsWithoutAcs(ifname), - getOpenNwParams()); + auto status_1_2 = + HIDL_INVOKE(hostapd_, addAccessPoint_1_2, + getIfaceParamsWithoutAcs(ifname), getOpenNwParams()); EXPECT_EQ(HostapdStatusCode::SUCCESS, status_1_2.code); - status_1_2 = HIDL_INVOKE(hostapd_, forceClientDisconnect, ifname, kTestZeroMacAddr, - kTestDisconnectReasonCode); + status_1_2 = HIDL_INVOKE(hostapd_, forceClientDisconnect, ifname, + kTestZeroMacAddr, kTestDisconnectReasonCode); EXPECT_EQ(HostapdStatusCode::FAILURE_CLIENT_UNKNOWN, status_1_2.code); }