Skip to content

Commit c50d010

Browse files
committed
Adding reservoir polling when sentry listening is disabled.
Also, refactoring some device connection assertion code from LoopDataManager to DeviceDataManager Fixes #1
1 parent f88cbbe commit c50d010

File tree

3 files changed

+53
-17
lines changed

3 files changed

+53
-17
lines changed

Loop/Managers/DeviceDataManager.swift

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,51 @@ class DeviceDataManager: NSObject, CarbStoreDelegate, TransmitterDelegate, WCSes
187187
}
188188
}
189189

190+
/**
191+
Ensures pump data is current by either waking and polling, or ensuring we're listening to sentry packets.
192+
*/
193+
private func assertCurrentPumpData() {
194+
guard let device = rileyLinkManager.firstConnectedDevice else {
195+
return
196+
}
197+
198+
// TODO: Allow RileyLinkManager to enable/disable idle listening
199+
device.assertIdleListening()
200+
201+
// How long should we wait before we poll for new reservoir data?
202+
let reservoirTolerance = sentryEnabled ? NSTimeInterval(minutes: 11) : NSTimeInterval(minutes: 1)
203+
204+
// If we don't yet have reservoir data, or it's old, poll for it.
205+
if latestReservoirValue == nil || latestReservoirValue!.startDate.timeIntervalSinceNow <= -reservoirTolerance {
206+
device.ops?.readRemainingInsulin { (result) in
207+
switch result {
208+
case .Success(let units):
209+
self.updateReservoirVolume(units, atDate: NSDate(), withTimeLeft: nil)
210+
case .Failure:
211+
// Try to troubleshoot communications errors with the pump
212+
213+
// How long should we wait before we re-tune the RileyLink?
214+
let tuneTolerance = NSTimeInterval(minutes: 14)
215+
216+
if device.lastTuned?.timeIntervalSinceNow <= -tuneTolerance {
217+
device.tunePumpWithResultHandler { (result) in
218+
switch result {
219+
case .Success(let scanResult):
220+
self.logger?.addError("Device auto-tuned to \(scanResult.bestFrequency) MHz", fromSource: "RileyLink")
221+
case .Failure(let error):
222+
self.logger?.addError("Device auto-tune failed with error: \(error)", fromSource: "RileyLink")
223+
}
224+
}
225+
}
226+
}
227+
}
228+
}
229+
}
230+
190231
// MARK: - G5 Transmitter
232+
/**
233+
The G5 transmitter is a reliable heartbeat by which we can assert the loop state.
234+
*/
191235

192236
// MARK: TransmitterDelegate
193237

@@ -198,7 +242,7 @@ class DeviceDataManager: NSObject, CarbStoreDelegate, TransmitterDelegate, WCSes
198242
], toCollection: "g5"
199243
)
200244

201-
rileyLinkManager.firstConnectedDevice?.assertIdleListening()
245+
assertCurrentPumpData()
202246
}
203247

204248
func transmitter(transmitter: Transmitter, didReadGlucose glucose: GlucoseRxMessage) {
@@ -226,7 +270,7 @@ class DeviceDataManager: NSObject, CarbStoreDelegate, TransmitterDelegate, WCSes
226270
}
227271
}
228272

229-
rileyLinkManager.firstConnectedDevice?.assertIdleListening()
273+
assertCurrentPumpData()
230274
}
231275

232276
// MARK: G5 data
@@ -371,6 +415,10 @@ class DeviceDataManager: NSObject, CarbStoreDelegate, TransmitterDelegate, WCSes
371415
}
372416
}
373417
case "pumpModel"?:
418+
if let sentrySupported = pumpState?.pumpModel?.larger where !sentrySupported {
419+
sentryEnabled = false
420+
}
421+
374422
NSUserDefaults.standardUserDefaults().pumpModelNumber = pumpState?.pumpModel?.rawValue
375423
case "lastHistoryDump"?, "awakeUntil"?:
376424
break
@@ -472,6 +520,9 @@ class DeviceDataManager: NSObject, CarbStoreDelegate, TransmitterDelegate, WCSes
472520
}
473521
}
474522

523+
/// Whether the RileyLink should listen for sentry packets.
524+
var sentryEnabled: Bool = true
525+
475526
// MARK: - CarbKit
476527

477528
let carbStore: CarbStore?

Loop/Managers/LoopDataManager.swift

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,6 @@ class LoopDataManager {
5656
dispatch_async(self.dataAccessQueue) {
5757
self.glucoseMomentumEffect = nil
5858
self.notify()
59-
60-
// Try to troubleshoot communications errors with the pump
61-
if let pumpStatusDate = self.deviceDataManager.latestReservoirValue?.startDate where pumpStatusDate.timeIntervalSinceNow < NSTimeInterval(minutes: -15),
62-
let device = self.deviceDataManager.rileyLinkManager.firstConnectedDevice where device.lastTuned?.timeIntervalSinceNow < NSTimeInterval(minutes: -15) {
63-
device.tunePumpWithResultHandler { (result) in
64-
switch result {
65-
case .Success(let scanResult):
66-
self.deviceDataManager.logger?.addError("Device auto-tuned to \(scanResult.bestFrequency) MHz", fromSource: "RileyLink")
67-
case .Failure(let error):
68-
self.deviceDataManager.logger?.addError("Device auto-tune failed with error: \(error)", fromSource: "RileyLink")
69-
}
70-
}
71-
}
7259
}
7360
},
7461
center.addObserverForName(DeviceDataManager.PumpStatusUpdatedNotification, object: deviceDataManager, queue: nil) { (note) -> Void in

Loop/Views/ReservoirVolumeHUDView.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ class ReservoirVolumeHUDView: HUDView {
2424
didSet {
2525
if let volume = reservoirVolume, units = numberFormatter.stringFromNumber(volume) {
2626
caption.text = "\(units) U"
27-
} else {
28-
caption.text = nil
2927
}
3028
}
3129
}

0 commit comments

Comments
 (0)