fix: slash BLE timeouts to match Android optimizations #19
1 changed files with 9 additions and 9 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue