File tree Expand file tree Collapse file tree 3 files changed +35
-9
lines changed Expand file tree Collapse file tree 3 files changed +35
-9
lines changed Original file line number Diff line number Diff line change @@ -32,18 +32,19 @@ public struct G7BackfillMessage: Equatable {
3232 return nil
3333 }
3434
35- timestamp = data [ 0 ..< 4 ] . toInt ( )
35+
36+ timestamp = data [ 0 ..< 3 ] . toInt ( )
3637
3738 let glucoseBytes = data [ 4 ..< 6 ] . to ( UInt16 . self)
3839
3940 if glucoseBytes != 0xffff {
4041 glucose = glucoseBytes & 0xfff
41- glucoseIsDisplayOnly = ( glucoseBytes & 0xf000 ) > 0
4242 } else {
4343 glucose = nil
44- glucoseIsDisplayOnly = false
4544 }
4645
46+ glucoseIsDisplayOnly = data [ 7 ] & 0x10 != 0
47+
4748 algorithmState = AlgorithmState ( rawValue: data [ 6 ] )
4849
4950 if data [ 8 ] == 0x7f {
Original file line number Diff line number Diff line change @@ -195,6 +195,9 @@ public final class G7Sensor: G7BluetoothManagerDelegate {
195195 func peripheralDidDisconnect( _ manager: G7BluetoothManager , peripheralManager: G7PeripheralManager , wasRemoteDisconnect: Bool ) {
196196 if let sensorID = sensorID, sensorID == peripheralManager. peripheral. name {
197197
198+ // Sometimes we do not receive the backfillFinished message before disconnect
199+ flushBackfillBuffer ( )
200+
198201 let suspectedEndOfSession : Bool
199202
200203 self . log. info ( " Sensor disconnected: wasRemoteDisconnect:%{public}@ " , String ( describing: wasRemoteDisconnect) )
@@ -249,18 +252,23 @@ public final class G7Sensor: G7BluetoothManagerDelegate {
249252 }
250253 }
251254 case . backfillFinished:
252- if backfillBuffer. count > 0 {
253- delegateQueue. async {
254- self . delegate? . sensor ( self , didReadBackfill: self . backfillBuffer)
255- self . backfillBuffer = [ ]
256- }
257- }
255+ flushBackfillBuffer ( )
258256 default :
259257 self . delegate? . sensor ( self , logComms: response. hexadecimalString)
260258 break
261259 }
262260 }
263261
262+ func flushBackfillBuffer( ) {
263+ if backfillBuffer. count > 0 {
264+ let backfill = backfillBuffer
265+ self . backfillBuffer = [ ]
266+ delegateQueue. async {
267+ self . delegate? . sensor ( self , didReadBackfill: backfill)
268+ }
269+ }
270+ }
271+
264272 func bluetoothManager( _ manager: G7BluetoothManager , didReceiveBackfillResponse response: Data ) {
265273
266274 log. debug ( " Received backfill response: %{public}@ " , response. hexadecimalString)
Original file line number Diff line number Diff line change @@ -131,6 +131,23 @@ final class G7GlucoseMessageTests: XCTestCase {
131131 let data = Data ( hexadecimalString: " cf5802008f00060f10 " ) !
132132 let message = G7BackfillMessage ( data: data) !
133133 XCTAssertEqual ( 153807 , message. timestamp)
134+ XCTAssertEqual ( 143 , message. glucose)
135+ XCTAssertEqual ( . known( . ok) , message. algorithmState)
136+ XCTAssertNil ( message. condition)
137+ XCTAssertEqual ( false , message. glucoseIsDisplayOnly)
138+ XCTAssertEqual ( true , message. hasReliableGlucose)
139+ }
140+
141+ func testBackfillTimestampWithHighByte( ) {
142+ let data = Data ( hexadecimalString: " f20e0d00ba00060ffb " ) !
143+ let message = G7BackfillMessage ( data: data) !
144+ XCTAssertEqual ( 855794 , message. timestamp)
145+ }
146+
147+ func testBackfillCalibration( ) {
148+ let data = Data ( hexadecimalString: " f63d00008500061efe " ) !
149+ let message = G7BackfillMessage ( data: data) !
150+ XCTAssertEqual ( true , message. glucoseIsDisplayOnly)
134151 }
135152
136153}
You can’t perform that action at this time.
0 commit comments