public override async Task Refresh( ) { await base.Refresh( ); if (!Characteristics.Characteristics.TryGetValue(HeightSpeed, out var heightAndSpeed) || heightAndSpeed == null) { Logger.Error("Failed to find characteristic for Height and Speed " + $"with UUID '{HeightSpeed}'"); return; } _subscriber?.Dispose( ); // Attention: this is to hard to test _subscriber = heightAndSpeed.ValueChanged .SubscribeOn(Scheduler) .Subscribe(OnValueChanged); var rawValue = GetValueOrEmpty(HeightSpeed).ToArray( ); var details = new RawValueChangedDetails(HeightSpeed, rawValue, DateTimeOffset.Now, GattServiceUuid); _subjectHeightSpeed.OnNext(details); }
private void OnValueChanged(GattCharacteristicValueChangedDetails details) { if (details == null) { Logger.Error($"{typeof ( GattCharacteristicValueChangedDetails )} is null"); return; } Logger.Debug($"Value = {details.Value.ToHex ( )}, " + $"Timestamp = {details.Timestamp}, " + $"Uuid = {details.Uuid}"); if (details.Value.Count( ) != 4) { Logger.Error($"Failed, expected 4 bytes but received {details.Value.Count ( )}"); return; } var valueChanged = new RawValueChangedDetails(HeightSpeed, details.Value, details.Timestamp, details.Uuid); _subjectHeightSpeed.OnNext(valueChanged); }