Example #1
0
 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);
        }