MinimedDoseProgressEstimator.swift 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //
  2. // MinimedDoseProgressEstimator.swift
  3. // MinimedKit
  4. //
  5. // Created by Pete Schwamb on 3/14/19.
  6. // Copyright © 2019 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. import LoopKit
  10. class MinimedDoseProgressEstimator: DoseProgressTimerEstimator {
  11. let dose: DoseEntry
  12. public let pumpModel: PumpModel
  13. override var progress: DoseProgress {
  14. let elapsed = -dose.startDate.timeIntervalSinceNow
  15. let (deliveredUnits, progress) = pumpModel.estimateBolusProgress(elapsed: elapsed, programmedUnits: dose.programmedUnits)
  16. return DoseProgress(deliveredUnits: deliveredUnits, percentComplete: progress)
  17. }
  18. init(dose: DoseEntry, pumpModel: PumpModel, reportingQueue: DispatchQueue) {
  19. self.dose = dose
  20. self.pumpModel = pumpModel
  21. super.init(reportingQueue: reportingQueue)
  22. }
  23. override func timerParameters() -> (delay: TimeInterval, repeating: TimeInterval) {
  24. let timeSinceStart = -dose.startDate.timeIntervalSinceNow
  25. let duration = dose.endDate.timeIntervalSince(dose.startDate)
  26. let timeBetweenPulses = duration / (Double(pumpModel.pulsesPerUnit) * dose.programmedUnits)
  27. let delayUntilNextPulse = timeBetweenPulses - timeSinceStart.remainder(dividingBy: timeBetweenPulses)
  28. return (delay: delayUntilNextPulse, repeating: timeBetweenPulses)
  29. }
  30. }