close
Closes the connection to the device.
Implementations that perform potentially-blocking teardown (e.g. BLE GATT disconnect) MUST run that work inside withContext(NonCancellable) so a cancelled caller cannot skip cleanup, leaving the underlying resource leaked. Callers must invoke this from a coroutine — it must never be called from a blocking context (no runBlocking).