UnabsorbedInsulinPumpEvent.swift 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // UnabsorbedInsulinPumpEvent.swift
  3. // RileyLink
  4. //
  5. // Created by Pete Schwamb on 3/7/16.
  6. // Copyright © 2016 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. public struct UnabsorbedInsulinPumpEvent: PumpEvent {
  10. public struct Record : DictionaryRepresentable {
  11. var amount: Double
  12. var age: Int
  13. init(amount: Double, age: Int) {
  14. self.amount = amount
  15. self.age = age
  16. }
  17. public var dictionaryRepresentation: [String: Any] {
  18. return [
  19. "amount": amount,
  20. "age": age,
  21. ]
  22. }
  23. }
  24. public let length: Int
  25. public let rawData: Data
  26. public let records: [Record]
  27. public init?(availableData: Data, pumpModel: PumpModel) {
  28. length = Int(max(availableData[1], 2))
  29. var records = [Record]()
  30. guard length <= availableData.count else {
  31. return nil
  32. }
  33. rawData = availableData.subdata(in: 0..<length)
  34. func d(_ idx: Int) -> Int {
  35. return Int(availableData[idx])
  36. }
  37. let numRecords = (d(1) - 2) / 3
  38. for idx in 0..<numRecords {
  39. let record = Record(
  40. amount: Double(d(2 + idx * 3)) / 40,
  41. age: d(3 + idx * 3) + ((d(4 + idx * 3) & 0b110000) << 4))
  42. records.append(record)
  43. }
  44. self.records = records
  45. }
  46. public var dictionaryRepresentation: [String: Any] {
  47. return [
  48. "_type": "UnabsorbedInsulin",
  49. "data": records.map({ (r: Record) -> [String: Any] in
  50. return r.dictionaryRepresentation
  51. }),
  52. ]
  53. }
  54. }