Skip to content

Commit 56a004b

Browse files
author
Rafal Miecznik
committed
CI/CD: Synchronize ncs-aliro@692b0999344b and ncs-door-lock-app
Source commit ID: @692b0999344b sync-ncs-aliro-692b0999344b-#1 Signed-off-by: Rafal Miecznik <rafal.miecznik@nordicsemi.com>
1 parent 32670f4 commit 56a004b

13 files changed

Lines changed: 263 additions & 126 deletions

File tree

app/src/access_manager_impl_custom/access_manager_impl.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,23 @@ AliroError AccessManagerImpl::_Init(const Callbacks &callbacks)
1818
return ALIRO_ERROR_NOT_IMPLEMENTED;
1919
}
2020

21-
AliroError AccessManagerImpl::_StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, bool isBleSession)
21+
AliroError AccessManagerImpl::_StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey,
22+
SessionContext sessionContext)
2223
{
23-
LOG_INF("AccessManagerImpl custom start access decision");
24+
LOG_INF("AccessManagerImpl custom start access decision for NFC session");
2425
return ALIRO_ERROR_NOT_IMPLEMENTED;
2526
}
2627

28+
#ifdef CONFIG_ALIRO_BLE_TP
29+
AliroError AccessManagerImpl::_StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey,
30+
uint32_t rangingSessionId, const CryptoTypes::Ursk &ursk,
31+
SessionContext sessionContext)
32+
{
33+
LOG_INF("AccessManagerImpl custom start access decision for BLE session");
34+
return ALIRO_ERROR_NOT_IMPLEMENTED;
35+
}
36+
#endif // CONFIG_ALIRO_BLE_TP
37+
2738
AliroError AccessManagerImpl::_AddPublicKey(const CryptoTypes::PublicKey &publicKey)
2839
{
2940
LOG_INF("AccessManagerImpl custom add public key");
@@ -46,7 +57,7 @@ void AccessManagerImpl::_SetMaxAllowedDistance(uint32_t maxDistance)
4657
LOG_INF("AccessManagerImpl custom set max allowed distance");
4758
}
4859

49-
uint32_t AccessManagerImpl::_GetMaxAllowedDistance() const
60+
uint32_t AccessManagerImpl::_GetMaxAllowedDistance()
5061
{
5162
LOG_INF("AccessManagerImpl custom get max allowed distance");
5263
return 0;
@@ -57,4 +68,9 @@ void AccessManagerImpl::_HandleRangingSessionData(const UwbRangingData &uwbData)
5768
LOG_INF("AccessManagerImpl custom handle ranging session data");
5869
}
5970

71+
void AccessManagerImpl::_HandleSessionTermination(SessionContext sessionContext)
72+
{
73+
LOG_INF("AccessManagerImpl custom handle session termination");
74+
}
75+
6076
} // namespace Aliro

app/src/access_manager_impl_custom/access_manager_impl.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,18 @@ class AccessManagerImpl : public AccessManager {
2222
friend class AccessManager;
2323

2424
AliroError _Init(const Callbacks &callbacks);
25-
AliroError _StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, bool isBleSession);
25+
AliroError _StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, SessionContext sessionContext);
26+
#ifdef CONFIG_ALIRO_BLE_TP
27+
AliroError _StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, uint32_t rangingSessionId,
28+
const CryptoTypes::Ursk &ursk, SessionContext sessionContext);
29+
#endif // CONFIG_ALIRO_BLE_TP
2630
AliroError _AddPublicKey(const CryptoTypes::PublicKey &publicKey);
2731
AliroError _RemovePublicKey(const CryptoTypes::PublicKey &publicKey);
2832
void _ClearStoredKeys();
2933
void _SetMaxAllowedDistance(uint32_t maxDistance);
30-
uint32_t _GetMaxAllowedDistance() const;
34+
uint32_t _GetMaxAllowedDistance();
3135
void _HandleRangingSessionData(const UwbRangingData &uwbData);
36+
void _HandleSessionTermination(SessionContext sessionContext);
3237
};
3338

3439
inline AccessManager &AccessManagerInstance()

app/src/access_manager_impl_default/access_manager_impl.cpp

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ AliroError AccessManagerImpl::_Init(const Callbacks &callbacks)
4444

4545
k_work_init(&mWork, [](k_work *) {
4646
LOG_DBG("Ranging start timer expired");
47-
AliroError error = Uwb::UltraWideBandImpl::Instance().InitiateRangingSession();
47+
// TODO: Workaround for one session.
48+
AliroError error = Uwb::UltraWideBandImpl::Instance().InitiateRangingSession(nullptr);
4849
VerifyOrReturn(error == ALIRO_NO_ERROR,
4950
LOG_ERR("Failed to initiate ranging session: %d", error.ToInt()));
5051
});
@@ -58,7 +59,26 @@ AliroError AccessManagerImpl::_Init(const Callbacks &callbacks)
5859
return ALIRO_NO_ERROR;
5960
}
6061

61-
AliroError AccessManagerImpl::_StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, bool isBleSession)
62+
AliroError AccessManagerImpl::_StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey,
63+
SessionContext sessionContext)
64+
{
65+
{
66+
MutexGuard lock{ mMutex };
67+
68+
// Verify if a public key is present in the Reader's database (whether the User Device is a trusted one)
69+
VerifyOrReturnStatus(VerifyPublicKey(userPublicKey), ALIRO_INVALID_ARGUMENT,
70+
LOG_INF("Provided Under Device public key not found in Access Manager database"););
71+
}
72+
73+
AccessGrantedAction();
74+
75+
return ALIRO_NO_ERROR;
76+
}
77+
78+
#ifdef CONFIG_ALIRO_BLE_TP
79+
AliroError AccessManagerImpl::_StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey,
80+
uint32_t rangingSessionId, const CryptoTypes::Ursk &ursk,
81+
SessionContext sessionContext)
6282
{
6383
#ifdef CONFIG_AUTOMATIC_RANGING_SESSION_INITIATION
6484
k_timer_stop(&mRangingStartTimer);
@@ -72,27 +92,27 @@ AliroError AccessManagerImpl::_StartAccessDecision(const CryptoTypes::PublicKey
7292
// Verify if a public key is present in the Reader's database (whether the User Device is a trusted one)
7393
VerifyOrReturnStatus(VerifyPublicKey(userPublicKey), ALIRO_INVALID_ARGUMENT,
7494
LOG_INF("Provided Under Device public key not found in Access Manager database"););
95+
96+
VerifyOrReturnStatus(mSessionContext == nullptr, ALIRO_INVALID_STATE,
97+
LOG_ERR("Ranging session already started"));
98+
99+
AliroError status = Uwb::UltraWideBandImpl::Instance().ConfigureRangingSession(rangingSessionId, ursk,
100+
sessionContext);
101+
VerifyOrReturnStatus(status == ALIRO_NO_ERROR, status,
102+
LOG_ERR("Failed to configure ranging session: %d", status.ToInt()));
103+
104+
mSessionContext = sessionContext;
75105
}
76106

77-
if (isBleSession) {
78107
#ifdef CONFIG_AUTOMATIC_RANGING_SESSION_INITIATION
79-
k_timer_start(&mRangingStartTimer, K_MSEC(kRangingStartTimeoutMs), K_NO_WAIT);
108+
k_timer_start(&mRangingStartTimer, K_MSEC(kRangingStartTimeoutMs), K_NO_WAIT);
80109
#endif // CONFIG_AUTOMATIC_RANGING_SESSION_INITIATION
81-
}
82-
// We are in the NFC session, make the decision only based on the User Device public key
83-
else {
84-
#ifdef CONFIG_ALIRO_BLE_TP
85-
AliroError status = Uwb::UltraWideBandImpl::Instance().TerminateRangingSession();
86-
VerifyOrReturnStatus(status == ALIRO_NO_ERROR || status == ALIRO_ERROR_NOT_IMPLEMENTED,
87-
ALIRO_INVALID_STATE,
88-
LOG_ERR("Cannot terminate UWB ranging session: %d", status.ToInt()));
89-
#endif // CONFIG_ALIRO_BLE_TP
90-
AccessGrantedAction();
91-
}
92110

93111
return ALIRO_NO_ERROR;
94112
}
95113

