JournalEntryMealMarkerPumpEvent.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //
  2. // JournalEntryMealMarkerPumpEvent.swift
  3. // RileyLink
  4. //
  5. // Created by Pete Schwamb on 7/14/16.
  6. // Copyright © 2016 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. public struct JournalEntryMealMarkerPumpEvent: TimestampedPumpEvent {
  10. public let length: Int
  11. public let rawData: Data
  12. public let timestamp: DateComponents
  13. public let carbohydrates: Double
  14. public let carbUnits: CarbUnits
  15. public enum CarbUnits: String {
  16. case Exchanges
  17. case Grams
  18. }
  19. public init?(availableData: Data, pumpModel: PumpModel) {
  20. length = 9
  21. let useExchangesBit = ((availableData[8]) >> 1) & 0b1
  22. carbUnits = (useExchangesBit != 0) ? .Exchanges : .Grams
  23. let carbHighBit = (availableData[1]) & 0b1
  24. let carbLowBits = availableData[7]
  25. if carbUnits == .Exchanges {
  26. carbohydrates = Double(carbLowBits) / 10.0
  27. } else {
  28. carbohydrates = Double(Int(carbHighBit) << 8 + Int(carbLowBits))
  29. }
  30. guard length <= availableData.count else {
  31. return nil
  32. }
  33. rawData = availableData.subdata(in: 0..<length)
  34. timestamp = DateComponents(pumpEventData: availableData, offset: 2)
  35. }
  36. public var dictionaryRepresentation: [String: Any] {
  37. return [
  38. "_type": "JournalEntryMealMarker",
  39. "carbohydrates": carbohydrates,
  40. "carbUnits": carbUnits.rawValue,
  41. ]
  42. }
  43. }