Jelajahi Sumber

Correct estimated delay for RL

Jonas Björkert 1 tahun lalu
induk
melakukan
f1160992d5

+ 16 - 1
LoopFollow/BackgroundRefresh/BT/BLEManager.swift

@@ -228,11 +228,26 @@ extension BLEManager {
             return nil
         }
 
+        let heartbeatLast: Date? = {
+            if matchedType.estimatedDelayBasedOnHeartbeat {
+                guard device.isConnected, let lastHeartbeat = activeDevice?.lastHeartbeatTime else {
+                    return nil
+                }
+                return lastHeartbeat
+            } else {
+                return device.lastSeen
+            }
+        }()
+
+        guard let heartbeatLast = heartbeatLast else {
+            return nil
+        }
+
         let pollingDelay: TimeInterval = Double(UserDefaultsRepository.bgUpdateDelay.value)
 
         let expectedOffset = sensorOffset + pollingDelay
 
-        let effectiveDelay = CycleHelper.computeDelay(sensorOffset: expectedOffset, heartbeatLast: device.lastSeen, heartbeatInterval: heartBeatInterval)
+        let effectiveDelay = CycleHelper.computeDelay(sensorOffset: expectedOffset, heartbeatLast: heartbeatLast, heartbeatInterval: heartBeatInterval)
 
         return "\(Int(effectiveDelay)) sec"
     }

+ 0 - 2
LoopFollow/BackgroundRefresh/BT/Devices/RileyLinkHeartbeatBluetoothDevice.swift

@@ -27,8 +27,6 @@ class RileyLinkHeartbeatBluetoothDevice: BluetoothDevice {
 
     override func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
         super.centralManager(central, didConnect: peripheral)
-
-        self.bluetoothDeviceDelegate?.heartBeat()
     }
 
     override func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

+ 9 - 0
LoopFollow/BackgroundRefresh/BackgroundRefreshType.swift

@@ -34,6 +34,15 @@ enum BackgroundRefreshType: String, Codable, CaseIterable {
         }
     }
 
+    var estimatedDelayBasedOnHeartbeat: Bool {
+        switch self {
+        case .rileyLink:
+            return true
+        case .dexcom, .silentTune, .none:
+            return false
+        }
+    }
+
     /// Determines if a BLEDevice matches the specific device type
     func matches(_ device: BLEDevice) -> Bool {
         switch self {