fix: slash BLE timeouts to match Android optimizations #19

Closed
schwifty wants to merge 1 commit from schwifty/slash-ble-timeouts-ios into main

View file

@ -284,14 +284,14 @@ class BeaconProvisioner: NSObject, ObservableObject {
centralManager.connect(resolvedPeripheral, options: nil)
// 15-second timeout for read operations
// 8-second timeout for read operations (was 15s slashed to match Android)
let timeout = DispatchWorkItem { [weak self] in
guard let self = self, self.operationMode == .readingConfig else { return }
DebugLog.shared.log("BLE: Read timeout reached")
self.finishRead()
}
readTimeout = timeout
DispatchQueue.main.asyncAfter(deadline: .now() + 15, execute: timeout)
DispatchQueue.main.asyncAfter(deadline: .now() + 8, execute: timeout)
}
// MARK: - State Reset
@ -428,7 +428,7 @@ class BeaconProvisioner: NSObject, ObservableObject {
passwordIndex += 1
if passwordIndex < BeaconProvisioner.DXSMART_PASSWORDS.count {
DebugLog.shared.log("BLE: Password rejected, trying next (\(passwordIndex + 1)/\(BeaconProvisioner.DXSMART_PASSWORDS.count))")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { [weak self] in
self?.authenticate()
}
} else if operationMode == .readingConfig {
@ -565,7 +565,7 @@ class BeaconProvisioner: NSObject, ObservableObject {
disconnectPeripheral()
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { [weak self] in
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in
guard let self = self, let beacon = self.currentBeacon else { return }
guard self.state == .connecting else { return }
let resolvedPeripheral = self.resolvePeripheral(beacon)
@ -824,9 +824,9 @@ class BeaconProvisioner: NSObject, ObservableObject {
private func sendNextReadQuery() {
guard dxReadQueryIndex < dxReadQueries.count else {
DebugLog.shared.log("BLE: All read queries sent, waiting 2s for final responses")
DebugLog.shared.log("BLE: All read queries sent, waiting 1s for final responses")
progress = "Collecting responses..."
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { [weak self] in
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in
guard let self = self, self.operationMode == .readingConfig else { return }
self.finishRead()
}
@ -1170,7 +1170,7 @@ extension BeaconProvisioner: CBCentralManagerDelegate {
}
state = .connecting
let delay = Double(disconnectRetryCount) + 2.0 // 3s, 4s, 5s... backoff
let delay = Double(disconnectRetryCount) + 1.0 // 2s, 3s, 4s... backoff (was +2.0)
DispatchQueue.main.asyncAfter(deadline: .now() + delay) { [weak self] in
guard let self = self, let beacon = self.currentBeacon else { return }
guard self.state == .connecting else { return }
@ -1353,8 +1353,8 @@ extension BeaconProvisioner: CBPeripheralDelegate {
state = .writing
DebugLog.shared.log("BLE: Resuming write from command \(writeIndex + 1)/\(commandQueue.count)")
progress = "Resuming config write..."
// 1.5s delay after reconnect for BLE stability
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { [weak self] in
// 0.8s delay after reconnect for BLE stability (was 1.5s)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) { [weak self] in
self?.sendNextCommand()
}
} else {