[Silabs] Bugfix/silabs lock app aliro fix (#36300)
* [SL-UP] 917 static variable retention fix (#79)
* [SL-UP] Doorlock featuremap Aliro Removal (#80)
diff --git a/examples/lock-app/silabs/data_model/lock-app.matter b/examples/lock-app/silabs/data_model/lock-app.matter
index 512435d..8a7695c 100644
--- a/examples/lock-app/silabs/data_model/lock-app.matter
+++ b/examples/lock-app/silabs/data_model/lock-app.matter
@@ -3261,7 +3261,7 @@
callback attribute generatedCommandList;
callback attribute acceptedCommandList;
callback attribute attributeList;
- ram attribute featureMap default = 0x7DB3;
+ ram attribute featureMap default = 0x1DB3;
ram attribute clusterRevision default = 7;
handle command LockDoor;
diff --git a/examples/lock-app/silabs/data_model/lock-app.zap b/examples/lock-app/silabs/data_model/lock-app.zap
index a10a27e..e3488a6 100644
--- a/examples/lock-app/silabs/data_model/lock-app.zap
+++ b/examples/lock-app/silabs/data_model/lock-app.zap
@@ -6188,7 +6188,7 @@
"storageOption": "RAM",
"singleton": 0,
"bounded": 0,
- "defaultValue": "0x7DB3",
+ "defaultValue": "0x1DB3",
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
diff --git a/examples/lock-app/silabs/include/LockManager.h b/examples/lock-app/silabs/include/LockManager.h
index 7345782..00a4407 100644
--- a/examples/lock-app/silabs/include/LockManager.h
+++ b/examples/lock-app/silabs/include/LockManager.h
@@ -199,10 +199,12 @@
private:
struct UnlatchContext
{
+ static constexpr uint8_t kMaxPinLength = UINT8_MAX;
+ uint8_t mPinBuffer[kMaxPinLength];
+ uint8_t mPinLength;
chip::EndpointId mEndpointId;
Nullable<chip::FabricIndex> mFabricIdx;
Nullable<chip::NodeId> mNodeId;
- Optional<chip::ByteSpan> mPin;
OperationErrorEnum mErr;
void Update(chip::EndpointId endpointId, const Nullable<chip::FabricIndex> & fabricIdx,
@@ -211,8 +213,18 @@
mEndpointId = endpointId;
mFabricIdx = fabricIdx;
mNodeId = nodeId;
- mPin = pin;
mErr = err;
+
+ if (pin.HasValue())
+ {
+ memcpy(mPinBuffer, pin.Value().data(), pin.Value().size());
+ mPinLength = static_cast<uint8_t>(pin.Value().size());
+ }
+ else
+ {
+ memset(mPinBuffer, 0, kMaxPinLength);
+ mPinLength = 0;
+ }
}
};
UnlatchContext mUnlatchContext;
@@ -242,11 +254,7 @@
uint8_t mCredentialData[kNumCredentialTypes][kMaxCredentials][kMaxCredentialSize];
CredentialStruct mCredentials[kMaxUsers][kMaxCredentials];
- static LockManager sLock;
EFR32DoorLock::LockInitParams::LockParam LockParams;
};
-inline LockManager & LockMgr()
-{
- return LockManager::sLock;
-}
+LockManager & LockMgr();
diff --git a/examples/lock-app/silabs/src/LockManager.cpp b/examples/lock-app/silabs/src/LockManager.cpp
index 04527e5..1a4fd93 100644
--- a/examples/lock-app/silabs/src/LockManager.cpp
+++ b/examples/lock-app/silabs/src/LockManager.cpp
@@ -25,11 +25,18 @@
#include <cstring>
#include <lib/support/logging/CHIPLogging.h>
-LockManager LockManager::sLock;
-
using namespace ::chip::DeviceLayer::Internal;
using namespace EFR32DoorLock::LockInitParams;
+namespace {
+LockManager sLock;
+} // namespace
+
+LockManager & LockMgr()
+{
+ return sLock;
+}
+
CHIP_ERROR LockManager::Init(chip::app::DataModel::Nullable<chip::app::Clusters::DoorLock::DlLockState> state, LockParam lockParam)
{
@@ -257,8 +264,9 @@
bool succes = false;
if (mUnlatchContext.mEndpointId != kInvalidEndpointId)
{
- succes = setLockState(mUnlatchContext.mEndpointId, mUnlatchContext.mFabricIdx, mUnlatchContext.mNodeId,
- DlLockState::kUnlocked, mUnlatchContext.mPin, mUnlatchContext.mErr);
+ succes = setLockState(
+ mUnlatchContext.mEndpointId, mUnlatchContext.mFabricIdx, mUnlatchContext.mNodeId, DlLockState::kUnlocked,
+ MakeOptional(chip::ByteSpan(mUnlatchContext.mPinBuffer, mUnlatchContext.mPinLength)), mUnlatchContext.mErr);
}
if (!succes)