File tree Expand file tree Collapse file tree 5 files changed +26
-8
lines changed
Expand file tree Collapse file tree 5 files changed +26
-8
lines changed Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments