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)); }
/// <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)); } }
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); } }
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); }