Exemplo n.º 1
0
        void Write(IObserver <CharacteristicGattResult> ob, CBCharacteristicWriteType type, byte[] value)
        {
            var data = NSData.FromArray(value);

            this.Peripheral.WriteValue(data, this.NativeCharacteristic, type);
            ob.Respond(new CharacteristicGattResult(this, value));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Write the specified data to the characteristic
        /// </summary>
        /// <param name="data">Data.</param>
        public void Write(byte[] data, CharacteristicWriteType writeType)
        {
            if (!CanWrite)
            {
                throw new InvalidOperationException("Characteristic does not support WRITE");
            }

            var nsData = NSData.FromArray(data);
            CBCharacteristicWriteType nativeWriteType = CBCharacteristicWriteType.WithResponse;

            if (writeType == CharacteristicWriteType.WithResponse)
            {
                nativeWriteType = CBCharacteristicWriteType.WithResponse;
            }
            else if (writeType == CharacteristicWriteType.WithoutResponse)
            {
                nativeWriteType = CBCharacteristicWriteType.WithoutResponse;
            }

            _peripheral.WriteValue(nsData, _nativeCharacteristic, nativeWriteType);

            if (writeType == CharacteristicWriteType.WithoutResponse)
            {
                WriteComplete?.Invoke(this, new CharacteristicWriteEventArgs(true, this));
            }
        }
Exemplo n.º 3
0
        public static CharacteristicWriteType ToCharacteristicWriteType(this CBCharacteristicWriteType writeType)
        {
            switch (writeType)
            {
            case CBCharacteristicWriteType.WithoutResponse:
                return(CharacteristicWriteType.WithoutResponse);

            case CBCharacteristicWriteType.WithResponse:
                return(CharacteristicWriteType.WithResponse);

            default:
                return(CharacteristicWriteType.WithResponse);
            }
        }
Exemplo n.º 4
0
        Task PlatformWriteValue(byte[] value, bool requireResponse)
        {
            TaskCompletionSource <bool> tcs = null;
            CBPeripheral peripheral         = Service.Device;

            if (requireResponse)
            {
                tcs = new TaskCompletionSource <bool>();

                void handler(object s, CBCharacteristicEventArgs e)
                {
                    if (e.Characteristic == _characteristic)
                    {
                        peripheral.WroteCharacteristicValue -= handler;

                        if (!tcs.Task.IsCompleted)
                        {
                            tcs.SetResult(e.Error == null);
                        }
                    }
                };

                peripheral.WroteCharacteristicValue += handler;
            }

            CBCharacteristicWriteType writeType = requireResponse ? CBCharacteristicWriteType.WithResponse : CBCharacteristicWriteType.WithoutResponse;

            if (!requireResponse && !peripheral.CanSendWriteWithoutResponse)
            {
                writeType = CBCharacteristicWriteType.WithResponse;
            }

            ((CBPeripheral)Service.Device).WriteValue(NSData.FromArray(value), _characteristic, writeType);

            if (requireResponse)
            {
                return(tcs.Task);
            }

            return(Task.CompletedTask);
        }