Skip to content

Commit bb87823

Browse files
authored
Merge pull request #107 from LoopKit/dev
Release 2.1.1
2 parents 1291801 + 399f51f commit bb87823

File tree

8 files changed

+257
-14
lines changed

8 files changed

+257
-14
lines changed

CGMBLEKit Example/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>APPL</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2.1</string>
18+
<string>2.1.1</string>
1919
<key>CFBundleVersion</key>
2020
<string>1</string>
2121
<key>LSRequiresIPhoneOS</key>

CGMBLEKit.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,7 @@
906906
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
907907
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
908908
COPY_PHASE_STRIP = NO;
909-
CURRENT_PROJECT_VERSION = 17;
909+
CURRENT_PROJECT_VERSION = 18;
910910
DEBUG_INFORMATION_FORMAT = dwarf;
911911
ENABLE_STRICT_OBJC_MSGSEND = YES;
912912
ENABLE_TESTABILITY = YES;
@@ -966,7 +966,7 @@
966966
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
967967
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
968968
COPY_PHASE_STRIP = NO;
969-
CURRENT_PROJECT_VERSION = 17;
969+
CURRENT_PROJECT_VERSION = 18;
970970
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
971971
ENABLE_NS_ASSERTIONS = NO;
972972
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -1000,7 +1000,7 @@
10001000
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
10011001
DEFINES_MODULE = YES;
10021002
DYLIB_COMPATIBILITY_VERSION = 1;
1003-
DYLIB_CURRENT_VERSION = 17;
1003+
DYLIB_CURRENT_VERSION = 18;
10041004
DYLIB_INSTALL_NAME_BASE = "@rpath";
10051005
INFOPLIST_FILE = CGMBLEKit/Info.plist;
10061006
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -1023,7 +1023,7 @@
10231023
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
10241024
DEFINES_MODULE = YES;
10251025
DYLIB_COMPATIBILITY_VERSION = 1;
1026-
DYLIB_CURRENT_VERSION = 17;
1026+
DYLIB_CURRENT_VERSION = 18;
10271027
DYLIB_INSTALL_NAME_BASE = "@rpath";
10281028
INFOPLIST_FILE = CGMBLEKit/Info.plist;
10291029
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";

CGMBLEKit/CalibrationState.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ extension CalibrationState: CustomStringConvertible {
9999
switch self {
100100
case .known(let state):
101101
return String(describing: state)
102-
case .unknown:
103-
return String(describing: self)
102+
case .unknown(let value):
103+
return ".unknown(\(value))"
104104
}
105105
}
106106
}

CGMBLEKit/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>FMWK</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2.1</string>
18+
<string>2.1.1</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>

CGMBLEKit/Transmitter.swift

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -273,10 +273,19 @@ public final class Transmitter: BluetoothManagerDelegate {
273273
Glucose(transmitterID: id.id, status: backfillMessage.status, glucoseMessage: $0, timeMessage: timeMessage, activationDate: activationDate)
274274
}
275275

