protected virtual bool EnableNotifications() { var descriptor = this.native.GetDescriptor(NotifyDescriptorId); if (descriptor == null) { throw new ArgumentException("Characteristic Client Configuration Descriptor not found"); } var success = this.context.Gatt.SetCharacteristicNotification(this.native, true); Thread.Sleep(100); if (success) { AndroidConfig.SyncPost(() => { descriptor.SetValue(BluetoothGattDescriptor.EnableNotificationValue.ToArray()); success = this.context.Gatt.WriteDescriptor(descriptor); if (success) { this.IsNotifying = true; } }); } return(success); }
public override IObservable <DescriptorResult> Write(byte[] data) { return(Observable.Create <DescriptorResult>(ob => { var handler = new EventHandler <GattDescriptorEventArgs>((sender, args) => { if (args.Descriptor.Equals(this.native)) { if (!args.IsSuccessful) { ob.OnError(new ArgumentException($"Failed to write descriptor value - {this.Uuid} - {args.Status}")); } else { this.Value = data; var result = new DescriptorResult(this, DescriptorEvent.Write, data); ob.Respond(result); this.WriteSubject.OnNext(result); } } }); this.context.Callbacks.DescriptorWrite += handler; AndroidConfig.SyncPost(() => { this.native.SetValue(data); this.context.Gatt.WriteDescriptor(this.native); }); return () => this.context.Callbacks.DescriptorWrite -= handler; })); }
void RawWriteWithResponse(byte[] bytes) { AndroidConfig.SyncPost(() => { this.native.SetValue(bytes); this.native.WriteType = GattWriteType.Default; this.context.Gatt.WriteCharacteristic(this.native); }); }
void RawWriteNoResponse(IObserver <CharacteristicResult> ob, byte[] bytes) { var result = new CharacteristicResult(this, CharacteristicEvent.Write, bytes); AndroidConfig.SyncPost(() => { this.native.SetValue(bytes); this.native.WriteType = GattWriteType.NoResponse; this.context.Gatt.WriteCharacteristic(this.native); this.Value = bytes; }); this.WriteSubject.OnNext(result); ob?.Respond(result); }
protected virtual void DisableNotifications() { var descriptor = this.native.GetDescriptor(NotifyDescriptorId); if (descriptor == null) { throw new ArgumentException("Characteristic Client Configuration Descriptor not found"); } AndroidConfig.SyncPost(() => { descriptor.SetValue(BluetoothGattDescriptor.DisableNotificationValue.ToArray()); this.context.Gatt.WriteDescriptor(descriptor); this.context.Gatt.SetCharacteristicNotification(this.native, false); this.IsNotifying = false; }); }