114+
#endif // CONFIG_ALIRO_BLE_TP
115+
96116
AliroError AccessManagerImpl::_AddPublicKey(const CryptoTypes::PublicKey &publicKey)
97117
{
98118
MutexGuard lock{ mMutex };
@@ -120,7 +140,8 @@ AliroError AccessManagerImpl::_RemovePublicKey(const CryptoTypes::PublicKey &pub
120140

121141
for (size_t i = 0; i < mStoredKeyCount; ++i) {
122142
if (mStoredKeys[i] == publicKey) {
123-
// Move the last key to this position instead of moving the entire array and decrement count
143+
// Move the last key to this position instead of moving the entire array and decrement
144+
// count
124145
if (i < mStoredKeyCount - 1) {
125146
mStoredKeys[i] = mStoredKeys[mStoredKeyCount - 1];
126147
}
@@ -185,6 +206,23 @@ void AccessManagerImpl::_HandleRangingSessionData(const UwbRangingData &uwbData)
185206
}
186207
}
187208

209+
void AccessManagerImpl::_HandleSessionTermination(SessionContext sessionContext)
210+
{
211+
LOG_INF("Handling session termination");
212+
213+
#ifdef CONFIG_ALIRO_BLE_TP
214+
MutexGuard lock{ mMutex };
215+
216+
if (mSessionContext == sessionContext) {
217+
mSessionContext = nullptr;
218+
219+
AliroError status = Uwb::UltraWideBandImpl::Instance().TerminateRangingSession(sessionContext);
220+
VerifyOrReturn(status == ALIRO_NO_ERROR || status == ALIRO_ERROR_NOT_IMPLEMENTED,
221+
LOG_ERR("Cannot terminate UWB ranging session: %d", status.ToInt()));
222+
}
223+
#endif // CONFIG_ALIRO_BLE_TP
224+
}
225+
188226
bool AccessManagerImpl::VerifyPublicKey(const CryptoTypes::PublicKey &userPublicKey)
189227
{
190228
LOG_DBG("Verifying public key against %zu stored keys", mStoredKeyCount);

app/src/access_manager_impl_default/access_manager_impl.h

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,26 @@ class AccessManagerImpl : public AccessManager {
3535
* @brief Starts an access decision process based on provided inputs.
3636
*
3737
* @param userPublicKey The user device public key to verify.
38-
* @param isBleSession Indicates if the access decision is being made in the BLE transport context.
38+
* @param sessionContext A pointer to the session context.
3939
*
4040
* @return ALIRO_NO_ERROR on success, error code otherwise.
4141
*/
42-
AliroError _StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, bool isBleSession);
42+
AliroError _StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, SessionContext sessionContext);
43+
44+
#ifdef CONFIG_ALIRO_BLE_TP
45+
/**
46+
* @brief Starts an access decision process based on provided inputs.
47+
*
48+
* @param userPublicKey The user device public key to verify.
49+
* @param rangingSessionId The ranging session ID.
50+
* @param ursk The ranging session key.
51+
* @param sessionContext A pointer to the session context.
52+
*
53+
* @return ALIRO_NO_ERROR on success, error code otherwise.
54+
*/
55+
AliroError _StartAccessDecision(const CryptoTypes::PublicKey &userPublicKey, uint32_t rangingSessionId,
56+
const CryptoTypes::Ursk &ursk, SessionContext sessionContext);
57+
#endif // CONFIG_ALIRO_BLE_TP
4358

4459
/**
4560
* @brief Add a new public key to the AccessManager.
@@ -85,6 +100,13 @@ class AccessManagerImpl : public AccessManager {
85100
*/
86101
void _HandleRangingSessionData(const UwbRangingData &uwbData);
87102

103+
/**
104+
* @brief Handles the session termination.
105+
*
106+
* @param sessionContext The session context.
107+
*/
108+
void _HandleSessionTermination(SessionContext sessionContext);
109+
88110
private:
89111
AccessManagerImpl() = default;
90112
~AccessManagerImpl() = default;
@@ -118,6 +140,8 @@ class AccessManagerImpl : public AccessManager {
118140
#ifdef CONFIG_ALIRO_BLE_TP
119141
// Maximum allowed distance for UWB ranging (in centimeters)
120142
uint32_t mMaxAllowedDistance{ kDefaultMaxAllowedDistance };
143+
// Session context for the current ranging session.
144+
SessionContext mSessionContext;
121145
#endif // CONFIG_ALIRO_BLE_TP
122146

123147
#ifdef CONFIG_AUTOMATIC_RANGING_SESSION_INITIATION

app/src/platform/uwb_impl/uwb_dummy_impl/uwb_impl.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,48 @@
88

99
namespace Aliro::Uwb {
1010

11-
AliroError UltraWideBandImpl::_Init([[maybe_unused]] const Callbacks &)
11+
AliroError UltraWideBandImpl::_Init([[maybe_unused]] const Callbacks &) const
1212
{
1313
return ALIRO_ERROR_NOT_IMPLEMENTED;
1414
}
1515

16-
AliroError UltraWideBandImpl::_Deinit()
16+
AliroError UltraWideBandImpl::_Deinit() const
1717
{
1818
return ALIRO_ERROR_NOT_IMPLEMENTED;
1919
}
2020

2121
void UltraWideBandImpl::_BleTimeSync()
2222
const { /* No operation for dummy implementation; override in derived classes if needed. */ };
2323

24-
AliroError UltraWideBandImpl::_HandleBleMessage([[maybe_unused]] const uint8_t *, [[maybe_unused]] size_t)
24+
AliroError UltraWideBandImpl::_HandleBleMessage([[maybe_unused]] const uint8_t *, [[maybe_unused]] size_t,
25+
[[maybe_unused]] SessionContextHandle) const
2526
{
2627
return ALIRO_ERROR_NOT_IMPLEMENTED;
2728
}
2829

2930
AliroError UltraWideBandImpl::_ConfigureRangingSession([[maybe_unused]] SessionIdentifier,
3031
[[maybe_unused]] const CryptoTypes::Ursk &,
31-
[[maybe_unused]] void *)
32+
[[maybe_unused]] SessionContextHandle) const
3233
{
3334
return ALIRO_ERROR_NOT_IMPLEMENTED;
3435
}
3536

36-
AliroError UltraWideBandImpl::_InitiateRangingSession()
37+
AliroError UltraWideBandImpl::_InitiateRangingSession([[maybe_unused]] SessionContextHandle) const
3738
{
3839
return ALIRO_ERROR_NOT_IMPLEMENTED;
3940
}
4041

41-
AliroError UltraWideBandImpl::_TerminateRangingSession()
42+
AliroError UltraWideBandImpl::_TerminateRangingSession([[maybe_unused]] SessionContextHandle) const
4243
{
4344
return ALIRO_ERROR_NOT_IMPLEMENTED;
4445
}
4546

46-
AliroError UltraWideBandImpl::_SuspendRangingSession()
47+
AliroError UltraWideBandImpl::_SuspendRangingSession([[maybe_unused]] SessionContextHandle) const
4748
{
4849
return ALIRO_ERROR_NOT_IMPLEMENTED;
4950
}
5051

51-
AliroError UltraWideBandImpl::_ResumeRangingSession()
52+
AliroError UltraWideBandImpl::_ResumeRangingSession([[maybe_unused]] SessionContextHandle) const
5253
{
5354
return ALIRO_ERROR_NOT_IMPLEMENTED;
5455
}

app/src/platform/uwb_impl/uwb_dummy_impl/uwb_impl.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@ class UltraWideBandImpl : public UltraWideBand<UltraWideBandImpl> {
3333
return sInstance;
3434
}
3535

36-
AliroError _Init([[maybe_unused]] const Callbacks &);
37-
AliroError _Deinit();
36+
AliroError _Init(const Callbacks &callbacks) const;
37+
AliroError _Deinit() const;
3838
void _BleTimeSync() const;
39-
AliroError _HandleBleMessage([[maybe_unused]] const uint8_t *, [[maybe_unused]] size_t);
40-
AliroError _ConfigureRangingSession([[maybe_unused]] SessionIdentifier,
41-
[[maybe_unused]] const CryptoTypes::Ursk &, [[maybe_unused]] void *);
42-
AliroError _InitiateRangingSession();
43-
AliroError _TerminateRangingSession();
44-
AliroError _SuspendRangingSession();
45-
AliroError _ResumeRangingSession();
39+
AliroError _HandleBleMessage(const uint8_t *data, size_t length, SessionContextHandle sessionContextData) const;
40+
AliroError _ConfigureRangingSession(SessionIdentifier sessionId, const CryptoTypes::Ursk &ursk,
41+
SessionContextHandle sessionContextData) const;
42+
AliroError _InitiateRangingSession(SessionContextHandle sessionContextData) const;
43+
AliroError _TerminateRangingSession(SessionContextHandle sessionContextData) const;
44+
AliroError _SuspendRangingSession(SessionContextHandle sessionContextData) const;
45+
AliroError _ResumeRangingSession(SessionContextHandle sessionContextData) const;
4646

4747
// Delete copy and move constructors and assignment operators.
4848
UltraWideBandImpl(const UltraWideBandImpl &) = delete;

0 commit comments

Comments
 (0)