MinimedPacket.swift 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // MinimedPacket.swift
  3. // RileyLinkBLEKit
  4. //
  5. // Created by Pete Schwamb on 10/7/17.
  6. // Copyright © 2017 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. public struct MinimedPacket {
  10. public let data: Data
  11. public init(outgoingData: Data) {
  12. self.data = outgoingData
  13. }
  14. public init?(encodedData: Data) {
  15. if let decoded = encodedData.decode4b6b() {
  16. if decoded.count == 0 {
  17. return nil
  18. }
  19. let msg = decoded.prefix(upTo: (decoded.count - 1))
  20. if decoded.last != msg.crc8() {
  21. // CRC invalid
  22. return nil
  23. }
  24. self.data = Data(msg)
  25. } else {
  26. // Could not decode message
  27. return nil
  28. }
  29. }
  30. public func encodedData() -> Data {
  31. var dataWithCRC = self.data
  32. dataWithCRC.append(data.crc8())
  33. var encodedData = dataWithCRC.encode4b6b()
  34. encodedData.append(0)
  35. return Data(encodedData)
  36. }
  37. }