private void Timer_Tick(object state) { int count; lock (_sync) { count = (_count = ++_count) % HeartRates.Length; } HeartRateUpdated?.Invoke(HeartRates[count]); }
private void Timer_Tick(object state) { int count; lock (_sync) { count = _count = ++_count; if (count >= HeartRates.Length) { return; } } HeartRateUpdated?.Invoke(HeartRates[count]); }
public void HeartRate_ValueChanged( GattCharacteristic sender, GattValueChangedEventArgs args) { var buffer = args.CharacteristicValue; if (buffer.Length == 0) { return; } var byteBuffer = Interlocked.Exchange(ref _buffer, null) ?? new byte[buffer.Length]; if (byteBuffer.Length != buffer.Length) { byteBuffer = new byte[buffer.Length]; } try { using var reader = DataReader.FromBuffer(buffer); reader.ReadBytes(byteBuffer); var readingValue = ReadBuffer(byteBuffer, (int)buffer.Length); if (readingValue == null) { Debug.WriteLine($"Buffer was too small. Got {buffer.Length}."); return; } var reading = readingValue.Value; Debug.WriteLine($"Read {reading.Flags:X} {reading.Status} {reading.BeatsPerMinute}"); HeartRateUpdated?.Invoke(reading); } finally { Volatile.Write(ref _buffer, byteBuffer); } }
private void HeartRate_ValueChanged( GattCharacteristic sender, GattValueChangedEventArgs args) { var value = args.CharacteristicValue; if (value.Length == 0) { return; } using (var reader = DataReader.FromBuffer(value)) { byte[] data = new byte[value.Length]; reader.ReadBytes(data); var bpm = -1; var flags = data[0]; var isshort = (flags & 1) == 1; // 1 == UINT16 var contactSensor = (ContactSensorStatus)((flags >> 1) & 3); var minLength = isshort ? 3 : 2; if (value.Length < minLength) { Debug.WriteLine($"Buffer was too small. Got {value.Length}, expected {minLength}."); return; } HeartRateServiceData hrsd = new HeartRateServiceData(data); LogData(hrsd); bpm = hrsd.HeartRateMeasurement; Debug.WriteLine($"Read {flags.ToString("X")} {contactSensor} {bpm}"); foreach (var rr in hrsd.RRIntervals) { Debug.WriteLine($"RR Interval {rr}"); } HeartRateUpdated?.Invoke(contactSensor, bpm); } }
public void HeartRate_ValueChanged( GattCharacteristic sender, GattValueChangedEventArgs args) { var value = args.CharacteristicValue; if (value.Length == 0) { return; } using (var reader = DataReader.FromBuffer(value)) { var bpm = -1; var flags = reader.ReadByte(); var isshort = (flags & 1) == 1; var contactSensor = (ContactSensorStatus)((flags >> 1) & 3); var minLength = isshort ? 3 : 2; if (value.Length < minLength) { Debug.WriteLine($"Buffer was too small. Got {value.Length}, expected {minLength}."); return; } if (value.Length > 1) { bpm = isshort ? reader.ReadUInt16() : reader.ReadByte(); } Debug.WriteLine($"Read {flags:X} {contactSensor} {bpm}"); HeartRateUpdated?.Invoke(contactSensor, bpm); } }
protected virtual void OnHeartRateUpdated() => HeartRateUpdated?.Invoke( this, new HeartBeatEventArgs(PreviousHeartBeat, CurrentHeartBeat));