77import json
88
99from .core import log_info , log_warn , ble , register_irq_handler
10- from .device import DeviceConnection
10+ from .device import DeviceConnection , Device
1111
1212_IRQ_ENCRYPTION_UPDATE = const (28 )
1313_IRQ_GET_SECRET = const (29 )
@@ -72,6 +72,15 @@ def _save_secrets(arg=None):
7272 _modified = False
7373
7474
75+ def _get_connection (key ) -> DeviceConnection :
76+ if not key :
77+ return None
78+ addr = bytes (reversed (key [- 6 :]))
79+ for connection in DeviceConnection ._connected .values ():
80+ if connection .device .addr == addr :
81+ return connection
82+
83+
7584def _security_irq (event , data ):
7685 global _modified
7786
@@ -84,6 +93,7 @@ def _security_irq(event, data):
8493 connection .authenticated = authenticated
8594 connection .bonded = bonded
8695 connection .key_size = key_size
96+ connection .pairing_in_progress = False
8797 # TODO: Handle failure.
8898 if encrypted and connection ._pair_event :
8999 connection ._pair_event .set ()
@@ -128,6 +138,12 @@ def _security_irq(event, data):
128138 else :
129139 # Return the secret for this key (or None).
130140 key = sec_type , bytes (key )
141+
142+ if sec_type in SEC_TYPES_PEER :
143+ if conn := _get_connection (key ):
144+ log_info ("encryption / pairing started" , conn )
145+ conn .pairing_in_progress = True
146+
131147 return _secrets .get (key , None )
132148
133149 elif event == _IRQ_PASSKEY_ACTION :
0 commit comments