public static IGattCharacteristic AddWriteCharacteristic(this IGattServiceBuilder builder, string uuid, Action <byte[]> onWrite) => builder.AddCharacteristic(uuid, cb => cb.SetWrite(request => { onWrite(request.Data); return(GattState.Success); }));
void BuildService(IGattServiceBuilder serviceBuilder) { serviceBuilder.AddCharacteristic( Characteristic1Uuid, cb => { cb.SetWrite(request => { this.LastWriteValue = Encoding.UTF8.GetString(request.Data, 0, request.Data.Length); this.LastWriteTime = DateTime.Now.ToString(); return(GattState.Success); }); cb.SetRead(request => { var ticks = DateTime.Now.Ticks; Device.BeginInvokeOnMainThread(() => { this.LastReadValue = ticks.ToString(); this.LastReadTime = DateTime.Now.ToString(); }); var data = BitConverter.GetBytes(ticks); return(ReadResult.Success(data)); }); } ); this.push = serviceBuilder.AddCharacteristic( Characteristic2Uuid, cb => cb.SetNotification(cs => { var c = cs.Characteristic.SubscribedCentrals.Count; Device.BeginInvokeOnMainThread(() => this.Subscribers = c); if (c == 0) { this.notifierSub?.Dispose(); } else { this.notifierSub = Observable .Interval(TimeSpan.FromSeconds(2)) .Select(_ => Observable.FromAsync(async() => { var ticks = DateTime.Now.Ticks; var data = BitConverter.GetBytes(ticks); await this.push.Notify(data); return(ticks); })) .SubOnMainThread(x => this.SubscribersLastValue = x.ToString() ); } }) ); serviceBuilder.AddCharacteristic( Characteristic3Uuid, cb => { cb.SetWrite(request => { Device.BeginInvokeOnMainThread(() => ++ this.SpeedWrites); return(GattState.Success); }); cb.SetRead(request => { Device.BeginInvokeOnMainThread(() => ++ this.SpeedReads); var data = BitConverter.GetBytes(DateTime.Now.Ticks); return(ReadResult.Success(data)); }); } ); }
public static IGattCharacteristic AddReadCharacteristic(this IGattServiceBuilder builder, string uuid, Func <byte[]> readRequest) => builder.AddCharacteristic(uuid, cb => cb.SetRead(request => ReadResult.Success(readRequest())));