Merge "OemLock HAL"
diff --git a/audio/common/2.0/default/HidlUtils.cpp b/audio/common/2.0/default/HidlUtils.cpp
index 241ca90..79cb37c 100644
--- a/audio/common/2.0/default/HidlUtils.cpp
+++ b/audio/common/2.0/default/HidlUtils.cpp
@@ -28,6 +28,7 @@
using ::android::hardware::audio::common::V2_0::AudioPortType;
using ::android::hardware::audio::common::V2_0::AudioSource;
using ::android::hardware::audio::common::V2_0::AudioStreamType;
+using ::android::hardware::audio::common::V2_0::AudioUsage;
namespace android {
@@ -103,6 +104,9 @@
offload->durationMicroseconds = halOffload.duration_us;
offload->hasVideo = halOffload.has_video;
offload->isStreaming = halOffload.is_streaming;
+ offload->bitWidth = halOffload.bit_width;
+ offload->bufferSize = halOffload.offload_buffer_size;
+ offload->usage = static_cast<AudioUsage>(halOffload.usage);
}
void HidlUtils::audioOffloadInfoToHal(
diff --git a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
index 5b00675..4f5aaf9 100644
--- a/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
+++ b/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
@@ -79,7 +79,7 @@
case -28: return RequestStatus::SYS_ENOSPC;
case -110: return RequestStatus::SYS_ETIMEDOUT;
default:
- ALOGE("An unknown error returned from fingerprint vendor library");
+ ALOGE("An unknown error returned from fingerprint vendor library: %d", error);
return RequestStatus::SYS_UNKNOWN;
}
}
diff --git a/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp b/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp
index ec60b65..fde3171 100644
--- a/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp
+++ b/gnss/1.0/vts/functional/VtsHalGnssV1_0TargetTest.cpp
@@ -35,11 +35,11 @@
using android::hardware::gnss::V1_0::IGnssMeasurement;
using android::sp;
-#define TIMEOUT_SEC 3 // for basic commands/responses
+#define TIMEOUT_SEC 2 // for basic commands/responses
-// Set these false for release, true for stronger test
-#define GNSS_SIGNAL_IS_PRESENT false
-#define GNSS_ASSISTANCE_IS_PRESENT false
+// for command line argument on how strictly to run the test
+bool sAgpsIsPresent = false; // if SUPL or XTRA assistance available
+bool sSignalIsWeak = false; // if GNSS signals are weak (e.g. light indoor)
// The main test class for GNSS HAL.
class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase {
@@ -204,7 +204,6 @@
* CheckLocation:
* Helper function to vet Location fields
*/
-
void CheckLocation(GnssLocation& location, bool checkAccuracies) {
EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_LAT_LONG);
EXPECT_TRUE(location.gnssLocationFlags & GnssLocationFlags::HAS_ALTITUDE);
@@ -270,6 +269,39 @@
}
/*
+ * StartAndGetSingleLocation:
+ * Helper function to get one Location and check fields
+ *
+ * returns true if a location was successfully generated
+ */
+bool StartAndGetSingleLocation(GnssHalTest* test, bool checkAccuracies) {
+ auto result = test->gnss_hal_->start();
+
+ EXPECT_TRUE(result.isOk());
+ EXPECT_TRUE(result);
+
+ /*
+ * GPS signals initially optional for this test, so don't expect fast fix,
+ * or no timeout, unless signal is present
+ */
+ int firstGnssLocationTimeoutSeconds = sAgpsIsPresent ? 15 : 45;
+ if (sSignalIsWeak) {
+ // allow more time for weak signals
+ firstGnssLocationTimeoutSeconds += 30;
+ }
+
+ test->wait(firstGnssLocationTimeoutSeconds);
+ if (sAgpsIsPresent) {
+ EXPECT_EQ(test->location_called_count_, 1);
+ }
+ if (test->location_called_count_ > 0) {
+ CheckLocation(test->last_location_, checkAccuracies);
+ return true;
+ }
+ return false;
+}
+
+/*
* GetLocation:
* Turns on location, waits 45 second for at least 5 locations,
* and checks them for reasonable validity.
@@ -279,12 +311,6 @@
#define PREFERRED_ACCURACY 0 // Ideally perfect (matches GnssLocationProvider)
#define PREFERRED_TIME_MSEC 0 // Ideally immediate
-#if GNSS_ASSISTANCE_IS_PRESENT
-#define LOCATION_TIMEOUT_FIRST_SEC 15
-#else
-#define LOCATION_TIMEOUT_FIRST_SEC 45
-#endif
-
#define LOCATION_TIMEOUT_SUBSEQUENT_SEC 3
#define LOCATIONS_TO_CHECK 5
@@ -299,26 +325,17 @@
ASSERT_TRUE(result.isOk());
EXPECT_TRUE(result);
- result = gnss_hal_->start();
-
- ASSERT_TRUE(result.isOk());
- EXPECT_TRUE(result);
-
/*
* GPS signals initially optional for this test, so don't expect no timeout
* yet
*/
- wait(LOCATION_TIMEOUT_FIRST_SEC);
- if (GNSS_SIGNAL_IS_PRESENT) {
- ASSERT_GT(location_called_count_, 0);
- }
- if (location_called_count_ > 0) {
- CheckLocation(last_location_, checkMoreAccuracies);
- }
+ bool gotLocation = StartAndGetSingleLocation(this, checkMoreAccuracies);
- for (int i = 1; i < LOCATIONS_TO_CHECK; i++) {
- wait(LOCATION_TIMEOUT_SUBSEQUENT_SEC);
- if (location_called_count_ > 0) {
+ if (gotLocation) {
+ for (int i = 1; i < LOCATIONS_TO_CHECK; i++) {
+ EXPECT_EQ(std::cv_status::no_timeout,
+ wait(LOCATION_TIMEOUT_SUBSEQUENT_SEC));
+ EXPECT_EQ(location_called_count_, i + 1);
CheckLocation(last_location_, checkMoreAccuracies);
}
}
@@ -332,13 +349,11 @@
/*
* InjectDelete:
* Ensures that calls to inject and/or delete information state are handled.
- * Better tests await GPS signal
*/
TEST_F(GnssHalTest, InjectDelete) {
// confidently, well north of Alaska
auto result = gnss_hal_->injectLocation(80.0, -170.0, 1000.0);
- // TODO: full self-diff including TODO's :)
ASSERT_TRUE(result.isOk());
EXPECT_TRUE(result);
@@ -351,6 +366,9 @@
auto resultVoid = gnss_hal_->deleteAidingData(IGnss::GnssAidingData::DELETE_ALL);
ASSERT_TRUE(resultVoid.isOk());
+
+ // Ensure we can get a good location after a bad injection has been deleted
+ StartAndGetSingleLocation(this, false);
}
/*
@@ -413,6 +431,18 @@
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
+ /*
+ * These arguments not used by automated VTS testing.
+ * Only for use in manual testing, when wanting to run
+ * stronger tests that require the presence of GPS signal.
+ */
+ for (int i = 1; i < argc; i++) {
+ if (strcmp(argv[i],"-agps") == 0) {
+ sAgpsIsPresent = true;
+ } else if (strcmp(argv[i],"-weak") == 0) {
+ sSignalIsWeak = true;
+ }
+ }
int status = RUN_ALL_TESTS();
ALOGI("Test result = %d", status);
return status;
diff --git a/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
index 084067c..0627a99 100644
--- a/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
@@ -76,15 +76,14 @@
// Helper function to configure the Chip in one of the supported modes.
// Most of the non-mode-configuration-related methods require chip
// to be first configured.
- ChipModeId configureChipForIfaceType(IfaceType type) {
+ ChipModeId configureChipForIfaceType(IfaceType type, bool expectSuccess) {
ChipModeId mode_id;
- EXPECT_TRUE(
- configureChipToSupportIfaceType(wifi_chip_, type, &mode_id));
+ EXPECT_EQ(expectSuccess, configureChipToSupportIfaceType(wifi_chip_, type, &mode_id));
return mode_id;
}
uint32_t configureChipForStaIfaceAndGetCapabilities() {
- configureChipForIfaceType(IfaceType::STA);
+ configureChipForIfaceType(IfaceType::STA, true);
const auto& status_and_caps = HIDL_INVOKE(wifi_chip_, getCapabilities);
EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_caps.first.code);
return status_and_caps.second;
@@ -183,7 +182,7 @@
* GetCapabilities:
*/
TEST_F(WifiChipHidlTest, GetCapabilities) {
- configureChipForIfaceType(IfaceType::STA);
+ configureChipForIfaceType(IfaceType::STA, true);
const auto& status_and_caps = HIDL_INVOKE(wifi_chip_, getCapabilities);
EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_caps.first.code);
EXPECT_NE(0u, status_and_caps.second);
@@ -193,7 +192,7 @@
* GetMode:
*/
TEST_F(WifiChipHidlTest, GetMode) {
- ChipModeId chip_mode_id = configureChipForIfaceType(IfaceType::STA);
+ ChipModeId chip_mode_id = configureChipForIfaceType(IfaceType::STA, true);
const auto& status_and_mode = HIDL_INVOKE(wifi_chip_, getMode);
EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_mode.first.code);
EXPECT_EQ(chip_mode_id, status_and_mode.second);
@@ -203,7 +202,7 @@
* RequestChipDebugInfo:
*/
TEST_F(WifiChipHidlTest, RequestChipDebugInfo) {
- configureChipForIfaceType(IfaceType::STA);
+ configureChipForIfaceType(IfaceType::STA, true);
const auto& status_and_chip_info =
HIDL_INVOKE(wifi_chip_, requestChipDebugInfo);
EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_chip_info.first.code);
@@ -236,8 +235,10 @@
if (caps & IWifiChip::ChipCapabilityMask::DEBUG_MEMORY_DRIVER_DUMP) {
EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_driver_dump.first.code);
} else {
- EXPECT_EQ(WifiStatusCode::ERROR_NOT_SUPPORTED,
- status_and_driver_dump.first.code);
+ // API semantics (today) are such that function cannot be called if not capable!
+ //
+ // EXPECT_EQ(WifiStatusCode::ERROR_NOT_SUPPORTED,
+ // status_and_driver_dump.first.code);
}
}
@@ -336,7 +337,7 @@
* succeeds. The 2nd iface creation should be rejected.
*/
TEST_F(WifiChipHidlTest, CreateApIface) {
- configureChipForIfaceType(IfaceType::AP);
+ configureChipForIfaceType(IfaceType::AP, true);
sp<IWifiApIface> iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createApIface(&iface));
@@ -352,7 +353,7 @@
* iface name is returned via the list.
*/
TEST_F(WifiChipHidlTest, GetApIfaceNames) {
- configureChipForIfaceType(IfaceType::AP);
+ configureChipForIfaceType(IfaceType::AP, true);
const auto& status_and_iface_names1 =
HIDL_INVOKE(wifi_chip_, getApIfaceNames);
@@ -384,7 +385,7 @@
* doesn't retrieve an iface object.
*/
TEST_F(WifiChipHidlTest, GetApIface) {
- configureChipForIfaceType(IfaceType::AP);
+ configureChipForIfaceType(IfaceType::AP, true);
sp<IWifiApIface> ap_iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createApIface(&ap_iface));
@@ -410,7 +411,7 @@
* doesn't remove the iface.
*/
TEST_F(WifiChipHidlTest, RemoveApIface) {
- configureChipForIfaceType(IfaceType::AP);
+ configureChipForIfaceType(IfaceType::AP, true);
sp<IWifiApIface> ap_iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createApIface(&ap_iface));
@@ -431,13 +432,10 @@
* succeeds. The 2nd iface creation should be rejected.
*/
TEST_F(WifiChipHidlTest, CreateNanIface) {
- configureChipForIfaceType(IfaceType::NAN);
+ configureChipForIfaceType(IfaceType::NAN, false);
sp<IWifiNanIface> iface;
- EXPECT_EQ(WifiStatusCode::SUCCESS, createNanIface(&iface));
- EXPECT_NE(nullptr, iface.get());
-
- EXPECT_EQ(WifiStatusCode::ERROR_NOT_AVAILABLE, createNanIface(&iface));
+ ASSERT_EQ(WifiStatusCode::ERROR_NOT_AVAILABLE, createNanIface(&iface));
}
/*
@@ -447,29 +445,12 @@
* iface name is returned via the list.
*/
TEST_F(WifiChipHidlTest, GetNanIfaceNames) {
- configureChipForIfaceType(IfaceType::NAN);
+ configureChipForIfaceType(IfaceType::NAN, false);
const auto& status_and_iface_names1 =
HIDL_INVOKE(wifi_chip_, getNanIfaceNames);
- EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_iface_names1.first.code);
+ ASSERT_EQ(WifiStatusCode::SUCCESS, status_and_iface_names1.first.code);
EXPECT_EQ(0u, status_and_iface_names1.second.size());
-
- sp<IWifiNanIface> iface;
- EXPECT_EQ(WifiStatusCode::SUCCESS, createNanIface(&iface));
- EXPECT_NE(nullptr, iface.get());
-
- std::string iface_name = getIfaceName(iface);
- const auto& status_and_iface_names2 =
- HIDL_INVOKE(wifi_chip_, getNanIfaceNames);
- EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_iface_names2.first.code);
- EXPECT_EQ(1u, status_and_iface_names2.second.size());
- EXPECT_EQ(iface_name, status_and_iface_names2.second[0]);
-
- EXPECT_EQ(WifiStatusCode::SUCCESS, removeNanIface(iface_name));
- const auto& status_and_iface_names3 =
- HIDL_INVOKE(wifi_chip_, getNanIfaceNames);
- EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_iface_names3.first.code);
- EXPECT_EQ(0u, status_and_iface_names3.second.size());
}
/*
@@ -479,23 +460,10 @@
* doesn't retrieve an iface object.
*/
TEST_F(WifiChipHidlTest, GetNanIface) {
- configureChipForIfaceType(IfaceType::NAN);
+ configureChipForIfaceType(IfaceType::NAN, false);
sp<IWifiNanIface> nan_iface;
- EXPECT_EQ(WifiStatusCode::SUCCESS, createNanIface(&nan_iface));
- EXPECT_NE(nullptr, nan_iface.get());
-
- std::string iface_name = getIfaceName(nan_iface);
- const auto& status_and_iface1 =
- HIDL_INVOKE(wifi_chip_, getNanIface, iface_name);
- EXPECT_EQ(WifiStatusCode::SUCCESS, status_and_iface1.first.code);
- EXPECT_NE(nullptr, status_and_iface1.second.get());
-
- std::string invalid_name = iface_name + "0";
- const auto& status_and_iface2 =
- HIDL_INVOKE(wifi_chip_, getNanIface, invalid_name);
- EXPECT_EQ(WifiStatusCode::ERROR_INVALID_ARGS, status_and_iface2.first.code);
- EXPECT_EQ(nullptr, status_and_iface2.second.get());
+ ASSERT_EQ(WifiStatusCode::ERROR_NOT_AVAILABLE, createNanIface(&nan_iface));
}
/*
@@ -505,20 +473,10 @@
* doesn't remove the iface.
*/
TEST_F(WifiChipHidlTest, RemoveNanIface) {
- configureChipForIfaceType(IfaceType::NAN);
+ configureChipForIfaceType(IfaceType::NAN, false);
sp<IWifiNanIface> nan_iface;
- EXPECT_EQ(WifiStatusCode::SUCCESS, createNanIface(&nan_iface));
- EXPECT_NE(nullptr, nan_iface.get());
-
- std::string iface_name = getIfaceName(nan_iface);
- std::string invalid_name = iface_name + "0";
- EXPECT_EQ(WifiStatusCode::ERROR_INVALID_ARGS, removeNanIface(invalid_name));
-
- EXPECT_EQ(WifiStatusCode::SUCCESS, removeNanIface(iface_name));
-
- // No such iface exists now. So, this should return failure.
- EXPECT_EQ(WifiStatusCode::ERROR_INVALID_ARGS, removeNanIface(iface_name));
+ ASSERT_EQ(WifiStatusCode::ERROR_NOT_AVAILABLE, createNanIface(&nan_iface));
}
/*
@@ -527,7 +485,7 @@
* succeeds. The 2nd iface creation should be rejected.
*/
TEST_F(WifiChipHidlTest, CreateP2pIface) {
- configureChipForIfaceType(IfaceType::P2P);
+ configureChipForIfaceType(IfaceType::P2P, true);
sp<IWifiP2pIface> iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createP2pIface(&iface));
@@ -543,7 +501,7 @@
* iface name is returned via the list.
*/
TEST_F(WifiChipHidlTest, GetP2pIfaceNames) {
- configureChipForIfaceType(IfaceType::P2P);
+ configureChipForIfaceType(IfaceType::P2P, true);
const auto& status_and_iface_names1 =
HIDL_INVOKE(wifi_chip_, getP2pIfaceNames);
@@ -575,7 +533,7 @@
* doesn't retrieve an iface object.
*/
TEST_F(WifiChipHidlTest, GetP2pIface) {
- configureChipForIfaceType(IfaceType::P2P);
+ configureChipForIfaceType(IfaceType::P2P, true);
sp<IWifiP2pIface> p2p_iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createP2pIface(&p2p_iface));
@@ -601,7 +559,7 @@
* doesn't remove the iface.
*/
TEST_F(WifiChipHidlTest, RemoveP2pIface) {
- configureChipForIfaceType(IfaceType::P2P);
+ configureChipForIfaceType(IfaceType::P2P, true);
sp<IWifiP2pIface> p2p_iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createP2pIface(&p2p_iface));
@@ -622,7 +580,7 @@
* succeeds. The 2nd iface creation should be rejected.
*/
TEST_F(WifiChipHidlTest, CreateStaIface) {
- configureChipForIfaceType(IfaceType::STA);
+ configureChipForIfaceType(IfaceType::STA, true);
sp<IWifiStaIface> iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createStaIface(&iface));
@@ -638,7 +596,7 @@
* iface name is returned via the list.
*/
TEST_F(WifiChipHidlTest, GetStaIfaceNames) {
- configureChipForIfaceType(IfaceType::STA);
+ configureChipForIfaceType(IfaceType::STA, true);
const auto& status_and_iface_names1 =
HIDL_INVOKE(wifi_chip_, getStaIfaceNames);
@@ -670,7 +628,7 @@
* doesn't retrieve an iface object.
*/
TEST_F(WifiChipHidlTest, GetStaIface) {
- configureChipForIfaceType(IfaceType::STA);
+ configureChipForIfaceType(IfaceType::STA, true);
sp<IWifiStaIface> sta_iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createStaIface(&sta_iface));
@@ -696,7 +654,7 @@
* doesn't remove the iface.
*/
TEST_F(WifiChipHidlTest, RemoveStaIface) {
- configureChipForIfaceType(IfaceType::STA);
+ configureChipForIfaceType(IfaceType::STA, true);
sp<IWifiStaIface> sta_iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createStaIface(&sta_iface));
@@ -715,7 +673,7 @@
* CreateRttController
*/
TEST_F(WifiChipHidlTest, CreateRttController) {
- configureChipForIfaceType(IfaceType::AP);
+ configureChipForIfaceType(IfaceType::AP, true);
sp<IWifiApIface> iface;
EXPECT_EQ(WifiStatusCode::SUCCESS, createApIface(&iface));