BLEFirmwareVersion.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // BLEFirmwareVersion.swift
  3. // RileyLinkBLEKit
  4. //
  5. // Copyright © 2017 Pete Schwamb. All rights reserved.
  6. //
  7. public struct BLEFirmwareVersion {
  8. private static let prefix = "ble_rfspy "
  9. let components: [Int]
  10. let versionString: String
  11. init?(versionString: String) {
  12. guard
  13. versionString.hasPrefix(BLEFirmwareVersion.prefix),
  14. let versionIndex = versionString.index(versionString.startIndex, offsetBy: BLEFirmwareVersion.prefix.count, limitedBy: versionString.endIndex)
  15. else {
  16. return nil
  17. }
  18. self.init(
  19. components: versionString[versionIndex...].split(separator: ".").compactMap({ Int($0) }),
  20. versionString: versionString
  21. )
  22. }
  23. init(components: [Int], versionString: String) {
  24. self.components = components
  25. self.versionString = versionString
  26. }
  27. }
  28. extension BLEFirmwareVersion {
  29. static var unknown: BLEFirmwareVersion {
  30. return self.init(components: [0], versionString: "Unknown")
  31. }
  32. public var isUnknown: Bool {
  33. return self == BLEFirmwareVersion.unknown
  34. }
  35. }
  36. extension BLEFirmwareVersion: CustomStringConvertible {
  37. public var description: String {
  38. return versionString
  39. }
  40. }
  41. extension BLEFirmwareVersion: Equatable {
  42. public static func ==(lhs: BLEFirmwareVersion, rhs: BLEFirmwareVersion) -> Bool {
  43. return lhs.components == rhs.components
  44. }
  45. }
  46. extension BLEFirmwareVersion {
  47. var responseType: PeripheralManager.ResponseType {
  48. guard let major = components.first, major >= 2 else {
  49. return .buffered
  50. }
  51. return .single
  52. }
  53. }