BasalProfileStartPumpEvent.swift 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. // BasalProfileStartPumpEvent.swift
  3. // RileyLink
  4. //
  5. // Created by Pete Schwamb on 3/8/16.
  6. // Copyright © 2016 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. public struct BasalProfileStartPumpEvent: TimestampedPumpEvent {
  10. public let length: Int
  11. public let rawData: Data
  12. public let timestamp: DateComponents
  13. public let scheduleEntry: BasalScheduleEntry
  14. public init?(availableData: Data, pumpModel: PumpModel) {
  15. length = 10
  16. guard length <= availableData.count else {
  17. return nil
  18. }
  19. rawData = availableData.subdata(in: 0..<length)
  20. timestamp = DateComponents(pumpEventData: availableData, offset: 2)
  21. let rate = Double(availableData[8..<10].to(UInt16.self)) / 40.0
  22. let offsetMinutes = Double(availableData[7]) * 30
  23. scheduleEntry = BasalScheduleEntry(
  24. index: Int(availableData[1]),
  25. timeOffset: TimeInterval(minutes: offsetMinutes),
  26. rate: rate
  27. )
  28. }
  29. public var dictionaryRepresentation: [String: Any] {
  30. return [
  31. "_type": "BasalProfileStart",
  32. "offset": Int(scheduleEntry.timeOffset.milliseconds),
  33. "rate": scheduleEntry.rate,
  34. "profileIndex": scheduleEntry.index,
  35. ]
  36. }
  37. public var description: String {
  38. return String(format: LocalizedString("Basal Profile %1$@: %2$@ U/hour", comment: "The format string description of a BasalProfileStartPumpEvent. (1: The index of the profile)(2: The basal rate)"), scheduleEntry.index, scheduleEntry.rate)
  39. }
  40. }