PumpMessage.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // PumpMessage.swift
  3. // Naterade
  4. //
  5. // Created by Nathan Racklyeft on 9/2/15.
  6. // Copyright © 2015 Nathan Racklyeft. All rights reserved.
  7. //
  8. import Foundation
  9. public struct PumpMessage : CustomStringConvertible {
  10. public let packetType: PacketType
  11. public let address: Data
  12. public let messageType: MessageType
  13. public let messageBody: MessageBody
  14. public init(packetType: PacketType, address: String, messageType: MessageType, messageBody: MessageBody) {
  15. self.packetType = packetType
  16. self.address = Data(hexadecimalString: address)!
  17. self.messageType = messageType
  18. self.messageBody = messageBody
  19. }
  20. public init?(rxData: Data) {
  21. guard rxData.count >= 6,
  22. let packetType = PacketType(rawValue: rxData[0]), packetType != .meter,
  23. let messageType = MessageType(rawValue: rxData[4]),
  24. let messageBody = messageType.bodyType.init(rxData: rxData.subdata(in: 5..<rxData.count))
  25. else {
  26. return nil
  27. }
  28. self.packetType = packetType
  29. self.address = rxData.subdata(in: 1..<4)
  30. self.messageType = messageType
  31. self.messageBody = messageBody
  32. }
  33. public var txData: Data {
  34. var buffer = [UInt8]()
  35. buffer.append(packetType.rawValue)
  36. buffer += address[0..<3]
  37. buffer.append(messageType.rawValue)
  38. buffer.append(contentsOf: messageBody.txData)
  39. return Data(buffer)
  40. }
  41. public var description: String {
  42. return String(format: "PumpMessage(%1$@, %2$@, %3$@, %4$@)", String(describing: packetType), String(describing: messageType), address.hexadecimalString, self.messageBody.txData.hexadecimalString)
  43. }
  44. }