Merge "Correct the PWLE valid duration" into tm-dev
diff --git a/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp b/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp
index c709d40..7fcac38 100644
--- a/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp
+++ b/automotive/evs/aidl/vts/VtsHalEvsTargetTest.cpp
@@ -430,8 +430,8 @@
mActiveCameras.push_back(pCam);
// Set up a frame receiver object which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -529,8 +529,8 @@
ASSERT_TRUE(pCam->setMaxFramesInFlight(kBuffersToHold).isOk());
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -619,8 +619,8 @@
mActiveCameras.push_back(pCam);
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, pDisplay, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, pDisplay, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Activate the display
@@ -697,10 +697,10 @@
mActiveCameras.push_back(pCam1);
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler0 =
- std::make_shared<FrameHandler>(pCam0, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandler1 =
- std::make_shared<FrameHandler>(pCam1, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler0 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam0, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler1 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam1, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler0, nullptr);
EXPECT_NE(frameHandler1, nullptr);
@@ -803,8 +803,8 @@
}
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -903,10 +903,11 @@
mActiveCameras.push_back(pSecondaryCam);
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandlerPrimary = std::make_shared<FrameHandler>(
+ std::shared_ptr<FrameHandler> frameHandlerPrimary = ndk::SharedRefBase::make<FrameHandler>(
pPrimaryCam, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandlerSecondary = std::make_shared<FrameHandler>(
- pSecondaryCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandlerSecondary =
+ ndk::SharedRefBase::make<FrameHandler>(pSecondaryCam, cam, nullptr,
+ FrameHandler::eAutoReturn);
EXPECT_NE(frameHandlerPrimary, nullptr);
EXPECT_NE(frameHandlerSecondary, nullptr);
@@ -1075,10 +1076,11 @@
}
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandlerPrimary = std::make_shared<FrameHandler>(
+ std::shared_ptr<FrameHandler> frameHandlerPrimary = ndk::SharedRefBase::make<FrameHandler>(
pPrimaryCam, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandlerSecondary = std::make_shared<FrameHandler>(
- pSecondaryCam, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandlerSecondary =
+ ndk::SharedRefBase::make<FrameHandler>(pSecondaryCam, cam, nullptr,
+ FrameHandler::eAutoReturn);
EXPECT_NE(frameHandlerPrimary, nullptr);
EXPECT_NE(frameHandlerSecondary, nullptr);
@@ -1418,10 +1420,10 @@
}
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler0 =
- std::make_shared<FrameHandler>(pCam0, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandler1 =
- std::make_shared<FrameHandler>(pCam1, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler0 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam0, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler1 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam1, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler0, nullptr);
EXPECT_NE(frameHandler1, nullptr);
@@ -1733,8 +1735,8 @@
mActiveCameras.push_back(pCam);
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, pDisplay, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, pDisplay, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Activate the display
@@ -1843,10 +1845,10 @@
EXPECT_NE(pCam1, nullptr);
// Set up per-client frame receiver objects which will fire up its own thread
- std::shared_ptr<FrameHandler> frameHandler0 =
- std::make_shared<FrameHandler>(pCam0, cam, nullptr, FrameHandler::eAutoReturn);
- std::shared_ptr<FrameHandler> frameHandler1 =
- std::make_shared<FrameHandler>(pCam1, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler0 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam0, cam, nullptr, FrameHandler::eAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler1 = ndk::SharedRefBase::make<FrameHandler>(
+ pCam1, cam, nullptr, FrameHandler::eAutoReturn);
EXPECT_NE(frameHandler0, nullptr);
EXPECT_NE(frameHandler1, nullptr);
@@ -2008,8 +2010,8 @@
EXPECT_GE(delta, kBuffersToHold);
// Set up a frame receiver object which will fire up its own thread.
- std::shared_ptr<FrameHandler> frameHandler =
- std::make_shared<FrameHandler>(pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
+ std::shared_ptr<FrameHandler> frameHandler = ndk::SharedRefBase::make<FrameHandler>(
+ pCam, cam, nullptr, FrameHandler::eNoAutoReturn);
EXPECT_NE(frameHandler, nullptr);
// Start the camera's video stream
@@ -2101,7 +2103,7 @@
EXPECT_NE(pUltrasonicsArray, nullptr);
std::shared_ptr<FrameHandlerUltrasonics> frameHandler =
- std::make_shared<FrameHandlerUltrasonics>(pUltrasonicsArray);
+ ndk::SharedRefBase::make<FrameHandlerUltrasonics>(pUltrasonicsArray);
EXPECT_NE(frameHandler, nullptr);
// Start stream.
@@ -2141,7 +2143,7 @@
ASSERT_TRUE(pUltrasonicsArray->setMaxFramesInFlight(10).isOk());
std::shared_ptr<FrameHandlerUltrasonics> frameHandler =
- std::make_shared<FrameHandlerUltrasonics>(pUltrasonicsArray);
+ ndk::SharedRefBase::make<FrameHandlerUltrasonics>(pUltrasonicsArray);
EXPECT_NE(frameHandler, nullptr);
// Start stream.
diff --git a/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h b/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h
index 6ecac70..fda0da9 100644
--- a/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h
+++ b/automotive/vehicle/aidl/impl/default_config/include/DefaultConfig.h
@@ -289,6 +289,71 @@
{.config =
{
+ .prop = toInt(VehicleProperty::EV_CHARGE_CURRENT_DRAW_LIMIT),
+ .access = VehiclePropertyAccess::READ_WRITE,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.floatValues = {(float)VehicleUnit::AMPERE}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::EV_CHARGE_PERCENT_LIMIT),
+ .access = VehiclePropertyAccess::READ_WRITE,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ .configArray = {20, 40, 60, 80, 100},
+ },
+ .initialValue = {.floatValues = {40}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::EV_CHARGE_STATE),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {2}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::EV_CHARGE_SWITCH),
+ .access = VehiclePropertyAccess::READ_WRITE,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {0 /* false */}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::EV_CHARGE_TIME_REMAINING),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::CONTINUOUS,
+ },
+ .initialValue = {.int32Values = {20}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::EV_REGENERATIVE_BRAKING_STATE),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {2}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::TRAILER_PRESENT),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {2}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::VEHICLE_CURB_WEIGHT),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::STATIC,
+ },
+ .initialValue = {.int32Values = {30}}},
+
+ {.config =
+ {
.prop = toInt(VehicleProperty::RANGE_REMAINING),
.access = VehiclePropertyAccess::READ_WRITE,
.changeMode = VehiclePropertyChangeMode::CONTINUOUS,
@@ -820,6 +885,22 @@
{.config =
{
+ .prop = toInt(VehicleProperty::FRONT_FOG_LIGHTS_STATE),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {LIGHT_STATE_ON}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::REAR_FOG_LIGHTS_STATE),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {LIGHT_STATE_ON}}},
+
+ {.config =
+ {
.prop = toInt(VehicleProperty::HAZARD_LIGHTS_STATE),
.access = VehiclePropertyAccess::READ,
.changeMode = VehiclePropertyChangeMode::ON_CHANGE,
@@ -852,6 +933,22 @@
{.config =
{
+ .prop = toInt(VehicleProperty::FRONT_FOG_LIGHTS_SWITCH),
+ .access = VehiclePropertyAccess::READ_WRITE,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {LIGHT_SWITCH_AUTO}}},
+
+ {.config =
+ {
+ .prop = toInt(VehicleProperty::REAR_FOG_LIGHTS_SWITCH),
+ .access = VehiclePropertyAccess::READ_WRITE,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ .initialValue = {.int32Values = {LIGHT_SWITCH_AUTO}}},
+
+ {.config =
+ {
.prop = toInt(VehicleProperty::HAZARD_LIGHTS_SWITCH),
.access = VehiclePropertyAccess::READ_WRITE,
.changeMode = VehiclePropertyChangeMode::ON_CHANGE,
@@ -1124,6 +1221,14 @@
},
.initialValue = {.stringValue = {"Test"}},
},
+ {
+ .config =
+ {
+ .prop = ECHO_REVERSE_BYTES,
+ .access = VehiclePropertyAccess::READ_WRITE,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+ },
#ifdef ENABLE_VENDOR_CLUSTER_PROPERTY_FOR_TESTING
// Vendor propetry for E2E ClusterHomeService testing.
{
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h b/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
index 1c076d3..e799a28 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
@@ -131,6 +131,8 @@
const aidl::android::hardware::automotive::vehicle::VehiclePropValue& value);
ValueResultType getUserHalProp(
const aidl::android::hardware::automotive::vehicle::VehiclePropValue& value) const;
+ ValueResultType getEchoReverseBytes(
+ const aidl::android::hardware::automotive::vehicle::VehiclePropValue& value) const;
bool isHvacPropAndHvacNotAvailable(int32_t propId);
std::string dumpAllProperties();
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
index 462506d..f8b64f2 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
@@ -23,6 +23,7 @@
#include <FakeObd2Frame.h>
#include <JsonFakeValueGenerator.h>
#include <PropertyUtils.h>
+#include <TestPropertyUtils.h>
#include <VehicleHalTypes.h>
#include <VehicleUtils.h>
#include <android-base/parsedouble.h>
@@ -335,6 +336,9 @@
result.value()->timestamp = elapsedRealtimeNano();
}
return result;
+ case ECHO_REVERSE_BYTES:
+ *isSpecialValue = true;
+ return getEchoReverseBytes(value);
default:
// Do nothing.
break;
@@ -343,6 +347,22 @@
return nullptr;
}
+FakeVehicleHardware::ValueResultType FakeVehicleHardware::getEchoReverseBytes(
+ const VehiclePropValue& value) const {
+ auto readResult = mServerSidePropStore->readValue(value);
+ if (!readResult.ok()) {
+ return readResult;
+ }
+ auto& gotValue = readResult.value();
+ gotValue->timestamp = elapsedRealtimeNano();
+ std::vector<uint8_t> byteValues = gotValue->value.byteValues;
+ size_t byteSize = byteValues.size();
+ for (size_t i = 0; i < byteSize; i++) {
+ gotValue->value.byteValues[i] = byteValues[byteSize - 1 - i];
+ }
+ return std::move(gotValue);
+}
+
VhalResult<void> FakeVehicleHardware::maybeSetSpecialValue(const VehiclePropValue& value,
bool* isSpecialValue) {
*isSpecialValue = false;
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
index 6259f96..7a7fb37 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
@@ -276,6 +276,11 @@
continue;
}
+ if (config.config.prop == ECHO_REVERSE_BYTES) {
+ // Ignore ECHO_REVERSE_BYTES, it has special logic.
+ continue;
+ }
+
int propId = config.config.prop;
if (isGlobalProp(propId)) {
if (config.initialValue == RawPropValues{}) {
@@ -1487,6 +1492,24 @@
ASSERT_EQ(3.402823466E+38f, value.value.floatValues[2]);
}
+TEST_F(FakeVehicleHardwareTest, testGetEchoReverseBytes) {
+ ASSERT_EQ(setValue(VehiclePropValue{
+ .prop = ECHO_REVERSE_BYTES,
+ .value =
+ {
+ .byteValues = {0x01, 0x02, 0x03, 0x04},
+ },
+ }),
+ StatusCode::OK);
+
+ auto result = getValue(VehiclePropValue{
+ .prop = ECHO_REVERSE_BYTES,
+ });
+
+ ASSERT_TRUE(result.ok()) << "failed to get ECHO_REVERSE_BYTES value: " << getStatus(result);
+ ASSERT_EQ(result.value().value.byteValues, std::vector<uint8_t>({0x04, 0x03, 0x02, 0x01}));
+}
+
} // namespace fake
} // namespace vehicle
} // namespace automotive
diff --git a/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h b/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h
index 4213501..d512713 100644
--- a/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h
+++ b/automotive/vehicle/aidl/impl/utils/test/include/TestPropertyUtils.h
@@ -76,6 +76,16 @@
toInt(testpropertyutils_impl::VehicleArea::GLOBAL) |
toInt(testpropertyutils_impl::VehiclePropertyType::STRING);
+// This property is used for testing LargeParcelable marshalling/unmarhsalling end to end.
+// It acts as an regular property that stores the property value when setting and return the value
+// when getting, except that all the byteValues used in the setValue response would be filled in
+// the reverse order.
+// 0x21702a12
+constexpr int32_t ECHO_REVERSE_BYTES = 0x2a12 |
+ toInt(testpropertyutils_impl::VehiclePropertyGroup::VENDOR) |
+ toInt(testpropertyutils_impl::VehicleArea::GLOBAL) |
+ toInt(testpropertyutils_impl::VehiclePropertyType::BYTES);
+
// This property is used for test purpose. End to end tests use this property to test set and get
// method for MIXED type properties.
constexpr int32_t kMixedTypePropertyForTest =
diff --git a/security/keymint/aidl/vts/functional/AttestKeyTest.cpp b/security/keymint/aidl/vts/functional/AttestKeyTest.cpp
index 0bab54c..5cdea93 100644
--- a/security/keymint/aidl/vts/functional/AttestKeyTest.cpp
+++ b/security/keymint/aidl/vts/functional/AttestKeyTest.cpp
@@ -783,7 +783,7 @@
vector<Certificate> attested_key_cert_chain;
auto result = GenerateKey(builder, attest_key, &attested_key_blob,
&attested_key_characteristics, &attested_key_cert_chain);
- if (result == ErrorCode::CANNOT_ATTEST_IDS) {
+ if (result == ErrorCode::CANNOT_ATTEST_IDS && !isDeviceIdAttestationRequired()) {
continue;
}
diff --git a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
index f9510d3..943c692 100644
--- a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
+++ b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
@@ -207,6 +207,14 @@
return boot_patch_level(key_characteristics_);
}
+/**
+ * An API to determine device IDs attestation is required or not,
+ * which is mandatory for KeyMint version 2 or first_api_level 33 or greater.
+ */
+bool KeyMintAidlTestBase::isDeviceIdAttestationRequired() {
+ return AidlVersion() >= 2 || property_get_int32("ro.vendor.api_level", 0) >= 33;
+}
+
bool KeyMintAidlTestBase::Curve25519Supported() {
// Strongbox never supports curve 25519.
if (SecLevel() == SecurityLevel::STRONGBOX) {
diff --git a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h
index 602dcaf..7279c95 100644
--- a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h
+++ b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h
@@ -79,6 +79,7 @@
uint32_t vendor_patch_level() { return vendor_patch_level_; }
uint32_t boot_patch_level(const vector<KeyCharacteristics>& key_characteristics);
uint32_t boot_patch_level();
+ bool isDeviceIdAttestationRequired();
bool Curve25519Supported();
diff --git a/security/keymint/aidl/vts/functional/KeyMintTest.cpp b/security/keymint/aidl/vts/functional/KeyMintTest.cpp
index 3aa09fa..e73f46c 100644
--- a/security/keymint/aidl/vts/functional/KeyMintTest.cpp
+++ b/security/keymint/aidl/vts/functional/KeyMintTest.cpp
@@ -1986,8 +1986,8 @@
if (SecLevel() == SecurityLevel::STRONGBOX) {
if (result == ErrorCode::ATTESTATION_KEYS_NOT_PROVISIONED) return;
}
- if (result == ErrorCode::CANNOT_ATTEST_IDS) {
- // Device ID attestation is optional; KeyMint may not support it at all.
+ if (result == ErrorCode::CANNOT_ATTEST_IDS && !isDeviceIdAttestationRequired()) {
+ // ID attestation was optional till api level 32, from api level 33 it is mandatory.
continue;
}
ASSERT_EQ(result, ErrorCode::OK);
diff --git a/wifi/1.6/default/hidl_struct_util.cpp b/wifi/1.6/default/hidl_struct_util.cpp
index 45459e2..2112b26 100644
--- a/wifi/1.6/default/hidl_struct_util.cpp
+++ b/wifi/1.6/default/hidl_struct_util.cpp
@@ -1881,7 +1881,7 @@
"ifaceName too long";
return false;
}
- strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
+ strlcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
legacy_request->ndp_cfg.security_cfg =
(hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
? legacy_hal::NAN_DP_CONFIG_SECURITY
@@ -1958,7 +1958,7 @@
"ifaceName too long";
return false;
}
- strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
+ strlcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
legacy_request->ndp_cfg.security_cfg =
(hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
? legacy_hal::NAN_DP_CONFIG_SECURITY
@@ -2039,7 +2039,7 @@
"ifaceName too long";
return false;
}
- strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
+ strlcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
legacy_request->ndp_cfg.security_cfg =
(hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
? legacy_hal::NAN_DP_CONFIG_SECURITY
@@ -2114,7 +2114,7 @@
"ifaceName too long";
return false;
}
- strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
+ strlcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
legacy_request->ndp_cfg.security_cfg =
(hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
? legacy_hal::NAN_DP_CONFIG_SECURITY
diff --git a/wifi/1.6/default/wifi_chip.cpp b/wifi/1.6/default/wifi_chip.cpp
index 6cc1235..7f0e97d 100644
--- a/wifi/1.6/default/wifi_chip.cpp
+++ b/wifi/1.6/default/wifi_chip.cpp
@@ -131,7 +131,7 @@
if (strncmp(buffer.data(), P2P_MGMT_DEVICE_PREFIX, strlen(P2P_MGMT_DEVICE_PREFIX)) == 0) {
/* Get the p2p parent interface name from p2p device interface name set
* in property */
- strncpy(p2pParentIfname, buffer.data() + strlen(P2P_MGMT_DEVICE_PREFIX),
+ strlcpy(p2pParentIfname, buffer.data() + strlen(P2P_MGMT_DEVICE_PREFIX),
strlen(buffer.data()) - strlen(P2P_MGMT_DEVICE_PREFIX));
if (property_get(kActiveWlanIfaceNameProperty, primaryIfaceName.data(), nullptr) == 0) {
return buffer.data();
@@ -217,14 +217,15 @@
// Helper function for |cpioArchiveFilesInDir|
bool cpioWriteHeader(int out_fd, struct stat& st, const char* file_name, size_t file_name_len) {
- std::array<char, 32 * 1024> read_buf;
- ssize_t llen =
- sprintf(read_buf.data(), "%s%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X",
- kCpioMagic, static_cast<int>(st.st_ino), st.st_mode, st.st_uid, st.st_gid,
- static_cast<int>(st.st_nlink), static_cast<int>(st.st_mtime),
- static_cast<int>(st.st_size), major(st.st_dev), minor(st.st_dev),
- major(st.st_rdev), minor(st.st_rdev), static_cast<uint32_t>(file_name_len), 0);
- if (write(out_fd, read_buf.data(), llen) == -1) {
+ const int buf_size = 32 * 1024;
+ std::array<char, buf_size> read_buf;
+ ssize_t llen = snprintf(
+ read_buf.data(), buf_size, "%s%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X",
+ kCpioMagic, static_cast<int>(st.st_ino), st.st_mode, st.st_uid, st.st_gid,
+ static_cast<int>(st.st_nlink), static_cast<int>(st.st_mtime),
+ static_cast<int>(st.st_size), major(st.st_dev), minor(st.st_dev), major(st.st_rdev),
+ minor(st.st_rdev), static_cast<uint32_t>(file_name_len), 0);
+ if (write(out_fd, read_buf.data(), llen < buf_size ? llen : buf_size - 1) == -1) {
PLOG(ERROR) << "Error writing cpio header to file " << file_name;
return false;
}
@@ -282,10 +283,11 @@
// Helper function for |cpioArchiveFilesInDir|
bool cpioWriteFileTrailer(int out_fd) {
- std::array<char, 4096> read_buf;
+ const int buf_size = 4096;
+ std::array<char, buf_size> read_buf;
read_buf.fill(0);
- if (write(out_fd, read_buf.data(),
- sprintf(read_buf.data(), "070701%040X%056X%08XTRAILER!!!", 1, 0x0b, 0) + 4) == -1) {
+ ssize_t llen = snprintf(read_buf.data(), 4096, "070701%040X%056X%08XTRAILER!!!", 1, 0x0b, 0);
+ if (write(out_fd, read_buf.data(), (llen < buf_size ? llen : buf_size - 1) + 4) == -1) {
PLOG(ERROR) << "Error writing trailing bytes";
return false;
}
diff --git a/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp b/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp
index c1f2bb7..bd2649f 100644
--- a/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp
+++ b/wifi/hostapd/aidl/vts/functional/VtsHalHostapdTargetTest.cpp
@@ -32,6 +32,7 @@
using aidl::android::hardware::wifi::hostapd::BandMask;
using aidl::android::hardware::wifi::hostapd::BnHostapdCallback;
+using aidl::android::hardware::wifi::hostapd::ChannelBandwidth;
using aidl::android::hardware::wifi::hostapd::ChannelParams;
using aidl::android::hardware::wifi::hostapd::DebugLevel;
using aidl::android::hardware::wifi::hostapd::EncryptionType;
@@ -44,7 +45,6 @@
namespace {
const unsigned char kNwSsid[] = {'t', 'e', 's', 't', '1', '2', '3', '4', '5'};
-const std::string kIfaceName = "wlan0";
const std::string kPassphrase = "test12345";
const std::string kInvalidMinPassphrase = "test";
const std::string kInvalidMaxPassphrase =
@@ -123,6 +123,7 @@
iface_params.hwModeParams.enable80211AC = false;
iface_params.hwModeParams.enable80211AX = false;
iface_params.hwModeParams.enable6GhzBand = false;
+ iface_params.hwModeParams.maximumChannelBandwidth = ChannelBandwidth::BANDWIDTH_20;
channelParams.enableAcs = false;
channelParams.acsShouldExcludeDfs = false;
@@ -284,8 +285,8 @@
*/
TEST_P(HostapdAidl, AddPskAccessPointWithAcs) {
if (!isAcsSupport) GTEST_SKIP() << "Missing ACS support";
- auto status = hostapd->addAccessPoint(getIfaceParamsWithAcs(kIfaceName),
- getPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithAcs(ifname), getPskNwParams());
EXPECT_TRUE(status.isOk());
}
@@ -295,8 +296,9 @@
*/
TEST_P(HostapdAidl, AddPskAccessPointWithAcsAndFreqRange) {
if (!isAcsSupport) GTEST_SKIP() << "Missing ACS support";
- auto status = hostapd->addAccessPoint(
- getIfaceParamsWithAcsAndFreqRange(kIfaceName), getPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status =
+ hostapd->addAccessPoint(getIfaceParamsWithAcsAndFreqRange(ifname), getPskNwParams());
EXPECT_TRUE(status.isOk());
}
@@ -306,8 +308,9 @@
*/
TEST_P(HostapdAidl, AddPskAccessPointWithAcsAndInvalidFreqRange) {
if (!isAcsSupport) GTEST_SKIP() << "Missing ACS support";
- auto status = hostapd->addAccessPoint(
- getIfaceParamsWithAcsAndInvalidFreqRange(kIfaceName), getPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithAcsAndInvalidFreqRange(ifname),
+ getPskNwParams());
EXPECT_FALSE(status.isOk());
}
@@ -317,8 +320,8 @@
*/
TEST_P(HostapdAidl, AddOpenAccessPointWithAcs) {
if (!isAcsSupport) GTEST_SKIP() << "Missing ACS support";
- auto status = hostapd->addAccessPoint(getIfaceParamsWithAcs(kIfaceName),
- getOpenNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithAcs(ifname), getOpenNwParams());
EXPECT_TRUE(status.isOk());
}
@@ -327,8 +330,8 @@
* Access point creation should pass.
*/
TEST_P(HostapdAidl, AddPskAccessPointWithoutAcs) {
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getPskNwParams());
EXPECT_TRUE(status.isOk());
}
@@ -337,7 +340,8 @@
* Access point creation should pass.
*/
TEST_P(HostapdAidl, AddPskAccessPointWithoutAcsAndNonMetered) {
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname),
getPskNwParamsWithNonMetered());
EXPECT_TRUE(status.isOk());
}
@@ -347,8 +351,8 @@
* Access point creation should pass.
*/
TEST_P(HostapdAidl, AddOpenAccessPointWithoutAcs) {
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getOpenNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getOpenNwParams());
EXPECT_TRUE(status.isOk());
}
@@ -358,8 +362,9 @@
*/
TEST_P(HostapdAidl, AddSaeTransitionAccessPointWithoutAcs) {
if (!isWpa3SaeSupport) GTEST_SKIP() << "Missing SAE support";
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getSaeTransitionNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status =
+ hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getSaeTransitionNwParams());
EXPECT_TRUE(status.isOk());
}
@@ -369,8 +374,8 @@
*/
TEST_P(HostapdAidl, AddSAEAccessPointWithoutAcs) {
if (!isWpa3SaeSupport) GTEST_SKIP() << "Missing SAE support";
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getSaeNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getSaeNwParams());
EXPECT_TRUE(status.isOk());
}
@@ -380,10 +385,10 @@
*/
TEST_P(HostapdAidl, RemoveAccessPointWithAcs) {
if (!isAcsSupport) GTEST_SKIP() << "Missing ACS support";
- auto status = hostapd->addAccessPoint(getIfaceParamsWithAcs(kIfaceName),
- getPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithAcs(ifname), getPskNwParams());
EXPECT_TRUE(status.isOk());
- EXPECT_TRUE(hostapd->removeAccessPoint(kIfaceName).isOk());
+ EXPECT_TRUE(hostapd->removeAccessPoint(ifname).isOk());
}
/**
@@ -391,10 +396,10 @@
* Access point creation & removal should pass.
*/
TEST_P(HostapdAidl, RemoveAccessPointWithoutAcs) {
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getPskNwParams());
EXPECT_TRUE(status.isOk());
- EXPECT_TRUE(hostapd->removeAccessPoint(kIfaceName).isOk());
+ EXPECT_TRUE(hostapd->removeAccessPoint(ifname).isOk());
}
/**
@@ -402,8 +407,9 @@
* Access point creation should fail.
*/
TEST_P(HostapdAidl, AddPskAccessPointWithInvalidChannel) {
- auto status = hostapd->addAccessPoint(
- getIfaceParamsWithInvalidChannel(kIfaceName), getPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status =
+ hostapd->addAccessPoint(getIfaceParamsWithInvalidChannel(ifname), getPskNwParams());
EXPECT_FALSE(status.isOk());
}
@@ -412,8 +418,9 @@
* Access point creation should fail.
*/
TEST_P(HostapdAidl, AddInvalidPskAccessPointWithoutAcs) {
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getInvalidPskNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status =
+ hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getInvalidPskNwParams());
EXPECT_FALSE(status.isOk());
}
@@ -422,8 +429,9 @@
* Access point creation should fail.
*/
TEST_P(HostapdAidl, AddInvalidSaeTransitionAccessPointWithoutAcs) {
+ std::string ifname = setupApIfaceAndGetName(false);
if (!isWpa3SaeSupport) GTEST_SKIP() << "Missing SAE support";
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname),
getInvalidSaeTransitionNwParams());
EXPECT_FALSE(status.isOk());
}
@@ -433,9 +441,10 @@
* Access point creation should fail.
*/
TEST_P(HostapdAidl, AddInvalidSaeAccessPointWithoutAcs) {
+ std::string ifname = setupApIfaceAndGetName(false);
if (!isWpa3SaeSupport) GTEST_SKIP() << "Missing SAE support";
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getInvalidSaeNwParams());
+ auto status =
+ hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getInvalidSaeNwParams());
EXPECT_FALSE(status.isOk());
}
@@ -443,12 +452,11 @@
* forceClientDisconnect should fail when hotspot interface available.
*/
TEST_P(HostapdAidl, DisconnectClientWhenIfacAvailable) {
- auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(kIfaceName),
- getOpenNwParams());
+ std::string ifname = setupApIfaceAndGetName(false);
+ auto status = hostapd->addAccessPoint(getIfaceParamsWithoutAcs(ifname), getOpenNwParams());
EXPECT_TRUE(status.isOk());
- status = hostapd->forceClientDisconnect(kIfaceName, kTestZeroMacAddr,
- kTestDisconnectReasonCode);
+ status = hostapd->forceClientDisconnect(ifname, kTestZeroMacAddr, kTestDisconnectReasonCode);
EXPECT_FALSE(status.isOk());
}