public static IObservable <ushort> WhenHeartRateBpm(this IPeripheral peripheral) => peripheral .WhenConnectedGetKnownService(HeartRateServiceUuid) .Select(x => x.DiscoverCharacteristics()) .Switch() .Take(1) .Select(x => x.ReadInterval(TimeSpan.FromSeconds(3))) .Switch() .Select(x => { if ((x.Data[0] & 0x01) == 0) { return((ushort)x.Data[1]); } var bpm = (ushort)x.Data[1]; bpm = (ushort)(((bpm >> 8) & 0xFF) | ((bpm << 8) & 0xFF00)); return(bpm); });