public void Update() { if (Current() > _previousDistance) { _previousDistance = Current(); _onUpdated.Invoke(Current()); } }
/// <summary> /// Sets up the notifications; /// Will call Status /// </summary> /// <param name="notifyType"></param> /// <returns>true if the notify was set up. </returns> public async Task <bool> NotifyDistanceAsync(GattClientCharacteristicConfigurationDescriptorValue notifyType = GattClientCharacteristicConfigurationDescriptorValue.Notify) { if (!await EnsureCharacteristicAsync()) { return(false); } var ch = Characteristics[6]; if (ch == null) { return(false); } GattCommunicationStatus result = GattCommunicationStatus.ProtocolError; try { result = await ch.WriteClientCharacteristicConfigurationDescriptorAsync(notifyType); if (!NotifyDistance_ValueChanged_Set) { // Only set the event callback once NotifyDistance_ValueChanged_Set = true; ch.ValueChanged += (sender, args) => { var datameaning = "U8^20_/_2.54_*|HEX|Distance|cm"; var parseResult = BluetoothDeviceController.BleEditor.ValueParser.Parse(args.CharacteristicValue, datameaning); Distance = parseResult.ValueList.GetValue("Distance").AsDouble; DistanceEvent?.Invoke(parseResult); }; } } catch (Exception e) { Status.ReportStatus($"NotifyDistance: {e.Message}", result); return(false); } Status.ReportStatus($"NotifyDistance: set notification", result); return(true); }