/// <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)); } }
private void OnCharacteristicWriteComplete(object sender, CharacteristicWriteEventArgs characteristicUpdateEventArgs) { if (characteristicUpdateEventArgs.Characteristic.Id == this.Id) { WriteComplete?.Invoke(this, new CharacteristicWriteEventArgs(true, this)); } }
/// <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"); } _nativeCharacteristic.SetValue(data); if (writeType == CharacteristicWriteType.WithResponse) { _nativeCharacteristic.WriteType = GattWriteType.Default; } else if (writeType == CharacteristicWriteType.WithoutResponse) { _nativeCharacteristic.WriteType = GattWriteType.NoResponse; } var success = _gatt.WriteCharacteristic(_nativeCharacteristic); if (!success) { WriteComplete?.Invoke(this, new CharacteristicWriteEventArgs(false, this)); //throw new CharacteristicException("Write failed", CharacteristicException.Code.WriteFailed); } }
private void OnWroteCharacteristicValue(object sender, CBCharacteristicEventArgs cbCharacteristicEventArgs) { var c = cbCharacteristicEventArgs.Characteristic; var cId = c.UUID; var tId = _nativeCharacteristic.UUID; if (cId == tId) { WriteComplete?.Invoke(this, new CharacteristicWriteEventArgs(cbCharacteristicEventArgs.Error == null, this)); } }
internal IModbusMessage ApplyRequest(IModbusMessage request) { IModbusMessage response; try { Debug.WriteLine(request.ToString()); var eventArgs = new ModbusSlaveRequestEventArgs(request); ModbusSlaveRequestReceived?.Invoke(this, eventArgs); switch (request.FunctionCode) { case Modbus.ReadCoils: response = ReadDiscretes( (ReadCoilsInputsRequest)request, DataStore, DataStore.CoilDiscretes); break; case Modbus.ReadInputs: response = ReadDiscretes( (ReadCoilsInputsRequest)request, DataStore, DataStore.InputDiscretes); break; case Modbus.ReadHoldingRegisters: response = ReadRegisters( (ReadHoldingInputRegistersRequest)request, DataStore, DataStore.HoldingRegisters); break; case Modbus.ReadInputRegisters: response = ReadRegisters( (ReadHoldingInputRegistersRequest)request, DataStore, DataStore.InputRegisters); break; case Modbus.Diagnostics: response = request; break; case Modbus.WriteSingleCoil: response = WriteSingleCoil( (WriteSingleCoilRequestResponse)request, DataStore, DataStore.CoilDiscretes); WriteComplete?.Invoke(this, eventArgs); break; case Modbus.WriteSingleRegister: response = WriteSingleRegister( (WriteSingleRegisterRequestResponse)request, DataStore, DataStore.HoldingRegisters); WriteComplete?.Invoke(this, eventArgs); break; case Modbus.WriteMultipleCoils: response = WriteMultipleCoils( (WriteMultipleCoilsRequest)request, DataStore, DataStore.CoilDiscretes); WriteComplete?.Invoke(this, eventArgs); break; case Modbus.WriteMultipleRegisters: response = WriteMultipleRegisters( (WriteMultipleRegistersRequest)request, DataStore, DataStore.HoldingRegisters); WriteComplete?.Invoke(this, eventArgs); break; case Modbus.ReadWriteMultipleRegisters: ReadWriteMultipleRegistersRequest readWriteRequest = (ReadWriteMultipleRegistersRequest)request; WriteMultipleRegisters( readWriteRequest.WriteRequest, DataStore, DataStore.HoldingRegisters); WriteComplete?.Invoke(this, eventArgs); response = ReadRegisters( readWriteRequest.ReadRequest, DataStore, DataStore.HoldingRegisters); break; default: string msg = $"Unsupported function code {request.FunctionCode}."; Debug.WriteLine(msg); throw new InvalidModbusRequestException(Modbus.IllegalFunction); } } catch (InvalidModbusRequestException ex) { // Catches the exception for an illegal function or a custom exception from the ModbusSlaveRequestReceived event. response = new SlaveExceptionResponse( request.SlaveAddress, (byte)(Modbus.ExceptionOffset + request.FunctionCode), ex.ExceptionCode); } return(response); }
private void OnWriteComplete(WriteCompleteEventArgs e) { WriteComplete?.Invoke(this, e); }