diff --git a/lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_sm_conn_slave.c b/lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_sm_conn_slave.c index 55cb910926fee6db1c93233b664882a11cebe5dc..ce3334e782fdacc1ca7c8bc57a72ab49ac2b1539 100644 --- a/lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_sm_conn_slave.c +++ b/lib/sdk/Libraries/BTLE/link_layer/controller/sources/ble/lctr/lctr_sm_conn_slave.c @@ -217,6 +217,15 @@ void lctrConnStatelessEventHandler(lctrConnCtx_t *pCtx, uint8_t event) { case LCTR_CONN_TERMINATED: LL_TRACE_INFO2("lctrConnStatelessEventHandler: handle=%u, state=%u, event=TERMINATED", LCTR_GET_CONN_HANDLE(pCtx), pCtx->state); + + /* card10 HACK: + * After an encrypted connection is closed, the stack does not instruct the radio to turn off encryption again. + * There is no direct interface to this either. lctrCalcSessionKey() does transfer the flag though. */ + lctrDisableTxDataEnc(pCtx); + lctrDisableRxDataEnc(pCtx); + lctrCalcSessionKey(pCtx); + /*END card10 HACK */ + lctrNotifyHostDisconnectInd(pCtx); lctrFreeConnCtx(pCtx); break;