Przeglądaj źródła

Heartbeat based on glucose, not pump

Ivan Valkou 5 lat temu
rodzic
commit
3ade9d9e42

+ 2 - 2
FreeAPS.xcodeproj/project.pbxproj

@@ -1950,7 +1950,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = Automatic;
 				DEVELOPMENT_ASSET_PATHS = "";
-				DEVELOPMENT_TEAM = "";
+				DEVELOPMENT_TEAM = BA7ZHP4963;
 				ENABLE_PREVIEWS = YES;
 				INFOPLIST_FILE = FreeAPS/Resources/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
@@ -1975,7 +1975,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = Automatic;
 				DEVELOPMENT_ASSET_PATHS = "";
-				DEVELOPMENT_TEAM = "";
+				DEVELOPMENT_TEAM = BA7ZHP4963;
 				ENABLE_PREVIEWS = YES;
 				INFOPLIST_FILE = FreeAPS/Resources/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;

+ 3 - 3
FreeAPS/Sources/APS/APSManager.swift

@@ -6,7 +6,7 @@ import SwiftDate
 import Swinject
 
 protocol APSManager {
-    func heartbeatNow()
+    func heartbeat(force: Bool)
     func autotune() -> AnyPublisher<Autotune?, Never>
     func enactBolus(amount: Double)
     var pumpManager: PumpManagerUI? { get set }
@@ -78,8 +78,8 @@ final class BaseAPSManager: APSManager, Injectable {
         pumpManager?.addStatusObserver(self, queue: processQueue)
     }
 
-    func heartbeatNow() {
-        deviceDataManager.heartbeat()
+    func heartbeat(force: Bool) {
+        deviceDataManager.heartbeat(force: force)
     }
 
     private func fetchAndLoop() {

+ 11 - 11
FreeAPS/Sources/APS/DeviceDataManager.swift

@@ -15,7 +15,7 @@ protocol DeviceDataManager {
     var recommendsLoop: PassthroughSubject<Void, Never> { get }
     var pumpName: CurrentValueSubject<String, Never> { get }
     var pumpExpiresAtDate: CurrentValueSubject<Date?, Never> { get }
-    func heartbeat()
+    func heartbeat(force: Bool)
 }
 
 private let staticPumpManagers: [PumpManagerUI.Type] = [
@@ -73,7 +73,6 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         injectServices(resolver)
         setupPumpManager()
         UIDevice.current.isBatteryMonitoringEnabled = true
-        updatePumpData()
     }
 
     func setupPumpManager() {
@@ -82,7 +81,9 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         }
     }
 
-    private func updatePumpData() {
+    @SyncAccess(lock: accessLock) private var pumpUpdateInProgress = false
+
+    func heartbeat(force: Bool) {
         let now = Date()
         var updateInterval: TimeInterval = 5.minutes.timeInterval
 
@@ -96,17 +97,16 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         }
 
         let interval = now.timeIntervalSince(lastHeartBeatTime)
-        guard interval >= updateInterval else {
+        guard force || interval >= updateInterval else {
             debug(.deviceManager, "Last hearbeat \(interval / 60) min ago, skip updating the pump data")
             return
         }
 
-        heartbeat()
+        lastHeartBeatTime = Date()
+        updatePumpData()
     }
 
-    @SyncAccess(lock: accessLock) private var pumpUpdateInProgress = false
-
-    func heartbeat() {
+    private func updatePumpData() {
         guard let pumpManager = pumpManager else {
             debug(.deviceManager, "Pump is not set, skip updating")
             return
@@ -117,7 +117,7 @@ final class BaseDeviceDataManager: DeviceDataManager, Injectable {
         }
         debug(.deviceManager, "Start updating the pump data")
         pumpUpdateInProgress = true
-        lastHeartBeatTime = Date()
+
         pumpManager.ensureCurrentPumpData {
             debug(.deviceManager, "Pump Data updated")
             self.pumpUpdateInProgress = false
@@ -158,11 +158,11 @@ extension BaseDeviceDataManager: PumpManagerDelegate {
 
     func pumpManagerBLEHeartbeatDidFire(_: PumpManager) {
         debug(.deviceManager, "Pump Heartbeat")
-        updatePumpData()
+        heartbeat(force: false)
     }
 
     func pumpManagerMustProvideBLEHeartbeat(_: PumpManager) -> Bool {
-        true
+        false // set it true for Medtronic CGM
     }
 
     func pumpManager(_ pumpManager: PumpManager, didUpdate status: PumpManagerStatus, oldStatus _: PumpManagerStatus) {

+ 10 - 8
FreeAPS/Sources/APS/GlucoseManager.swift

@@ -12,7 +12,7 @@ final class BaseGlucoseManager: GlucoseManager, Injectable {
     @Injected() var apsManager: APSManager!
 
     private var lifetime = Set<AnyCancellable>()
-    private let timer = DispatchTimer(timeInterval: 10)
+    private let timer = DispatchTimer(timeInterval: 1.minutes.timeInterval)
 
     init(resolver: Resolver) {
         injectServices(resolver)
@@ -22,16 +22,18 @@ final class BaseGlucoseManager: GlucoseManager, Injectable {
     private func subscribe() {
         timer.publisher
             .receive(on: processQueue)
-            .flatMap { date -> AnyPublisher<[BloodGlucose], Never> in
-                guard self.glucoseStogare.syncDate().timeIntervalSince1970 <= date.timeIntervalSince1970
-                else {
-                    return Just([]).eraseToAnyPublisher()
-                }
+            .flatMap { _ -> AnyPublisher<[BloodGlucose], Never> in
+                debug(.nightscout, "Glucose manager heartbeat")
+                debug(.nightscout, "Start fetching glucose")
                 return self.nightscoutManager.fetchGlucose()
             }
             .sink { glucose in
-                if !self.glucoseStogare.filterTooFrequentGlucose(glucose).isEmpty {
-                    self.apsManager.heartbeatNow()
+                let filtered = self.glucoseStogare.filterTooFrequentGlucose(glucose)
+                if !filtered.isEmpty {
+                    debug(.nightscout, "New glucose found")
+                    self.apsManager.heartbeat(force: true)
+                } else {
+                    self.apsManager.heartbeat(force: false)
                 }
             }
             .store(in: &lifetime)

+ 1 - 1
FreeAPS/Sources/Modules/Home/HomeProvider.swift

@@ -19,7 +19,7 @@ extension Home {
         }
 
         func heartbeatNow() {
-            apsManager.heartbeatNow()
+            apsManager.heartbeat(force: true)
         }
 
         func filteredGlucose(hours: Int) -> [BloodGlucose] {

+ 2 - 2
FreeAPS/Sources/Modules/Home/View/Header/CurrentGlucoseView.swift

@@ -39,8 +39,8 @@ struct CurrentGlucoseView: View {
                             glucoseFormatter
                                 .string(from: Double(units == .mmolL ? $0.asMmolL : Decimal($0)) as NSNumber)! }
                         ?? "--"
-                )
-                .font(.system(size: 24, weight: .bold))
+                ).minimumScaleFactor(0.2)
+                    .font(.system(size: 24, weight: .bold))
                 image.padding(.bottom, 2)
 
             }.padding(.leading, 4)