276-
if glucose.count > 0 {
277-
delegateQueue.async {
278-
self.delegate?.transmitter(self, didReadBackfill: glucose)
279-
}
276+
guard glucose.count > 0 else {
277+
break
278+
}
279+
280+
guard glucose.first!.glucoseMessage.timestamp >= backfillMessage.startTime,
281+
glucose.last!.glucoseMessage.timestamp <= backfillMessage.endTime
282+
else {
283+
log.error("GlucoseBackfillRxMessage time interval not reflected in glucose: %{public}@, buffer: %{public}@", response.hexadecimalString, String(reflecting: backfillBuffer))
284+
break
285+
}
286+
287+
delegateQueue.async {
288+
self.delegate?.transmitter(self, didReadBackfill: glucose)
280289
}
281290
case .none:
282291
delegateQueue.async {

CGMBLEKitTests/GlucoseBackfillMessageTests.swift

Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class GlucoseBackfillMessageTests: XCTestCase {
2727
XCTAssertEqual(50, message.bufferLength)
2828
XCTAssertEqual(0xcbe6, message.bufferCRC)
2929

30+
// 0xbc46
31+
// 0b10111100 01000110
3032
var buffer = GlucoseBackfillFrameBuffer(identifier: message.identifier)
3133
buffer.append(Data(hexadecimalString: "0100bc460000b7ff52008b0006eee30053008500")!)
3234
buffer.append(Data(hexadecimalString: "020006eb0f025300800006ee3a0353007e0006f5")!)
@@ -63,11 +65,243 @@ class GlucoseBackfillMessageTests: XCTestCase {
6365
XCTAssertEqual(-08, messages[4].trend)
6466
}
6567

68+
func testGlucoseBackfill2() {
69+
let message = GlucoseBackfillTxMessage(byte1: 5, byte2: 2, identifier: 0, startTime: 4648682, endTime: 4650182) // 25 minutes
70+
71+
XCTAssertEqual(Data(hexadecimalString: "50050200eaee4600c6f446000000000000009f6d")!, message.data, message.data.hexadecimalString)
72+
73+
let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000103eaee4600c6f446003a0000004f3ac9e6")!)!
74+
75+
XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
76+
XCTAssertEqual(1, response.backfillStatus)
77+
XCTAssertEqual(3, response.identifier)
78+
XCTAssertEqual(4648682, response.startTime)
79+
XCTAssertEqual(4650182, response.endTime)
80+
XCTAssertEqual(58, response.bufferLength)
81+
XCTAssertEqual(0x3a4f, response.bufferCRC)
82+
83+
// 0x6e3c
84+
// 0b01101110 00111100
85+
var buffer = GlucoseBackfillFrameBuffer(identifier: 0xc0)
86+
buffer.append(Data(hexadecimalString: "01c06e3c0000eaee4600920007fd16f046009500")!)
87+
buffer.append(Data(hexadecimalString: "02c0070042f14600960007026ef2460099000704")!)
88+
buffer.append(Data(hexadecimalString: "03c09af3460093000700c6f44600900007fc")!)
89+
90+
XCTAssertEqual(Int(response.bufferLength), buffer.count)
91+
XCTAssertEqual(response.bufferCRC, buffer.crc16)
92+
93+
let messages = buffer.glucose
94+
95+
XCTAssertEqual(6, messages.count)
96+
}
97+
6698
func testMalformedBackfill() {
6799
var buffer = GlucoseBackfillFrameBuffer(identifier: 0)
68100
buffer.append(Data(hexadecimalString: "0100bc460000b7ff52008b0006eee30053008500")!)
69101
buffer.append(Data(hexadecimalString: "020006eb0f025300800006ee3a0353007e0006")!)
70102

71103
XCTAssertEqual(3, buffer.glucose.count)
72104
}
105+
106+
func testGlucoseBackfill3() {
107+
let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "510001023d6a0e00c16d0e00280000005b1a9154")!)!
108+
109+
XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
110+
XCTAssertEqual(1, response.backfillStatus)
111+
XCTAssertEqual(2, response.identifier)
112+
XCTAssertEqual(944701, response.startTime)
113+
XCTAssertEqual(945601, response.endTime)
114+
XCTAssertEqual(40, response.bufferLength)
115+
XCTAssertEqual(0x1A5B, response.bufferCRC)
116+
117+
// 0x440c
118+
// 0b01000100 00001100
119+
var buffer = GlucoseBackfillFrameBuffer(identifier: 0x80)
120+
buffer.append(Data(hexadecimalString: "0180440c00003d6a0e005c0007fe696b0e005d00")!)
121+
buffer.append(Data(hexadecimalString: "028007ff956c0e005e000700c16d0e005d000700")!)
122+
123+
XCTAssertEqual(Int(response.bufferLength), buffer.count)
124+
XCTAssertEqual(response.bufferCRC, buffer.crc16)
125+
126+
let messages = buffer.glucose
127+
128+
XCTAssertEqual(response.startTime, messages.first!.timestamp)
129+
XCTAssertEqual(response.endTime, messages.last!.timestamp)
130+
131+
XCTAssertEqual(4, messages.count)
132+
}
133+
134+
func testGlucoseBackfill4() {
135+
let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000103c9740e004d780e0028000000235bd94c")!)!
136+
137+
XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
138+
XCTAssertEqual(1, response.backfillStatus)
139+
XCTAssertEqual(3, response.identifier)
140+
XCTAssertEqual(947401, response.startTime)
141+
XCTAssertEqual(948301, response.endTime)
142+
XCTAssertEqual(40, response.bufferLength)
143+
XCTAssertEqual(0x5B23, response.bufferCRC)
144+
145+
// 0x04d0
146+
// 0b00000100 11010000
147+
var buffer = GlucoseBackfillFrameBuffer(identifier: 0xc0)
148+
buffer.append(Data(hexadecimalString: "01c04d0c0000c9740e005a000700f5750e005800")!)
149+
buffer.append(Data(hexadecimalString: "02c007ff21770e00590007ff4d780e0059000700")!)
150+
151+
XCTAssertEqual(Int(response.bufferLength), buffer.count)
152+
XCTAssertEqual(response.bufferCRC, buffer.crc16)
153+
154+
let messages = buffer.glucose
155+
156+
XCTAssertEqual(response.startTime, messages.first!.timestamp)
157+
XCTAssertEqual(response.endTime, messages.last!.timestamp)
158+
159+
XCTAssertEqual(4, messages.count)
160+
}
161+
162+
func testNotGlucoseBackfill1() {
163+
let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "5100010339410e0085a90e00ac06000070ca9143")!)!
164+
165+
XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
166+
XCTAssertEqual(1, response.backfillStatus)
167+
XCTAssertEqual(3, response.identifier)
168+
XCTAssertEqual(934201, response.startTime)
169+
XCTAssertEqual(960901, response.endTime)
170+
XCTAssertEqual(1708, response.bufferLength)
171+
XCTAssertEqual(0xCA70, response.bufferCRC)
172+
173+
// 0x4a4f
174+
// 0b01001010 01001111
175+
var buffer = GlucoseBackfillFrameBuffer(identifier: 0xc0)
176+
buffer.append(Data(hexadecimalString: "01c04a4f4a5558ef554453b7392a0df008571a7f")!)
177+
buffer.append(Data(hexadecimalString: "02c0451e0d74bdec596b633cf2b03d511ef3d048")!)
178+
buffer.append(Data(hexadecimalString: "03c009145e959ca51f7a1663ca31676b175d7bc7")!)
179+
buffer.append(Data(hexadecimalString: "04c0de00c954fcd3281d5163ed873cdc136fca3e")!)
180+
buffer.append(Data(hexadecimalString: "05c0c7da188dd5fbb8997206da1cc8d0c22f8434")!)
181+
buffer.append(Data(hexadecimalString: "06c04d50b29df06b12e7162f2d73fd553e44e469")!)
182+
buffer.append(Data(hexadecimalString: "07c02b4bb61d66cf6e949ee0f07dbe0cc12127ae")!)
183+
buffer.append(Data(hexadecimalString: "08c03bf887be09ece7595adfee494b25368103b4")!)
184+
buffer.append(Data(hexadecimalString: "09c07eefb9b5398468a53f00355341d19b50c8b1")!)
185+
buffer.append(Data(hexadecimalString: "0ac028f0ddb4dc09a2c74deedf7fdff13fcd6b0e")!)
186+
buffer.append(Data(hexadecimalString: "0bc0ad2d7311ac9ec1908fb7ee5557c463ea4fea")!)
187+
buffer.append(Data(hexadecimalString: "0cc0bf3c62d9aa62d7c3d447c959b51d31fd016d")!)
188+
buffer.append(Data(hexadecimalString: "0dc0278116abd1252ad66c894a39ed7c6d72086e")!)
189+
buffer.append(Data(hexadecimalString: "0ec0aaee3bf9b05ccb7b23e1c27d777173c4d9fd")!)
190+
buffer.append(Data(hexadecimalString: "0fc044048720d76a696249737f999f944995e44e")!)
191+
buffer.append(Data(hexadecimalString: "10c0495e4cb7f22327a920a843de1b4522a68108")!)
192+
buffer.append(Data(hexadecimalString: "11c058c482389192ed920e322b71900d747a9492")!)
193+
buffer.append(Data(hexadecimalString: "12c0eac06906ff4863f0e8da07d1ead29fc15bd3")!)
194+
buffer.append(Data(hexadecimalString: "13c0c0be38548fe9e229c64c9c0f3e9b4c4c1d83")!)
195+
buffer.append(Data(hexadecimalString: "14c018a936bdde548e4244093e77c87adda0a1cf")!)
196+
buffer.append(Data(hexadecimalString: "15c0fb97d1d147dd0bc6552faa4d62ab553e1682")!)
197+
buffer.append(Data(hexadecimalString: "16c0f15f8cb77decb934bfe0c711a026dd4bf36b")!)
198+
buffer.append(Data(hexadecimalString: "17c0bd268b0eee07ed20a0f3856ea449b1503708")!)
199+
buffer.append(Data(hexadecimalString: "18c00872ed5a996a13480b81fc82b6ca1e7dd379")!)
200+
buffer.append(Data(hexadecimalString: "19c06fb4c5bc84e63688b0a77edbab85bfb61b45")!)
201+
buffer.append(Data(hexadecimalString: "1ac071d29d30edb43db6b8e114bbbcd67f9dd3a9")!)
202+
buffer.append(Data(hexadecimalString: "1bc0569e17a8a80c015def11ddce1b8f194ff6e2")!)
203+
buffer.append(Data(hexadecimalString: "1cc0df79ffbc1e077fe249b47550feb5dcd53044")!)
204+
buffer.append(Data(hexadecimalString: "1dc0b557e2ba03caed61de30221b0330e1cc49b1")!)
205+
buffer.append(Data(hexadecimalString: "1ec006f05e739d737939baf8b14a8b7a6faae96e")!)
206+
buffer.append(Data(hexadecimalString: "1fc00b82d430e9e75fb8e7e2affbdd292a41fad2")!)
207+
buffer.append(Data(hexadecimalString: "20c0fbf8e8f2686aaaf19d2809eecd3bd4f63516")!)
208+
buffer.append(Data(hexadecimalString: "21c0a7df809e73538e459c1a9cd27a566f636e22")!)
209+
buffer.append(Data(hexadecimalString: "22c0dbb3c23d7d7847dee77311287e6c6b192eb4")!)
210+
buffer.append(Data(hexadecimalString: "23c0d30038d70241a80b9e390778a897dd1632cc")!)
211+
buffer.append(Data(hexadecimalString: "24c0177b23127b464c07a499abeff05f13e40998")!)
212+
buffer.append(Data(hexadecimalString: "25c0855350c7c4a335e95d2e569996639e8341b4")!)
213+
buffer.append(Data(hexadecimalString: "26c0d42874475710a50764d4a4166c0e420aff7f")!)
214+
buffer.append(Data(hexadecimalString: "27c0facb1d61cb8057de64546fc9f24f93603093")!)
215+
buffer.append(Data(hexadecimalString: "28c080befb84f22c60d398f017dde114d0557b27")!)
216+
buffer.append(Data(hexadecimalString: "29c07555e92425342c0674b62fa517b13ba0e3b0")!)
217+
buffer.append(Data(hexadecimalString: "2ac0923624bce36c89fade1f66bd7ae1e8e7d598")!)
218+
buffer.append(Data(hexadecimalString: "2bc0d345ceea668373d31f95b03a6ee7fff1a3b5")!)
219+
buffer.append(Data(hexadecimalString: "2cc045e409b8d31dd53ae9d353f35738819fbb79")!)
220+
buffer.append(Data(hexadecimalString: "2dc0a5d31fd3c3b7b217d3f79b245d3714b0523d")!)
221+
buffer.append(Data(hexadecimalString: "2ec0eb576e0193584bff8ecada0dc54e4ebde86c")!)
222+
buffer.append(Data(hexadecimalString: "2fc092b8ef52003f8b76e90d920ca738c998bb70")!)
223+
buffer.append(Data(hexadecimalString: "30c07cfa0f7a69d14b79f605d254a164fd67c658")!)
224+
buffer.append(Data(hexadecimalString: "31c049a329162e03f41c12db845b73301f5bbb81")!)
225+
buffer.append(Data(hexadecimalString: "32c08a21ca0995b5aa413897ea9e2b7c563ced07")!)
226+
buffer.append(Data(hexadecimalString: "33c05d51a18e19209f1c55054bd2f74677c71070")!)
227+
buffer.append(Data(hexadecimalString: "34c0299e29ae5576a220b0b767fc4e898aaf2df1")!)
228+
buffer.append(Data(hexadecimalString: "35c0bbb554546b69c53b4b3a63bd524bfbe728e6")!)
229+
buffer.append(Data(hexadecimalString: "36c0cd4e8c6e10e72950e66bfa0d23b954a7aede")!)
230+
buffer.append(Data(hexadecimalString: "37c0ea5df836af737298d44b4b156ced47727920")!)
231+
buffer.append(Data(hexadecimalString: "38c02303edefc4916cfdba55829426c153d0d30c")!)
232+
buffer.append(Data(hexadecimalString: "39c0dfee091fea60c2da239c9aabef8eddbe49b5")!)
233+
buffer.append(Data(hexadecimalString: "3ac02788f23fb030e7606329ed24cbee10bc20eb")!)
234+
buffer.append(Data(hexadecimalString: "3bc00a601d46c10bab8cdf04513a47550b0e4fe5")!)
235+
buffer.append(Data(hexadecimalString: "3cc072ea5e514432c81e325464e1ac2d659378d2")!)
236+
buffer.append(Data(hexadecimalString: "3dc0f050e994caa508fdea7202ed70a4acc6e8ab")!)
237+
buffer.append(Data(hexadecimalString: "3ec069ab0d13863943415b492569db29b9594dbe")!)
238+
buffer.append(Data(hexadecimalString: "3fc02c37277a98b88956f0def9ad866f44ca6d9f")!)
239+
buffer.append(Data(hexadecimalString: "40c0e5bd6aa2dbd835fab2ec238de4a635a3f6cb")!)
240+
buffer.append(Data(hexadecimalString: "41c0aafa8812d94d5fe722b3ecfb74eb4c12c622")!)
241+
buffer.append(Data(hexadecimalString: "42c08c5b4bb2f28069fc6f9dcb26bc84c0cc01c7")!)
242+
buffer.append(Data(hexadecimalString: "43c04ad95cefa1f62a18fa2c5a05bac208685cdb")!)
243+
buffer.append(Data(hexadecimalString: "44c0ffe910ddc010b30f457578ab24a866b8a94d")!)
244+
buffer.append(Data(hexadecimalString: "45c01b0bb36e58f401eb15da2e6710721e39c573")!)
245+
buffer.append(Data(hexadecimalString: "46c06165075618fc9626c53acdd9cb8bcfb0719f")!)
246+
buffer.append(Data(hexadecimalString: "47c081599f76725e30d4de39cdcc7f7c0c918d68")!)
247+
buffer.append(Data(hexadecimalString: "48c0563b99dce4913105b793f4d539fe668feef6")!)
248+
buffer.append(Data(hexadecimalString: "49c04ebaaf9f4dfda6cac4d617cd07098fec39f0")!)
249+
buffer.append(Data(hexadecimalString: "4ac04c1ae961bc4f3e2cd395396dc8098bbf4bd5")!)
250+
buffer.append(Data(hexadecimalString: "4bc0d95ed88f296e8d68c35085af86e5ef8d8bf0")!)
251+
buffer.append(Data(hexadecimalString: "4cc0658ccce111259ce8ac5cbedfc46deda77433")!)
252+
buffer.append(Data(hexadecimalString: "4dc05fda2f8d2885082db4b1356c5e2a0e830471")!)
253+
buffer.append(Data(hexadecimalString: "4ec066c7813ff84a9da11fe343e5a95bbfa3082c")!)
254+
buffer.append(Data(hexadecimalString: "4fc03bcfd6fe6d9657d04f06ed7bc461ebe18d47")!)
255+
buffer.append(Data(hexadecimalString: "50c035bbe880ba24d7c84f73ae061b33d62a1845")!)
256+
buffer.append(Data(hexadecimalString: "51c0650f0a6bbc91b2771549cf49a5a4faf8b278")!)
257+
buffer.append(Data(hexadecimalString: "52c07ac551477e6cd10fe6a3b43d62b02569d110")!)
258+
buffer.append(Data(hexadecimalString: "53c005f79d6de0ec017e7a0c98961ce6770f885d")!)
259+
buffer.append(Data(hexadecimalString: "54c0d05fee0b5f5bf9de8c61b58f8634ecbf3347")!)
260+
buffer.append(Data(hexadecimalString: "55c0e0c7d345fbc40f35aed12e82f8ccb0ed9335")!)
261+
buffer.append(Data(hexadecimalString: "56c0b1c8b263179e")!)
262+
263+
XCTAssertEqual(Int(response.bufferLength), buffer.count)
264+
XCTAssertEqual(response.bufferCRC, buffer.crc16)
265+
266+
let messages = buffer.glucose
267+
268+
XCTAssertFalse(messages.first!.timestamp >= response.startTime &&
269+
messages.last!.timestamp <= response.endTime)
270+
271+
XCTAssertEqual(191, messages.count)
272+
}
273+
274+
func testNotGlucoseBackfill2() {
275+
let response = GlucoseBackfillRxMessage(data: Data(hexadecimalString: "51000102b1aa0e00e5b20e00a000000020a39b7e")!)!
276+
277+
XCTAssertEqual(.ok, TransmitterStatus(rawValue: response.status))
278+
XCTAssertEqual(1, response.backfillStatus)
279+
XCTAssertEqual(2, response.identifier)
280+
XCTAssertEqual(961201, response.startTime)
281+
XCTAssertEqual(963301, response.endTime)
282+
XCTAssertEqual(160, response.bufferLength)
283+
XCTAssertEqual(0xA320, response.bufferCRC)
284+
285+
// 0xcde3
286+
// 0b11001101 11100011
287+
var buffer = GlucoseBackfillFrameBuffer(identifier: 0x80)
288+
buffer.append(Data(hexadecimalString: "0180cde3fd48248e37a7bf6c2d9d78d4bfef6d5b")!)
289+
buffer.append(Data(hexadecimalString: "02809f074c9039b6d3b841f422cf36398338f98c")!)
290+
buffer.append(Data(hexadecimalString: "038004160a5a1ad37c382f3ca23ea215c644f7b6")!)
291+
buffer.append(Data(hexadecimalString: "04802ed7376fa7c83c3ecf0b645233f9b3c80238")!)
292+
buffer.append(Data(hexadecimalString: "05805692724e630a703f01b0a942250f725553d2")!)
293+
buffer.append(Data(hexadecimalString: "06804ca2727a4051033a550da80905caf77c735d")!)
294+
buffer.append(Data(hexadecimalString: "07808f937b4b9602c5dd6fa13ae983e00783b28e")!)
295+
buffer.append(Data(hexadecimalString: "088069846e672c106b339159ead9ee1c08e1a159")!)
296+
297+
XCTAssertEqual(Int(response.bufferLength), buffer.count)
298+
XCTAssertEqual(response.bufferCRC, buffer.crc16)
299+
300+
let messages = buffer.glucose
301+
302+
XCTAssertFalse(messages.first!.timestamp >= response.startTime &&
303+
messages.last!.timestamp <= response.endTime)
304+
305+
XCTAssertEqual(17, messages.count)
306+
}
73307
}

CGMBLEKitTests/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>BNDL</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2.1</string>
18+
<string>2.1.1</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>

ResetTransmitter/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<key>CFBundlePackageType</key>
1818
<string>APPL</string>
1919
<key>CFBundleShortVersionString</key>
20-
<string>2.1</string>
20+
<string>2.1.1</string>
2121
<key>CFBundleVersion</key>
2222
<string>1</string>
2323
<key>LSRequiresIPhoneOS</key>

0 commit comments

Comments
 (0)