@@ -1447,6 +1447,10 @@ async def disconnect(
14471447 ) -> None :
14481448 await self .device .disconnect (self , reason )
14491449
1450+ @property
1451+ def is_disconnected (self ) -> bool :
1452+ return self not in self .device .sco_links .values ()
1453+
14501454
14511455# -----------------------------------------------------------------------------
14521456class _IsoLink :
@@ -1644,6 +1648,10 @@ async def disconnect(
16441648 ) -> None :
16451649 await self .device .disconnect (self , reason )
16461650
1651+ @property
1652+ def is_disconnected (self ) -> bool :
1653+ return self not in self .device .cis_links .values ()
1654+
16471655
16481656# -----------------------------------------------------------------------------
16491657@dataclass
@@ -1870,7 +1878,11 @@ def is_encrypted(self) -> bool:
18701878
18711879 @property
18721880 def is_incomplete (self ) -> bool :
1873- return self .handle is None
1881+ return self .handle == 0
1882+
1883+ @property
1884+ def is_disconnected (self ) -> bool :
1885+ return self not in self .device .connections .values ()
18741886
18751887 def send_l2cap_pdu (self , cid : int , pdu : bytes ) -> None :
18761888 self .device .send_l2cap_pdu (self .handle , cid , pdu )
@@ -1913,6 +1925,9 @@ async def switch_role(self, role: hci.Role) -> None:
19131925
19141926 async def sustain (self , timeout : Optional [float ] = None ) -> None :
19151927 """Idles the current task waiting for a disconnect or timeout"""
1928+ if self .is_disconnected :
1929+ # Connection already disconnected
1930+ return
19161931
19171932 abort = asyncio .get_running_loop ().create_future ()
19181933 self .on (self .EVENT_DISCONNECTION , abort .set_result )
0 commit comments