GetBatteryCarelinkMessageBody.swift 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //
  2. // GetBatteryCarelinkMessageBody.swift
  3. // RileyLink
  4. //
  5. // Created by Pete Schwamb on 3/13/16.
  6. // Copyright © 2016 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. public enum BatteryStatus: Equatable {
  10. case low
  11. case normal
  12. case unknown(rawVal: UInt8)
  13. init(statusByte: UInt8) {
  14. switch statusByte {
  15. case 1:
  16. self = .low
  17. case 0:
  18. self = .normal
  19. default:
  20. self = .unknown(rawVal: statusByte)
  21. }
  22. }
  23. }
  24. public class GetBatteryCarelinkMessageBody: CarelinkLongMessageBody {
  25. public let status: BatteryStatus
  26. public let volts: Double
  27. public required init?(rxData: Data) {
  28. guard rxData.count == type(of: self).length else {
  29. volts = 0
  30. status = .unknown(rawVal: 0)
  31. super.init(rxData: rxData)
  32. return nil
  33. }
  34. volts = Double(Int(rxData[2]) << 8 + Int(rxData[3])) / 100.0
  35. status = BatteryStatus(statusByte: rxData[1])
  36. super.init(rxData: rxData)
  37. }
  38. public required init?(rxData: NSData) {
  39. fatalError("init(rxData:) has not been implemented")
  40. }
  41. }