Skip to content

Commit 0898aa1

Browse files
authored
Updates for G6 support (#101)
1 parent 35feb4a commit 0898aa1

File tree

5 files changed

+26
-8
lines changed

5 files changed

+26
-8
lines changed

CGMBLEKit/Messages/GlucoseBackfillMessage.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,13 @@ struct GlucoseBackfillFrameBuffer {
110110
from: glucoseData.startIndex,
111111
to: glucoseData.endIndex,
112112
by: GlucoseSubMessage.size
113-
).map {
114-
return GlucoseSubMessage(data: glucoseData[$0..<$0.advanced(by: GlucoseSubMessage.size)])!
113+
).compactMap {
114+
let range = $0..<$0.advanced(by: GlucoseSubMessage.size)
115+
guard glucoseData.endIndex >= range.endIndex else {
116+
return nil
117+
}
118+
119+
return GlucoseSubMessage(data: glucoseData[range])
115120
}
116121
}
117122
}

CGMBLEKit/Messages/GlucoseRxMessage.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public struct GlucoseSubMessage: TransmitterRxMessage {
1919
public let trend: Int8
2020

2121
init?(data: Data) {
22-
guard data.count == GlucoseSubMessage.size else {
22+
guard data.count >= GlucoseSubMessage.size else {
2323
return nil
2424
}
2525

@@ -50,18 +50,18 @@ public struct GlucoseRxMessage: TransmitterRxMessage {
5050
public let glucose: GlucoseSubMessage
5151

5252
init?(data: Data) {
53-
guard data.count == 16 && data.isCRCValid else {
53+
guard data.count >= 16 && data.isCRCValid else {
5454
return nil
5555
}
5656

57-
guard data.starts(with: .glucoseRx) else {
57+
guard data.starts(with: .glucoseRx) || data.starts(with: .glucoseG6Rx) else {
5858
return nil
5959
}
6060

6161
status = data[1]
6262
sequence = data[2..<6].toInt()
6363

64-
guard let glucose = GlucoseSubMessage(data: data[6..<14]) else {
64+
guard let glucose = GlucoseSubMessage(data: data[6...]) else {
6565
return nil
6666
}
6767
self.glucose = glucose

CGMBLEKit/Opcode.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ enum Opcode: UInt8 {
1414
case authRequestRx = 0x03
1515
case authChallengeTx = 0x04
1616
case authChallengeRx = 0x05
17-
case keepAlive = 0x06
17+
case keepAlive = 0x06 // auth; setAdvertisementParametersTx for control
1818
case bondRequest = 0x07
1919

2020
// Control
2121
case disconnectTx = 0x09
22+
23+
case setAdvertisementParametersRx = 0x1c
2224

2325
case firmwareVersionTx = 0x20
2426
case firmwareVersionRx = 0x21
@@ -45,6 +47,9 @@ enum Opcode: UInt8 {
4547

4648
case transmitterVersionTx = 0x4a
4749
case transmitterVersionRx = 0x4b
50+
51+
case glucoseG6Tx = 0x4e
52+
case glucoseG6Rx = 0x4f
4853

4954
case glucoseBackfillTx = 0x50
5055
case glucoseBackfillRx = 0x51

CGMBLEKit/Transmitter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ public final class Transmitter: BluetoothManagerDelegate {
230230
guard response.count > 0 else { return }
231231

232232
switch Opcode(rawValue: response[0]) {
233-
case .glucoseRx?:
233+
case .glucoseRx?, .glucoseG6Rx?:
234234
if let glucoseMessage = GlucoseRxMessage(data: response),
235235
let timeMessage = lastTimeMessage,
236236
let activationDate = activationDate

CGMBLEKitTests/GlucoseBackfillMessageTests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,12 @@ class GlucoseBackfillMessageTests: XCTestCase {
6262
XCTAssertEqual(.known(.ok), CalibrationState(rawValue: messages[4].state))
6363
XCTAssertEqual(-08, messages[4].trend)
6464
}
65+
66+
func testMalformedBackfill() {
67+
var buffer = GlucoseBackfillFrameBuffer(identifier: 0)
68+
buffer.append(Data(hexadecimalString: "0100bc460000b7ff52008b0006eee30053008500")!)
69+
buffer.append(Data(hexadecimalString: "020006eb0f025300800006ee3a0353007e0006")!)
70+
71+
XCTAssertEqual(3, buffer.glucose.count)
72+
}
6573
}

0 commit comments

Comments
 (0)