PumpAlarmPumpEvent.swift 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // PumpAlarmPumpEvent.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 enum PumpAlarmType {
  10. case batteryOutLimitExceeded
  11. case noDelivery
  12. case batteryDepleted
  13. case autoOff
  14. case deviceReset
  15. case deviceResetBatteryIssue17
  16. case deviceResetBatteryIssue21
  17. case reprogramError
  18. case emptyReservoir
  19. case unknownType(rawType: UInt8)
  20. init(rawType: UInt8) {
  21. switch rawType {
  22. case 3:
  23. self = .batteryOutLimitExceeded
  24. case 4:
  25. self = .noDelivery
  26. case 5:
  27. self = .batteryDepleted
  28. case 6:
  29. self = .autoOff
  30. case 16:
  31. self = .deviceReset
  32. case 17:
  33. self = .deviceResetBatteryIssue17
  34. case 21:
  35. self = .deviceResetBatteryIssue21
  36. case 61:
  37. self = .reprogramError
  38. case 62:
  39. self = .emptyReservoir
  40. default:
  41. self = .unknownType(rawType: rawType)
  42. }
  43. }
  44. }
  45. public struct PumpAlarmPumpEvent: TimestampedPumpEvent {
  46. public let length: Int
  47. public let rawData: Data
  48. public let timestamp: DateComponents
  49. public let alarmType: PumpAlarmType
  50. public init?(availableData: Data, pumpModel: PumpModel) {
  51. length = 9
  52. guard length <= availableData.count else {
  53. return nil
  54. }
  55. rawData = availableData.subdata(in: 0..<length)
  56. alarmType = PumpAlarmType(rawType: availableData[1])
  57. timestamp = DateComponents(pumpEventData: availableData, offset: 4)
  58. }
  59. public var dictionaryRepresentation: [String: Any] {
  60. return [
  61. "_type": "AlarmPump",
  62. "alarm": "\(self.alarmType)",
  63. ]
  64. }
  65. }