@@ -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+
96116AliroError 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+
188226bool AccessManagerImpl::VerifyPublicKey (const CryptoTypes::PublicKey &userPublicKey)
189227{
190228 LOG_DBG (" Verifying public key against %zu stored keys" , mStoredKeyCount );
0 commit comments