Beispiel #1
0
 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);
 }));
Beispiel #2
0
        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));
                });
            }
                );
        }
Beispiel #3
0
 public static IGattCharacteristic AddReadCharacteristic(this IGattServiceBuilder builder, string uuid, Func <byte[]> readRequest) =>
 builder.AddCharacteristic(uuid, cb => cb.SetRead(request => ReadResult.Success(readRequest())));