diff --git a/Crypto/Info.plist b/Crypto/Info.plist
index 0e27f5f6d..e13d2efa7 100644
--- a/Crypto/Info.plist
+++ b/Crypto/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
NSPrincipalClass
diff --git a/MinimedKit/BasalSchedule.swift b/MinimedKit/BasalSchedule.swift
index 28ad48219..4af810e65 100644
--- a/MinimedKit/BasalSchedule.swift
+++ b/MinimedKit/BasalSchedule.swift
@@ -48,7 +48,7 @@ extension BasalSchedule {
if let entry = BasalScheduleEntry(
index: tuple.index,
rawValue: rawValue[beginOfRange..= entry.timeOffset {
// Stop if the new timeOffset isn't greater than the last one
break
@@ -77,6 +77,11 @@ extension BasalSchedule {
byteIndex += rawEntry.count
}
+ // Send the special "empty" code to clear a schedule
+ if entries.count == 0 {
+ buffer[2] = 0x3f
+ }
+
return buffer
}
}
@@ -97,6 +102,7 @@ private extension BasalScheduleEntry {
let offsetMinutes = Double(rawValue.last!) * 30
let timeOffset = TimeInterval(minutes: offsetMinutes)
+ // 0x3f *30*60 denotes a stop value
guard timeOffset < .hours(24) else {
return nil
}
diff --git a/MinimedKit/BatteryChemistryType.swift b/MinimedKit/BatteryChemistryType.swift
index 30a047835..a797e7571 100644
--- a/MinimedKit/BatteryChemistryType.swift
+++ b/MinimedKit/BatteryChemistryType.swift
@@ -33,7 +33,7 @@ public enum BatteryChemistryType: Int, CustomStringConvertible {
public var minVoltage: Double {
switch self {
case .alkaline:
- return 1.20
+ return 1.18
case .lithium:
return 1.32
}
diff --git a/MinimedKit/Info.plist b/MinimedKit/Info.plist
index 783e22ec8..a16c895d4 100644
--- a/MinimedKit/Info.plist
+++ b/MinimedKit/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion
diff --git a/MinimedKit/MessageType.swift b/MinimedKit/MessageType.swift
index df3580e03..95b186b8a 100644
--- a/MinimedKit/MessageType.swift
+++ b/MinimedKit/MessageType.swift
@@ -18,28 +18,30 @@ public enum MessageType: UInt8 {
case errorResponse = 0x15
case writeGlucoseHistoryTimestamp = 0x28
- case readRemoteControlID = 0x2e // Refused by x23 pumps
+ case setBasalProfileA = 0x30 // CMD_SET_A_PROFILE
+ case setBasalProfileB = 0x31 // CMD_SET_B_PROFILE
case changeTime = 0x40
+ case setMaxBolus = 0x41 // CMD_SET_MAX_BOLUS
case bolus = 0x42
case PumpExperiment_OP67 = 0x43
case PumpExperiment_OP68 = 0x44
- case PumpExperiment_OP69 = 0x45
+ case PumpExperiment_OP69 = 0x45 // CMD_SET_VAR_BOLUS_ENABLE
case selectBasalProfile = 0x4a
case changeTempBasal = 0x4c
case PumpExperiment_OP80 = 0x50
- case PumpExperiment_OP81 = 0x51
- case PumpExperiment_OP82 = 0x52
- case PumpExperiment_OP83 = 0x53
- case PumpExperiment_OP84 = 0x54
- case PumpExperiment_OP85 = 0x55
+ case setRemoteControlID = 0x51 // CMD_SET_RF_REMOTE_ID
+ case PumpExperiment_OP82 = 0x52 // CMD_SET_BLOCK_ENABLE
+ case setLanguage = 0x53
+ case PumpExperiment_OP84 = 0x54 // CMD_SET_ALERT_TYPE
+ case PumpExperiment_OP85 = 0x55 // CMD_SET_PATTERNS_ENABLE
case PumpExperiment_OP86 = 0x56
- case PumpExperiment_OP87 = 0x57
- case PumpExperiment_OP88 = 0x58
+ case setRemoteControlEnabled = 0x57 // CMD_SET_RF_ENABLE
+ case PumpExperiment_OP88 = 0x58 // CMD_SET_INSULIN_ACTION_TYPE
case PumpExperiment_OP89 = 0x59
case PumpExperiment_OP90 = 0x5a
@@ -49,16 +51,23 @@ public enum MessageType: UInt8 {
case powerOn = 0x5d
- case PumpExperiment_OP97 = 0x61
- case PumpExperiment_OP98 = 0x62
- case PumpExperiment_OP99 = 0x63
- case PumpExperiment_O100 = 0x64
- case PumpExperiment_O101 = 0x65
- case PumpExperiment_O103 = 0x67
+ case setBolusWizardEnabled1 = 0x61
+ case setBolusWizardEnabled2 = 0x62
+ case setBolusWizardEnabled3 = 0x63
+ case setBolusWizardEnabled4 = 0x64
+ case setBolusWizardEnabled5 = 0x65
+ case setAlarmClockEnable = 0x67
+
+ case setMaxBasalRate = 0x6e // CMD_SET_MAX_BASAL
+ case setBasalProfileStandard = 0x6f // CMD_SET_STD_PROFILE
case readTime = 0x70
case getBattery = 0x72
case readRemainingInsulin = 0x73
+ case readFirmwareVersion = 0x74
+ case readErrorStatus = 0x75
+ case readRemoteControlIDs = 0x76 // CMD_READ_REMOTE_CTRL_IDS
+
case getHistoryPage = 0x80
case getPumpModel = 0x8d
case readProfileSTD512 = 0x92
@@ -130,6 +139,8 @@ public enum MessageType: UInt8 {
return ReadOtherDevicesIDsMessageBody.self
case .readOtherDevicesStatus:
return ReadOtherDevicesStatusMessageBody.self
+ case .readRemoteControlIDs:
+ return ReadRemoteControlIDsMessageBody.self
default:
return UnknownMessageBody.self
}
diff --git a/MinimedKit/Messages/ChangeMaxBasalRateMessageBody.swift b/MinimedKit/Messages/ChangeMaxBasalRateMessageBody.swift
new file mode 100644
index 000000000..108b074d1
--- /dev/null
+++ b/MinimedKit/Messages/ChangeMaxBasalRateMessageBody.swift
@@ -0,0 +1,27 @@
+//
+// ChangeMaxBasalRateMessageBody.swift
+// MinimedKit
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import Foundation
+
+
+public class ChangeMaxBasalRateMessageBody: CarelinkLongMessageBody {
+
+ static let multiplier: Double = 40
+
+ public convenience init?(maxBasalUnitsPerHour: Double) {
+ guard maxBasalUnitsPerHour >= 0 && maxBasalUnitsPerHour <= 35 else {
+ return nil
+ }
+
+ let ticks = UInt16(maxBasalUnitsPerHour * type(of: self).multiplier)
+ var data = Data(bytes: [UInt8(clamping: ticks.bitWidth / 8)])
+ data.appendBigEndian(ticks)
+
+ self.init(rxData: data)
+ }
+
+}
diff --git a/MinimedKit/Messages/ChangeMaxBolusMessageBody.swift b/MinimedKit/Messages/ChangeMaxBolusMessageBody.swift
new file mode 100644
index 000000000..ebb0ae4ce
--- /dev/null
+++ b/MinimedKit/Messages/ChangeMaxBolusMessageBody.swift
@@ -0,0 +1,27 @@
+//
+// ChangeMaxBolusMessageBody.swift
+// MinimedKit
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import Foundation
+
+
+public class ChangeMaxBolusMessageBody: CarelinkLongMessageBody {
+
+ static let multiplier: Double = 10
+
+ public convenience init?(maxBolusUnits: Double) {
+ guard maxBolusUnits >= 0 && maxBolusUnits <= 25 else {
+ return nil
+ }
+
+ let ticks = UInt8(maxBolusUnits * type(of: self).multiplier)
+ var data = Data(bytes: [UInt8(clamping: ticks.bitWidth / 8)])
+ data.appendBigEndian(ticks)
+
+ self.init(rxData: data)
+ }
+
+}
diff --git a/MinimedKit/Messages/ChangeRemoteControlIDMessageBody.swift b/MinimedKit/Messages/ChangeRemoteControlIDMessageBody.swift
new file mode 100644
index 000000000..3de363c6a
--- /dev/null
+++ b/MinimedKit/Messages/ChangeRemoteControlIDMessageBody.swift
@@ -0,0 +1,30 @@
+//
+// ChangeRemoteControlIDMessageBody.swift
+// MinimedKit
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import Foundation
+
+
+public class ChangeRemoteControlIDMessageBody: CarelinkLongMessageBody {
+ public convenience init?(id: Data? = nil, index: Int) {
+ guard index < 3 else {
+ return nil
+ }
+
+ var rxData = Data(repeating: 0x2d, count: 8) // 2d signifies a deletion
+ rxData[0] = 0x07 // length
+ rxData[1] = UInt8(clamping: index)
+
+ if let id = id {
+ for (index, byte) in id.enumerated() {
+ rxData[2 + index] = 0b00110000 + byte
+ }
+ }
+
+ self.init(rxData: rxData)
+ }
+
+}
diff --git a/MinimedKit/Messages/ReadOtherDevicesIDsMessageBody.swift b/MinimedKit/Messages/ReadOtherDevicesIDsMessageBody.swift
index 9e266628b..57ccb1501 100644
--- a/MinimedKit/Messages/ReadOtherDevicesIDsMessageBody.swift
+++ b/MinimedKit/Messages/ReadOtherDevicesIDsMessageBody.swift
@@ -10,7 +10,7 @@ import Foundation
public class ReadOtherDevicesIDsMessageBody: CarelinkLongMessageBody {
- let ids: [Data]
+ public let ids: [Data]
public required init?(rxData: Data) {
guard rxData.count == type(of: self).length else {
diff --git a/MinimedKit/Messages/ReadRemoteControlIDsMessageBody.swift b/MinimedKit/Messages/ReadRemoteControlIDsMessageBody.swift
new file mode 100644
index 000000000..370009cdc
--- /dev/null
+++ b/MinimedKit/Messages/ReadRemoteControlIDsMessageBody.swift
@@ -0,0 +1,44 @@
+//
+// ReadRemoteControlIDsMessageBody.swift
+// MinimedKit
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import Foundation
+
+private let idSize = 6
+
+public class ReadRemoteControlIDsMessageBody: CarelinkLongMessageBody {
+ public let ids: [Data]
+
+ public required init?(rxData: Data) {
+ guard rxData.count == type(of: self).length else {
+ return nil
+ }
+
+ var ids: [Data] = []
+
+ remotes: for index in stride(from: 0, to: 3, by: 1) {
+ let start = (index * idSize + 1)
+ let end = start + idSize
+
+ var remoteID = Data(capacity: idSize)
+
+ for byte in rxData[start..CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion
diff --git a/MinimedKitTests/Messages/ChangeMaxBasalRateMessageBodyTests.swift b/MinimedKitTests/Messages/ChangeMaxBasalRateMessageBodyTests.swift
new file mode 100644
index 000000000..7aa2d5c3f
--- /dev/null
+++ b/MinimedKitTests/Messages/ChangeMaxBasalRateMessageBodyTests.swift
@@ -0,0 +1,36 @@
+//
+// ChangeMaxBasalRateMessageBodyTests.swift
+// MinimedKitTests
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import XCTest
+@testable import MinimedKit
+
+class ChangeMaxBasalRateMessageBodyTests: XCTestCase {
+
+ func testMaxBasalRate() {
+ var body = ChangeMaxBasalRateMessageBody(maxBasalUnitsPerHour: 6.4)!
+
+ XCTAssertEqual(Data(hexadecimalString: "0201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!, body.txData, body.txData.hexadecimalString)
+
+ body = ChangeMaxBasalRateMessageBody(maxBasalUnitsPerHour: 4.0)!
+
+ XCTAssertEqual(Data(hexadecimalString: "0200A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!, body.txData, body.txData.hexadecimalString)
+ }
+
+ func testMaxBasalRateRounded() {
+ let body = ChangeMaxBasalRateMessageBody(maxBasalUnitsPerHour: 9.115)!
+
+ XCTAssertEqual(Data(hexadecimalString: "02016c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!, body.txData, body.txData.hexadecimalString)
+
+
+ }
+
+ func testMaxBasalRateOutOfRange() {
+ XCTAssertNil(ChangeMaxBasalRateMessageBody(maxBasalUnitsPerHour: -1))
+ XCTAssertNil(ChangeMaxBasalRateMessageBody(maxBasalUnitsPerHour: 36))
+ }
+
+}
diff --git a/MinimedKitTests/Messages/ChangeMaxBolusMessageBodyTests.swift b/MinimedKitTests/Messages/ChangeMaxBolusMessageBodyTests.swift
new file mode 100644
index 000000000..eb99f0bb6
--- /dev/null
+++ b/MinimedKitTests/Messages/ChangeMaxBolusMessageBodyTests.swift
@@ -0,0 +1,30 @@
+//
+// ChangeMaxBolusMessageBodyTests.swift
+// MinimedKitTests
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import XCTest
+@testable import MinimedKit
+
+class ChangeMaxBolusMessageBodyTests: XCTestCase {
+
+ func testMaxBolus() {
+ let body = ChangeMaxBolusMessageBody(maxBolusUnits: 6.4)!
+
+ XCTAssertEqual(Data(hexadecimalString: "0140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!, body.txData, body.txData.hexadecimalString)
+ }
+
+ func testMaxBolusRounded() {
+ let body = ChangeMaxBolusMessageBody(maxBolusUnits: 2.25)!
+
+ XCTAssertEqual(Data(hexadecimalString: "0116000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!, body.txData, body.txData.hexadecimalString)
+ }
+
+ func testMaxBolusOutOfRange() {
+ XCTAssertNil(ChangeMaxBolusMessageBody(maxBolusUnits: -1))
+ XCTAssertNil(ChangeMaxBolusMessageBody(maxBolusUnits: 26))
+ }
+
+}
diff --git a/MinimedKitTests/Messages/ChangeRemoteControlIDMessageBodyTests.swift b/MinimedKitTests/Messages/ChangeRemoteControlIDMessageBodyTests.swift
new file mode 100644
index 000000000..e40c955e2
--- /dev/null
+++ b/MinimedKitTests/Messages/ChangeRemoteControlIDMessageBodyTests.swift
@@ -0,0 +1,28 @@
+//
+// ChangeRemoteControlIDMessageBodyTests.swift
+// MinimedKitTests
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import XCTest
+@testable import MinimedKit
+
+class ChangeRemoteControlIDMessageBodyTests: XCTestCase {
+
+ func testEncodeOneRemote() {
+ let expected = Data(hexadecimalString: "0700313233343536000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!
+ let body = ChangeRemoteControlIDMessageBody(id: Data(bytes: [1, 2, 3, 4, 5, 6]), index: 0)!
+
+ XCTAssertEqual(expected, body.txData, body.txData.hexadecimalString)
+ }
+
+
+ func testEncodeZeroRemotes() {
+ let expected = Data(hexadecimalString: "07022d2d2d2d2d2d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!
+ let body = ChangeRemoteControlIDMessageBody(id: nil, index: 2)!
+
+ XCTAssertEqual(expected, body.txData)
+ }
+
+}
diff --git a/MinimedKitTests/Messages/ReadRemoteControlIDsMessageBodyTests.swift b/MinimedKitTests/Messages/ReadRemoteControlIDsMessageBodyTests.swift
new file mode 100644
index 000000000..e31e58606
--- /dev/null
+++ b/MinimedKitTests/Messages/ReadRemoteControlIDsMessageBodyTests.swift
@@ -0,0 +1,42 @@
+//
+// ReadRemoteControlIDsMessageBodyTests.swift
+// MinimedKitTests
+//
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import XCTest
+@testable import MinimedKit
+
+class ReadRemoteControlIDsMessageBodyTests: XCTestCase {
+
+ func testDecodeOneRemote() {
+ let message = PumpMessage(rxData: Data(hexadecimalString: "a759404076123132333435362d2d2d2d2d2d2d2d2d2d2d2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!)!
+
+ let body = message.messageBody as! ReadRemoteControlIDsMessageBody
+
+ XCTAssertEqual(1, body.ids.count)
+ XCTAssertEqual(Data(bytes: [1, 2, 3, 4, 5, 6]), body.ids[0])
+ }
+
+
+ func testDecodeZeroRemotes() {
+ let message = PumpMessage(rxData: Data(hexadecimalString: "a759404076122d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!)!
+
+ let body = message.messageBody as! ReadRemoteControlIDsMessageBody
+
+ XCTAssertEqual(0, body.ids.count)
+ }
+
+ func testDecodeThreeRemotes() {
+ let message = PumpMessage(rxData: Data(hexadecimalString: "a7594040761230303030303031303031303039393939393900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")!)!
+
+ let body = message.messageBody as! ReadRemoteControlIDsMessageBody
+
+ XCTAssertEqual(3, body.ids.count)
+ XCTAssertEqual(Data(bytes: [0, 0, 0, 0, 0, 0]), body.ids[0])
+ XCTAssertEqual(Data(bytes: [1, 0, 0, 1, 0, 0]), body.ids[1])
+ XCTAssertEqual(Data(bytes: [9, 9, 9, 9, 9, 9]), body.ids[2])
+ }
+
+}
diff --git a/NightscoutUploadKit/DeviceStatus/ForecastError.swift b/NightscoutUploadKit/DeviceStatus/ForecastError.swift
new file mode 100644
index 000000000..105517165
--- /dev/null
+++ b/NightscoutUploadKit/DeviceStatus/ForecastError.swift
@@ -0,0 +1,32 @@
+//
+// ForecastError.swift
+// NightscoutUploadKit
+//
+// Created by Pete Schwamb on 5/28/18.
+// Copyright © 2018 Pete Schwamb. All rights reserved.
+//
+
+import Foundation
+import HealthKit
+
+public struct ForecastError {
+ let velocity: Double
+ let measurementDuration: Double
+
+ public init(velocity: HKQuantity, measurementDuration: TimeInterval) {
+
+ let glucoseUnit = HKUnit.milligramsPerDeciliterUnit()
+ let velocityUnit = glucoseUnit.unitDivided(by: HKUnit.second())
+
+ self.velocity = velocity.doubleValue(for: velocityUnit)
+ self.measurementDuration = measurementDuration
+ }
+
+ public var dictionaryRepresentation: [String: Any] {
+ var rval = [String: Any]()
+ rval["velocity"] = velocity
+ rval["measurementDuration"] = measurementDuration
+ //rval["velocityUnits"] = "mg/dL/s"
+ return rval
+ }
+}
diff --git a/NightscoutUploadKit/DeviceStatus/LoopStatus.swift b/NightscoutUploadKit/DeviceStatus/LoopStatus.swift
index 15cb6332c..73a414edb 100644
--- a/NightscoutUploadKit/DeviceStatus/LoopStatus.swift
+++ b/NightscoutUploadKit/DeviceStatus/LoopStatus.swift
@@ -7,6 +7,7 @@
//
import Foundation
+import HealthKit
public struct LoopStatus {
let name: String
@@ -22,9 +23,10 @@ public struct LoopStatus {
let rileylinks: [RileyLinkStatus]?
let failureReason: Error?
let currentCorrectionRange: CorrectionRange?
+ let forecastError: ForecastError?
+ let testingDetails: [String: Any]?
-
- public init(name: String, version: String, timestamp: Date, iob: IOBStatus? = nil, cob: COBStatus? = nil, predicted: PredictedBG? = nil, recommendedTempBasal:RecommendedTempBasal? = nil, recommendedBolus: Double? = nil, enacted: LoopEnacted? = nil, rileylinks: [RileyLinkStatus]? = nil, failureReason: Error? = nil, currentCorrectionRange: CorrectionRange? = nil) {
+ public init(name: String, version: String, timestamp: Date, iob: IOBStatus? = nil, cob: COBStatus? = nil, predicted: PredictedBG? = nil, recommendedTempBasal:RecommendedTempBasal? = nil, recommendedBolus: Double? = nil, enacted: LoopEnacted? = nil, rileylinks: [RileyLinkStatus]? = nil, failureReason: Error? = nil, currentCorrectionRange: CorrectionRange? = nil, forecastError: ForecastError? = nil, testingDetails: [String: Any]? = nil) {
self.name = name
self.version = version
self.timestamp = timestamp
@@ -37,6 +39,8 @@ public struct LoopStatus {
self.rileylinks = rileylinks
self.failureReason = failureReason
self.currentCorrectionRange = currentCorrectionRange
+ self.forecastError = forecastError
+ self.testingDetails = testingDetails
}
public var dictionaryRepresentation: [String: Any] {
@@ -81,6 +85,14 @@ public struct LoopStatus {
if let currentCorrectionRange = currentCorrectionRange {
rval["currentCorrectionRange"] = currentCorrectionRange.dictionaryRepresentation
}
+
+ if let forecastError = forecastError {
+ rval["forecastError"] = forecastError
+ }
+
+ if let testingDetails = testingDetails {
+ rval["testingDetails"] = testingDetails
+ }
return rval
}
diff --git a/NightscoutUploadKit/Info.plist b/NightscoutUploadKit/Info.plist
index 783e22ec8..a16c895d4 100644
--- a/NightscoutUploadKit/Info.plist
+++ b/NightscoutUploadKit/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion
diff --git a/NightscoutUploadKitTests/Info.plist b/NightscoutUploadKitTests/Info.plist
index 840b2c791..6f3a2eb14 100644
--- a/NightscoutUploadKitTests/Info.plist
+++ b/NightscoutUploadKitTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion
diff --git a/RileyLink.xcodeproj/project.pbxproj b/RileyLink.xcodeproj/project.pbxproj
index 99ee088d3..47c880b9a 100644
--- a/RileyLink.xcodeproj/project.pbxproj
+++ b/RileyLink.xcodeproj/project.pbxproj
@@ -104,6 +104,9 @@
43CA93311CB97191000026B5 /* ReadTempBasalCarelinkMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CA93301CB97191000026B5 /* ReadTempBasalCarelinkMessageBodyTests.swift */; };
43CA93331CB9726A000026B5 /* ChangeTimeCarelinMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CA93321CB9726A000026B5 /* ChangeTimeCarelinMessageBodyTests.swift */; };
43CA93351CB9727F000026B5 /* ChangeTempBasalCarelinkMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CA93341CB9727F000026B5 /* ChangeTempBasalCarelinkMessageBodyTests.swift */; };
+ 43CEC07420D0949B00F1BC19 /* ReadRemoteControlIDsMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CEC07320D0949B00F1BC19 /* ReadRemoteControlIDsMessageBody.swift */; };
+ 43CEC07620D099B400F1BC19 /* SetRemoteControlEnabledMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CEC07520D099B400F1BC19 /* SetRemoteControlEnabledMessageBody.swift */; };
+ 43CEC07820D0CF7200F1BC19 /* ReadRemoteControlIDsMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CEC07720D0CF7200F1BC19 /* ReadRemoteControlIDsMessageBodyTests.swift */; };
43D5E7881FAEDAC4004ACDB7 /* PeripheralManagerError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43D5E7871FAEDAC4004ACDB7 /* PeripheralManagerError.swift */; };
43D5E7921FAF7BFB004ACDB7 /* RileyLinkKitUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D5E7901FAF7BFB004ACDB7 /* RileyLinkKitUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
43D5E7951FAF7BFB004ACDB7 /* RileyLinkKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43D5E78E1FAF7BFB004ACDB7 /* RileyLinkKitUI.framework */; };
@@ -122,6 +125,12 @@
43DAD00220A6A470000F8529 /* ReadOtherDevicesStatusMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DAD00120A6A470000F8529 /* ReadOtherDevicesStatusMessageBody.swift */; };
43DAD00420A6A677000F8529 /* ReadOtherDevicesIDsMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DAD00320A6A677000F8529 /* ReadOtherDevicesIDsMessageBody.swift */; };
43DAD00620A6B10A000F8529 /* ReadOtherDevicesIDsMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DAD00520A6B10A000F8529 /* ReadOtherDevicesIDsMessageBodyTests.swift */; };
+ 43DFB60B20D229CC008A7BAE /* ChangeRemoteControlIDMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DFB60A20D229CC008A7BAE /* ChangeRemoteControlIDMessageBody.swift */; };
+ 43DFB60D20D22CCB008A7BAE /* ChangeRemoteControlIDMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DFB60C20D22CCB008A7BAE /* ChangeRemoteControlIDMessageBodyTests.swift */; };
+ 43DFB60F20D3744A008A7BAE /* ChangeMaxBolusMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DFB60E20D3744A008A7BAE /* ChangeMaxBolusMessageBody.swift */; };
+ 43DFB61120D37748008A7BAE /* ChangeMaxBolusMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DFB61020D37748008A7BAE /* ChangeMaxBolusMessageBodyTests.swift */; };
+ 43DFB61320D37800008A7BAE /* ChangeMaxBasalRateMessageBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DFB61220D37800008A7BAE /* ChangeMaxBasalRateMessageBodyTests.swift */; };
+ 43DFB61520D3791A008A7BAE /* ChangeMaxBasalRateMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DFB61420D3791A008A7BAE /* ChangeMaxBasalRateMessageBody.swift */; };
43EBE4521EAD23C40073A0B5 /* TimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EBE4501EAD238C0073A0B5 /* TimeInterval.swift */; };
43EBE4531EAD23CE0073A0B5 /* TimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EBE4501EAD238C0073A0B5 /* TimeInterval.swift */; };
43EBE4541EAD23EC0073A0B5 /* TimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EBE4501EAD238C0073A0B5 /* TimeInterval.swift */; };
@@ -305,6 +314,7 @@
C1842C241C8FA45100DB42AC /* BatteryPumpEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1842BFA1C8FA45100DB42AC /* BatteryPumpEvent.swift */; };
C1842C251C8FA45100DB42AC /* AlarmSensorPumpEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1842BFB1C8FA45100DB42AC /* AlarmSensorPumpEvent.swift */; };
C184875C20BC232F00ABE9E7 /* CorrectionRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = C184875B20BC232F00ABE9E7 /* CorrectionRange.swift */; };
+ C184875E20BCDB0000ABE9E7 /* ForecastError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C184875D20BCDB0000ABE9E7 /* ForecastError.swift */; };
C18C8C531D64123400E043FB /* EnableBolusWizardPumpEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C18C8C521D64123400E043FB /* EnableBolusWizardPumpEvent.swift */; };
C18EB742207EE20100EA002B /* NightscoutProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C18EB741207EE20100EA002B /* NightscoutProfile.swift */; };
C1A492631D4A5A19008964FF /* IOBStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1A492621D4A5A19008964FF /* IOBStatus.swift */; };
@@ -583,6 +593,9 @@
43CA93301CB97191000026B5 /* ReadTempBasalCarelinkMessageBodyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReadTempBasalCarelinkMessageBodyTests.swift; sourceTree = ""; };
43CA93321CB9726A000026B5 /* ChangeTimeCarelinMessageBodyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangeTimeCarelinMessageBodyTests.swift; sourceTree = ""; };
43CA93341CB9727F000026B5 /* ChangeTempBasalCarelinkMessageBodyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangeTempBasalCarelinkMessageBodyTests.swift; sourceTree = ""; };
+ 43CEC07320D0949B00F1BC19 /* ReadRemoteControlIDsMessageBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadRemoteControlIDsMessageBody.swift; sourceTree = ""; };
+ 43CEC07520D099B400F1BC19 /* SetRemoteControlEnabledMessageBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetRemoteControlEnabledMessageBody.swift; sourceTree = ""; };
+ 43CEC07720D0CF7200F1BC19 /* ReadRemoteControlIDsMessageBodyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadRemoteControlIDsMessageBodyTests.swift; sourceTree = ""; };
43D5E7871FAEDAC4004ACDB7 /* PeripheralManagerError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeripheralManagerError.swift; sourceTree = ""; };
43D5E78E1FAF7BFB004ACDB7 /* RileyLinkKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RileyLinkKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
43D5E7901FAF7BFB004ACDB7 /* RileyLinkKitUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RileyLinkKitUI.h; sourceTree = ""; };
@@ -590,6 +603,12 @@
43DAD00120A6A470000F8529 /* ReadOtherDevicesStatusMessageBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadOtherDevicesStatusMessageBody.swift; sourceTree = ""; };
43DAD00320A6A677000F8529 /* ReadOtherDevicesIDsMessageBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadOtherDevicesIDsMessageBody.swift; sourceTree = ""; };
43DAD00520A6B10A000F8529 /* ReadOtherDevicesIDsMessageBodyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadOtherDevicesIDsMessageBodyTests.swift; sourceTree = ""; };
+ 43DFB60A20D229CC008A7BAE /* ChangeRemoteControlIDMessageBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeRemoteControlIDMessageBody.swift; sourceTree = ""; };
+ 43DFB60C20D22CCB008A7BAE /* ChangeRemoteControlIDMessageBodyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeRemoteControlIDMessageBodyTests.swift; sourceTree = ""; };
+ 43DFB60E20D3744A008A7BAE /* ChangeMaxBolusMessageBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeMaxBolusMessageBody.swift; sourceTree = ""; };
+ 43DFB61020D37748008A7BAE /* ChangeMaxBolusMessageBodyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeMaxBolusMessageBodyTests.swift; sourceTree = ""; };
+ 43DFB61220D37800008A7BAE /* ChangeMaxBasalRateMessageBodyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeMaxBasalRateMessageBodyTests.swift; sourceTree = ""; };
+ 43DFB61420D3791A008A7BAE /* ChangeMaxBasalRateMessageBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeMaxBasalRateMessageBody.swift; sourceTree = ""; };
43EBE4501EAD238C0073A0B5 /* TimeInterval.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimeInterval.swift; sourceTree = ""; };
43EC9DCA1B786C6200DB0D18 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; };
43F348051D596270009933DC /* HKUnit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HKUnit.swift; sourceTree = ""; };
@@ -797,6 +816,7 @@
C1842C281C908A3C00DB42AC /* NightscoutUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NightscoutUploader.swift; sourceTree = ""; };
C1842C2A1C90DFB600DB42AC /* NightscoutPumpEvents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NightscoutPumpEvents.swift; sourceTree = ""; };
C184875B20BC232F00ABE9E7 /* CorrectionRange.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CorrectionRange.swift; sourceTree = ""; };
+ C184875D20BCDB0000ABE9E7 /* ForecastError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastError.swift; sourceTree = ""; };
C18C8C521D64123400E043FB /* EnableBolusWizardPumpEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnableBolusWizardPumpEvent.swift; sourceTree = ""; };
C18EB741207EE20100EA002B /* NightscoutProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutProfile.swift; sourceTree = ""; };
C1A492621D4A5A19008964FF /* IOBStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IOBStatus.swift; sourceTree = ""; };
@@ -1215,6 +1235,9 @@
isa = PBXGroup;
children = (
C12198A21C8DFC3600BC374C /* BolusCarelinkMessageBodyTests.swift */,
+ 43DFB61220D37800008A7BAE /* ChangeMaxBasalRateMessageBodyTests.swift */,
+ 43DFB61020D37748008A7BAE /* ChangeMaxBolusMessageBodyTests.swift */,
+ 43DFB60C20D22CCB008A7BAE /* ChangeRemoteControlIDMessageBodyTests.swift */,
43CA93341CB9727F000026B5 /* ChangeTempBasalCarelinkMessageBodyTests.swift */,
43CA93321CB9726A000026B5 /* ChangeTimeCarelinMessageBodyTests.swift */,
C12198601C8DEB7B00BC374C /* DeviceLinkMessageBodyTests.swift */,
@@ -1226,6 +1249,7 @@
541688DA1DB820BF005B1891 /* ReadCurrentGlucosePageMessageBodyTests.swift */,
43DAD00520A6B10A000F8529 /* ReadOtherDevicesIDsMessageBodyTests.swift */,
43A068EB1CF6BA6900F9EFE4 /* ReadRemainingInsulinMessageBodyTests.swift */,
+ 43CEC07720D0CF7200F1BC19 /* ReadRemoteControlIDsMessageBodyTests.swift */,
C1EAD6D41C826C43006DBA60 /* ReadSettingsCarelinkMessageBodyTests.swift */,
43CA93301CB97191000026B5 /* ReadTempBasalCarelinkMessageBodyTests.swift */,
);
@@ -1501,6 +1525,7 @@
C1E5BEAC1D5E26F200BD4390 /* RileyLinkStatus.swift */,
C1BAD1171E63984C009BA1C6 /* RadioAdapter.swift */,
C184875B20BC232F00ABE9E7 /* CorrectionRange.swift */,
+ C184875D20BCDB0000ABE9E7 /* ForecastError.swift */,
);
path = DeviceStatus;
sourceTree = "";
@@ -1575,6 +1600,9 @@
C121989E1C8DFC2200BC374C /* BolusCarelinkMessageBody.swift */,
C1711A551C94F13400CB25BD /* ButtonPressCarelinkMessageBody.swift */,
C1EAD6BD1C826B92006DBA60 /* CarelinkMessageBody.swift */,
+ 43DFB61420D3791A008A7BAE /* ChangeMaxBasalRateMessageBody.swift */,
+ 43DFB60E20D3744A008A7BAE /* ChangeMaxBolusMessageBody.swift */,
+ 43DFB60A20D229CC008A7BAE /* ChangeRemoteControlIDMessageBody.swift */,
43CA93281CB8CF22000026B5 /* ChangeTempBasalCarelinkMessageBody.swift */,
43CA932A1CB8CF76000026B5 /* ChangeTimeCarelinkMessageBody.swift */,
C1F0004B1EBE68A600F65163 /* DataFrameMessageBody.swift */,
@@ -1600,7 +1628,9 @@
C1EAD6C31C826B92006DBA60 /* ReadSettingsCarelinkMessageBody.swift */,
43CA932C1CB8CFA1000026B5 /* ReadTempBasalCarelinkMessageBody.swift */,
43CA932D1CB8CFA1000026B5 /* ReadTimeCarelinkMessageBody.swift */,
+ 43CEC07320D0949B00F1BC19 /* ReadRemoteControlIDsMessageBody.swift */,
43BF58AF1FF594CB00499C46 /* SelectBasalProfileMessageBody.swift */,
+ 43CEC07520D099B400F1BC19 /* SetRemoteControlEnabledMessageBody.swift */,
C1EAD6C41C826B92006DBA60 /* UnknownMessageBody.swift */,
);
path = Messages;
@@ -1931,12 +1961,10 @@
LastSwiftMigration = 0900;
};
C12EA236198B436800309FA4 = {
- DevelopmentTeam = 57NRR26737;
LastSwiftMigration = 0900;
ProvisioningStyle = Automatic;
};
C12EA251198B436800309FA4 = {
- DevelopmentTeam = 57NRR26737;
ProvisioningStyle = Automatic;
TestTargetID = C12EA236198B436800309FA4;
};
@@ -2193,10 +2221,12 @@
C1842BD11C8FA3D200DB42AC /* AlarmClockReminderPumpEvent.swift in Sources */,
43DAD00220A6A470000F8529 /* ReadOtherDevicesStatusMessageBody.swift in Sources */,
C1842C1B1C8FA45100DB42AC /* ChangeBolusReminderEnablePumpEvent.swift in Sources */,
+ 43DFB60B20D229CC008A7BAE /* ChangeRemoteControlIDMessageBody.swift in Sources */,
C1842BC51C8F897E00DB42AC /* BasalProfileStartPumpEvent.swift in Sources */,
54BC448C1DB47BEA00340EED /* SensorCalGlucoseEvent.swift in Sources */,
C14FFC4A1D3AF1AC0049CF85 /* JournalEntryInsulinMarkerPumpEvent.swift in Sources */,
C1842C081C8FA45100DB42AC /* ChangeWatchdogMarriageProfilePumpEvent.swift in Sources */,
+ 43DFB61520D3791A008A7BAE /* ChangeMaxBasalRateMessageBody.swift in Sources */,
C1842BFF1C8FA45100DB42AC /* DailyTotal522PumpEvent.swift in Sources */,
C1842C1A1C8FA45100DB42AC /* ChangeBolusReminderTimePumpEvent.swift in Sources */,
C12198B31C8F730700BC374C /* BolusWizardEstimatePumpEvent.swift in Sources */,
@@ -2204,6 +2234,7 @@
C1842BC11C8E8B2500DB42AC /* UnabsorbedInsulinPumpEvent.swift in Sources */,
C1EAD6B51C826B6D006DBA60 /* MessageType.swift in Sources */,
C1842C111C8FA45100DB42AC /* ChangeParadigmLinkIDPumpEvent.swift in Sources */,
+ 43DFB60F20D3744A008A7BAE /* ChangeMaxBolusMessageBody.swift in Sources */,
54BC44981DB47D5300340EED /* SensorSyncGlucoseEvent.swift in Sources */,
54BC448A1DB47BA500340EED /* SensorWeakSignalGlucoseEvent.swift in Sources */,
C1C3578F1C927303009BDD4F /* MeterMessage.swift in Sources */,
@@ -2251,6 +2282,7 @@
C1FDFCA91D964A3E00ADBC31 /* BolusReminderPumpEvent.swift in Sources */,
43CA93291CB8CF22000026B5 /* ChangeTempBasalCarelinkMessageBody.swift in Sources */,
C1EAD6CD1C826B92006DBA60 /* PowerOnCarelinkMessageBody.swift in Sources */,
+ 43CEC07620D099B400F1BC19 /* SetRemoteControlEnabledMessageBody.swift in Sources */,
C1EAD6C81C826B92006DBA60 /* CarelinkMessageBody.swift in Sources */,
C1A721621EC3E0500080FAD7 /* PumpErrorMessageBody.swift in Sources */,
546A85D41DF7BE1400733213 /* SensorErrorGlucoseEvent.swift in Sources */,
@@ -2306,6 +2338,7 @@
C1842BC31C8E931E00DB42AC /* BolusNormalPumpEvent.swift in Sources */,
541688DD1DB82213005B1891 /* ReadCurrentGlucosePageMessageBody.swift in Sources */,
43CA932F1CB8CFA1000026B5 /* ReadTimeCarelinkMessageBody.swift in Sources */,
+ 43CEC07420D0949B00F1BC19 /* ReadRemoteControlIDsMessageBody.swift in Sources */,
431CE7971F9B0F0200255374 /* OSLog.swift in Sources */,
2FDE1A071E57B12D00B56A27 /* ReadCurrentPageNumberMessageBody.swift in Sources */,
43EBE4521EAD23C40073A0B5 /* TimeInterval.swift in Sources */,
@@ -2350,6 +2383,7 @@
54BC44B11DB70F4A00340EED /* GlucoseSensorDataGlucoseEventTests.swift in Sources */,
43A068EC1CF6BA6900F9EFE4 /* ReadRemainingInsulinMessageBodyTests.swift in Sources */,
2F962EC81E7074E60070EFBD /* BolusNormalPumpEventTests.swift in Sources */,
+ 43DFB61320D37800008A7BAE /* ChangeMaxBasalRateMessageBodyTests.swift in Sources */,
C1EAD6D61C826C43006DBA60 /* MySentryPumpStatusMessageBodyTests.swift in Sources */,
43DAD00620A6B10A000F8529 /* ReadOtherDevicesIDsMessageBodyTests.swift in Sources */,
C1EAD6D81C826C43006DBA60 /* ReadSettingsCarelinkMessageBodyTests.swift in Sources */,
@@ -2366,6 +2400,7 @@
43CA93311CB97191000026B5 /* ReadTempBasalCarelinkMessageBodyTests.swift in Sources */,
54BC44A91DB704A600340EED /* CalBGForGHGlucoseEventTests.swift in Sources */,
C1F000501EBE727C00F65163 /* BasalScheduleTests.swift in Sources */,
+ 43CEC07820D0CF7200F1BC19 /* ReadRemoteControlIDsMessageBodyTests.swift in Sources */,
43FF221C1CB9B9DE00024F30 /* NSDateComponents.swift in Sources */,
C12198A31C8DFC3600BC374C /* BolusCarelinkMessageBodyTests.swift in Sources */,
C121985F1C8DE77D00BC374C /* FindDeviceMessageBodyTests.swift in Sources */,
@@ -2374,9 +2409,11 @@
C1EAD6D71C826C43006DBA60 /* NSDataTests.swift in Sources */,
54BC44731DB46A5200340EED /* GlucosePageTests.swift in Sources */,
54BC44AF1DB70C3E00340EED /* TenSomethingGlucoseEventTests.swift in Sources */,
+ 43DFB61120D37748008A7BAE /* ChangeMaxBolusMessageBodyTests.swift in Sources */,
C143031A1C9A610B00A40450 /* GetBatteryCarelinkMessageBodyTests.swift in Sources */,
43CA93351CB9727F000026B5 /* ChangeTempBasalCarelinkMessageBodyTests.swift in Sources */,
54BC44B71DB81B5100340EED /* GetGlucosePageMessageBodyTests.swift in Sources */,
+ 43DFB60D20D22CCB008A7BAE /* ChangeRemoteControlIDMessageBodyTests.swift in Sources */,
C1EAD6E01C82B910006DBA60 /* CRC8Tests.swift in Sources */,
2F962EC11E6872170070EFBD /* TimestampedHistoryEventTests.swift in Sources */,
54BC44B51DB7184D00340EED /* NSStringExtensions.swift in Sources */,
@@ -2451,6 +2488,7 @@
C1A492691D4A66C0008964FF /* LoopEnacted.swift in Sources */,
C1A492651D4A5DEB008964FF /* BatteryStatus.swift in Sources */,
C1A492631D4A5A19008964FF /* IOBStatus.swift in Sources */,
+ C184875E20BCDB0000ABE9E7 /* ForecastError.swift in Sources */,
431CE7991F9B0F0200255374 /* OSLog.swift in Sources */,
43F348061D596270009933DC /* HKUnit.swift in Sources */,
C133CF931D5943780034B82D /* PredictedBG.swift in Sources */,
@@ -2675,7 +2713,7 @@
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = RileyLinkBLEKit/Info.plist;
@@ -2711,7 +2749,7 @@
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = RileyLinkBLEKit/Info.plist;
@@ -2787,11 +2825,11 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
@@ -2818,11 +2856,11 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
@@ -2885,12 +2923,12 @@
CLANG_WARN_SUSPICIOUS_MOVES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Crypto/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -2913,12 +2951,12 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Crypto/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -2943,12 +2981,12 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = RileyLinkKitUI/Info.plist;
@@ -2979,12 +3017,12 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = RileyLinkKitUI/Info.plist;
@@ -3008,12 +3046,12 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
@@ -3039,11 +3077,11 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
@@ -3126,7 +3164,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -3185,7 +3223,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -3217,7 +3255,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- DEVELOPMENT_TEAM = 57NRR26737;
+ DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = "RileyLink/RileyLink-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.rileylink.rlapp;
@@ -3238,7 +3276,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- DEVELOPMENT_TEAM = 57NRR26737;
+ DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = "RileyLink/RileyLink-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.rileylink.rlapp;
@@ -3257,7 +3295,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- DEVELOPMENT_TEAM = 57NRR26737;
+ DEVELOPMENT_TEAM = "";
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
INFOPLIST_FILE = "RileyLinkTests/RileyLinkTests-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
@@ -3277,7 +3315,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- DEVELOPMENT_TEAM = 57NRR26737;
+ DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = "RileyLinkTests/RileyLinkTests-Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.rileylink.${PRODUCT_NAME:rfc1034identifier}";
@@ -3297,11 +3335,11 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
@@ -3327,11 +3365,11 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 37;
+ CURRENT_PROJECT_VERSION = 38;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 37;
+ DYLIB_CURRENT_VERSION = 38;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
diff --git a/RileyLink.xcodeproj/xcshareddata/xcschemes/Crypto.xcscheme b/RileyLink.xcodeproj/xcshareddata/xcschemes/Crypto.xcscheme
index c2a4ee56c..f05946d32 100644
--- a/RileyLink.xcodeproj/xcshareddata/xcschemes/Crypto.xcscheme
+++ b/RileyLink.xcodeproj/xcshareddata/xcschemes/Crypto.xcscheme
@@ -1,6 +1,6 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion
diff --git a/RileyLinkBLEKit/Info.plist b/RileyLinkBLEKit/Info.plist
index 12c94a4e8..0e8b81880 100644
--- a/RileyLinkBLEKit/Info.plist
+++ b/RileyLinkBLEKit/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
NSPrincipalClass
diff --git a/RileyLinkBLEKit/RileyLinkDeviceError.swift b/RileyLinkBLEKit/RileyLinkDeviceError.swift
index e0e669bc7..b88aad5cc 100644
--- a/RileyLinkBLEKit/RileyLinkDeviceError.swift
+++ b/RileyLinkBLEKit/RileyLinkDeviceError.swift
@@ -39,7 +39,7 @@ extension RileyLinkDeviceError: LocalizedError {
case .peripheralManagerError(let error):
return error.failureReason
default:
- return errorDescription
+ return nil
}
}
}
diff --git a/RileyLinkBLEKitTests/Info.plist b/RileyLinkBLEKitTests/Info.plist
index 40302d5d0..83957c236 100644
--- a/RileyLinkBLEKitTests/Info.plist
+++ b/RileyLinkBLEKitTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleVersion
1
diff --git a/RileyLinkKit/Info.plist b/RileyLinkKit/Info.plist
index 783e22ec8..a16c895d4 100644
--- a/RileyLinkKit/Info.plist
+++ b/RileyLinkKit/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion
diff --git a/RileyLinkKit/PumpOps.swift b/RileyLinkKit/PumpOps.swift
index 1c0c4e11f..bea775877 100644
--- a/RileyLinkKit/PumpOps.swift
+++ b/RileyLinkKit/PumpOps.swift
@@ -22,7 +22,7 @@ public class PumpOps {
private var pumpState: PumpState {
didSet {
- delegate.pumpOps(self, didChange: pumpState)
+ delegate?.pumpOps(self, didChange: pumpState)
}
}
@@ -30,9 +30,9 @@ public class PumpOps {
private let sessionQueue = DispatchQueue(label: "com.rileylink.RileyLinkKit.PumpOps", qos: .utility)
- private unowned let delegate: PumpOpsDelegate
+ private weak var delegate: PumpOpsDelegate?
- public init(pumpSettings: PumpSettings, pumpState: PumpState?, delegate: PumpOpsDelegate) {
+ public init(pumpSettings: PumpSettings, pumpState: PumpState?, delegate: PumpOpsDelegate?) {
self.pumpSettings = pumpSettings
self.delegate = delegate
@@ -40,7 +40,7 @@ public class PumpOps {
self.pumpState = pumpState
} else {
self.pumpState = PumpState()
- self.delegate.pumpOps(self, didChange: self.pumpState)
+ self.delegate?.pumpOps(self, didChange: self.pumpState)
}
}
@@ -98,6 +98,7 @@ public class PumpOps {
NotificationCenter.default.post(name: .DeviceRadioConfigDidChange, object: device)
NotificationCenter.default.addObserver(self, selector: #selector(deviceRadioConfigDidChange(_:)), name: .DeviceRadioConfigDidChange, object: device)
+ NotificationCenter.default.addObserver(self, selector: #selector(deviceRadioConfigDidChange(_:)), name: .DeviceConnectionStateDidChange, object: device)
configuredDevices.insert(device)
}
@@ -107,6 +108,7 @@ public class PumpOps {
}
NotificationCenter.default.removeObserver(self, name: .DeviceRadioConfigDidChange, object: device)
+ NotificationCenter.default.removeObserver(self, name: .DeviceConnectionStateDidChange, object: device)
configuredDevices.remove(device)
}
}
diff --git a/RileyLinkKit/PumpOpsSession.swift b/RileyLinkKit/PumpOpsSession.swift
index ccf18857f..5cdec2bf0 100644
--- a/RileyLinkKit/PumpOpsSession.swift
+++ b/RileyLinkKit/PumpOpsSession.swift
@@ -229,7 +229,7 @@ extension PumpOpsSession {
/// - PumpOpsError.noResponse
/// - PumpOpsError.unexpectedResponse
/// - PumpOpsError.unknownResponse
- public func getBasalSchedule(for profile: BasalProfile = .standard) throws -> BasalSchedule {
+ public func getBasalSchedule(for profile: BasalProfile = .standard) throws -> BasalSchedule? {
try wakeup()
var isFinished = false
@@ -243,21 +243,45 @@ extension PumpOpsSession {
message = PumpMessage(settings: settings, type: .pumpAck)
}
- return BasalSchedule(rawValue: scheduleData)!
+ return BasalSchedule(rawValue: scheduleData)
}
+ /// - Throws:
+ /// - PumpOpsError.crosstalk
+ /// - PumpOpsError.deviceError
+ /// - PumpOpsError.noResponse
+ /// - PumpOpsError.unexpectedResponse
+ /// - PumpOpsError.unknownResponse
public func getOtherDevicesIDs() throws -> ReadOtherDevicesIDsMessageBody {
try wakeup()
return try session.getResponse(to: PumpMessage(settings: settings, type: .readOtherDevicesIDs), responseType: .readOtherDevicesIDs)
}
+ /// - Throws:
+ /// - PumpOpsError.crosstalk
+ /// - PumpOpsError.deviceError
+ /// - PumpOpsError.noResponse
+ /// - PumpOpsError.unexpectedResponse
+ /// - PumpOpsError.unknownResponse
public func getOtherDevicesEnabled() throws -> Bool {
try wakeup()
let response: ReadOtherDevicesStatusMessageBody = try session.getResponse(to: PumpMessage(settings: settings, type: .readOtherDevicesStatus), responseType: .readOtherDevicesStatus)
return response.isEnabled
}
+
+ /// - Throws:
+ /// - PumpOpsError.crosstalk
+ /// - PumpOpsError.deviceError
+ /// - PumpOpsError.noResponse
+ /// - PumpOpsError.unexpectedResponse
+ /// - PumpOpsError.unknownResponse
+ public func getRemoteControlIDs() throws -> ReadRemoteControlIDsMessageBody {
+ try wakeup()
+
+ return try session.getResponse(to: PumpMessage(settings: settings, type: .readRemoteControlIDs), responseType: .readRemoteControlIDs)
+ }
}
@@ -364,6 +388,28 @@ extension PumpOpsSession {
let _: PumpAckMessageBody = try runCommandWithArguments(message)
}
+ /// - Throws: PumpCommandError
+ public func setMaxBasalRate(unitsPerHour: Double) throws {
+ guard let body = ChangeMaxBasalRateMessageBody(maxBasalUnitsPerHour: unitsPerHour) else {
+ throw PumpCommandError.command(PumpOpsError.pumpError(PumpErrorCode.maxSettingExceeded))
+ }
+
+ let message = PumpMessage(settings: settings, type: .setMaxBasalRate, body: body)
+
+ let _: PumpAckMessageBody = try runCommandWithArguments(message)
+ }
+
+ /// - Throws: PumpCommandError
+ public func setMaxBolus(units: Double) throws {
+ guard let body = ChangeMaxBolusMessageBody(maxBolusUnits: units) else {
+ throw PumpCommandError.command(PumpOpsError.pumpError(PumpErrorCode.maxSettingExceeded))
+ }
+
+ let message = PumpMessage(settings: settings, type: .setMaxBolus, body: body)
+
+ let _: PumpAckMessageBody = try runCommandWithArguments(message)
+ }
+
/// Changes the current temporary basal rate
///
/// - Parameters:
@@ -512,9 +558,37 @@ extension PumpOpsSession {
return
}
- /// - Throws: `PumpCommandError` specifying the failure sequence
- public func setBasalSchedule(_ basalSchedule: BasalSchedule, for profile: BasalProfile, type: MessageType) throws {
+ /// - Throws: PumpCommandError
+ public func setRemoteControlEnabled(_ enabled: Bool) throws {
+ let message = PumpMessage(settings: settings, type: .setRemoteControlEnabled, body: SetRemoteControlEnabledMessageBody(enabled: enabled))
+
+ let _: PumpAckMessageBody = try runCommandWithArguments(message)
+ }
+
+ /// - Throws: PumpCommandError
+ public func setRemoteControlID(_ id: Data, atIndex index: Int) throws {
+ guard let body = ChangeRemoteControlIDMessageBody(id: id, index: index) else {
+ throw PumpCommandError.command(PumpOpsError.pumpError(PumpErrorCode.maxSettingExceeded))
+ }
+
+ let message = PumpMessage(settings: settings, type: .setRemoteControlID, body: body)
+
+ let _: PumpAckMessageBody = try runCommandWithArguments(message)
+ }
+
+ /// - Throws: PumpCommandError
+ public func removeRemoteControlID(atIndex index: Int) throws {
+ guard let body = ChangeRemoteControlIDMessageBody(id: nil, index: index) else {
+ throw PumpCommandError.command(PumpOpsError.pumpError(PumpErrorCode.maxSettingExceeded))
+ }
+
+ let message = PumpMessage(settings: settings, type: .setRemoteControlID, body: body)
+ let _: PumpAckMessageBody = try runCommandWithArguments(message)
+ }
+
+ /// - Throws: `PumpCommandError` specifying the failure sequence
+ public func setBasalSchedule(_ basalSchedule: BasalSchedule, for profile: BasalProfile) throws {
let frames = DataFrameMessageBody.dataFramesFromContents(basalSchedule.rawValue)
@@ -522,14 +596,21 @@ extension PumpOpsSession {
return
}
- NSLog(firstFrame.txData.hexadecimalString)
+ let type: MessageType
+ switch profile {
+ case .standard:
+ type = .setBasalProfileStandard
+ case .profileA:
+ type = .setBasalProfileA
+ case .profileB:
+ type = .setBasalProfileB
+ }
let message = PumpMessage(settings: settings, type: type, body: firstFrame)
let _: PumpAckMessageBody = try runCommandWithArguments(message)
for nextFrame in frames.dropFirst() {
let message = PumpMessage(settings: settings, type: type, body: nextFrame)
- NSLog(nextFrame.txData.hexadecimalString)
do {
let _: PumpAckMessageBody = try session.getResponse(to: message)
} catch let error as PumpOpsError {
diff --git a/RileyLinkKit/PumpSettings.swift b/RileyLinkKit/PumpSettings.swift
index 024cef51e..e36e90fc2 100644
--- a/RileyLinkKit/PumpSettings.swift
+++ b/RileyLinkKit/PumpSettings.swift
@@ -51,7 +51,7 @@ extension PumpSettings: CustomDebugStringConvertible {
"## PumpSettings",
"pumpID: ✔︎",
"pumpRegion: \(pumpRegion)",
- ].joined(separator: "\n")
+ ].joined(separator: "\n")
}
}
diff --git a/RileyLinkKit/PumpState.swift b/RileyLinkKit/PumpState.swift
index b2ca14269..18f6aaf97 100644
--- a/RileyLinkKit/PumpState.swift
+++ b/RileyLinkKit/PumpState.swift
@@ -10,7 +10,7 @@ import Foundation
import MinimedKit
-public struct PumpState: RawRepresentable {
+public struct PumpState: RawRepresentable, Equatable {
public typealias RawValue = [String: Any]
public var timeZone: TimeZone
diff --git a/RileyLinkKitTests/Info.plist b/RileyLinkKitTests/Info.plist
index b7683fde8..9798c2ab8 100644
--- a/RileyLinkKitTests/Info.plist
+++ b/RileyLinkKitTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion
diff --git a/RileyLinkKitUI/CommandResponseViewController+RileyLinkDevice.swift b/RileyLinkKitUI/CommandResponseViewController+RileyLinkDevice.swift
index 8b06de238..8eade33ae 100644
--- a/RileyLinkKitUI/CommandResponseViewController+RileyLinkDevice.swift
+++ b/RileyLinkKitUI/CommandResponseViewController+RileyLinkDevice.swift
@@ -188,9 +188,9 @@ extension CommandResponseViewController {
ops?.runSession(withName: "Get Basal Settings", using: device) { (session) in
let response: String
do {
- let schedule = try session.getBasalSchedule(for: .standard)
- var str = String(format: NSLocalizedString("%1$@ basal schedule entries\n", comment: "The format string describing number of basal schedule entries: (1: number of entries)"), integerFormatter.string(from: NSNumber(value: schedule.entries.count))!)
- for entry in schedule.entries {
+ let schedule = try session.getBasalSchedule(for: .profileB)
+ var str = String(format: NSLocalizedString("%1$@ basal schedule entries\n", comment: "The format string describing number of basal schedule entries: (1: number of entries)"), integerFormatter.string(from: NSNumber(value: schedule?.entries.count ?? 0))!)
+ for entry in schedule?.entries ?? [] {
str += "\(String(describing: entry))\n"
}
response = str
diff --git a/RileyLinkKitUI/Info.plist b/RileyLinkKitUI/Info.plist
index 12c94a4e8..0e8b81880 100644
--- a/RileyLinkKitUI/Info.plist
+++ b/RileyLinkKitUI/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
NSPrincipalClass
diff --git a/RileyLinkTests/RileyLinkTests-Info.plist b/RileyLinkTests/RileyLinkTests-Info.plist
index 5422a5804..8e3ad2ab9 100644
--- a/RileyLinkTests/RileyLinkTests-Info.plist
+++ b/RileyLinkTests/RileyLinkTests-Info.plist
@@ -13,7 +13,7 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.0.1
+ 2.0.2
CFBundleSignature
????
CFBundleVersion