BeepConfigCommand.swift 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //
  2. // BeepConfigCommand.swift
  3. // OmniKit
  4. //
  5. // Created by Joseph Moran on 5/12/19.
  6. // Copyright © 2019 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. public struct BeepConfigCommand : MessageBlock {
  10. // OFF 1 2 3 4 5
  11. // 1e 04 AABBCCDD
  12. public let blockType: MessageBlockType = .beepConfig
  13. public let beepConfigType: BeepConfigType
  14. public let basalCompletionBeep: Bool
  15. public let basalIntervalBeep: TimeInterval
  16. public let tempBasalCompletionBeep: Bool
  17. public let tempBasalIntervalBeep: TimeInterval
  18. public let bolusCompletionBeep: Bool
  19. public let bolusIntervalBeep: TimeInterval
  20. public init(beepConfigType: BeepConfigType, basalCompletionBeep: Bool = false, basalIntervalBeep: TimeInterval = 0, tempBasalCompletionBeep: Bool = false, tempBasalIntervalBeep: TimeInterval = 0, bolusCompletionBeep: Bool = false, bolusIntervalBeep: TimeInterval = 0) {
  21. self.beepConfigType = beepConfigType
  22. self.basalCompletionBeep = basalCompletionBeep
  23. self.basalIntervalBeep = basalIntervalBeep
  24. self.tempBasalCompletionBeep = tempBasalCompletionBeep
  25. self.tempBasalIntervalBeep = tempBasalIntervalBeep
  26. self.bolusCompletionBeep = bolusCompletionBeep
  27. self.bolusIntervalBeep = bolusIntervalBeep
  28. }
  29. public init(encodedData: Data) throws {
  30. if encodedData.count < 6 {
  31. throw MessageBlockError.notEnoughData
  32. }
  33. if let beepConfigType = BeepConfigType.init(rawValue: encodedData[2]) {
  34. self.beepConfigType = beepConfigType
  35. } else {
  36. throw MessageBlockError.parseError
  37. }
  38. self.basalCompletionBeep = encodedData[3] & (1<<6) != 0
  39. self.basalIntervalBeep = TimeInterval(minutes: Double(encodedData[3] & 0x3f))
  40. self.tempBasalCompletionBeep = encodedData[4] & (1<<6) != 0
  41. self.tempBasalIntervalBeep = TimeInterval(minutes: Double(encodedData[4] & 0x3f))
  42. self.bolusCompletionBeep = encodedData[5] & (1<<6) != 0
  43. self.bolusIntervalBeep = TimeInterval(minutes: Double(encodedData[5] & 0x3f))
  44. }
  45. public var data: Data {
  46. var data = Data([
  47. blockType.rawValue,
  48. 4,
  49. ])
  50. data.append(beepConfigType.rawValue)
  51. data.append((basalCompletionBeep ? (1<<6) : 0) + (UInt8(basalIntervalBeep.minutes) & 0x3f))
  52. data.append((tempBasalCompletionBeep ? (1<<6) : 0) + (UInt8(tempBasalIntervalBeep.minutes) & 0x3f))
  53. data.append((bolusCompletionBeep ? (1<<6) : 0) + (UInt8(bolusIntervalBeep.minutes) & 0x3f))
  54. return data
  55. }
  56. }
  57. extension BeepConfigCommand: CustomDebugStringConvertible {
  58. public var debugDescription: String {
  59. return "BeepConfigCommand(beepConfigType:\(beepConfigType), basalIntervalBeep:\(basalIntervalBeep), tempBasalCompletionBeep:\(tempBasalCompletionBeep), tempBasalIntervalBeep:\(tempBasalIntervalBeep), bolusCompletionBeep:\(bolusCompletionBeep), , bolusIntervalBeep:\(bolusIntervalBeep))"
  60. }
  61. }