public override void SetParameters(int baudRate, DataBits dataBits, StopBits stopBits, Parity parity) { SetBaudRate(baudRate); int config = (int)dataBits; switch (parity) { case Parity.None: config |= (0x00 << 8); break; case Parity.Odd: config |= (0x01 << 8); break; case Parity.Even: config |= (0x02 << 8); break; case Parity.Mark: config |= (0x03 << 8); break; case Parity.Space: config |= (0x04 << 8); break; default: throw new ArgumentException("Unknown parity value: " + parity); } switch (stopBits) { case StopBits.One: config |= (0x00 << 11); break; case StopBits.OnePointFive: config |= (0x01 << 11); break; case StopBits.Two: config |= (0x02 << 11); break; default: throw new ArgumentException("Unknown stopBits value: " + stopBits); } int result = _connection.ControlTransfer(UsbAddressingExtensions.GetAddressing(FTDI_DEVICE_OUT_REQTYPE), SIO_SET_DATA_REQUEST, config, 0, null, 0, USB_WRITE_TIMEOUT_MILLIS); if (result != 0) { throw new UsbSerialException("Setting parameters failed: result=" + result); } }
internal void OutControlTransfer(int requestType, int request, int value, int index, byte[] data) { int length = data?.Length ?? 0; int result = _connection.ControlTransfer(UsbAddressingExtensions.GetAddressing(requestType), request, value, index, data, length, USB_WRITE_TIMEOUT_MILLIS); if (result != length) { throw new UsbSerialException($"ControlTransfer with value 0x{value:x} failed: {result:D}"); } }
public virtual void Reset() { int result = _connection.ControlTransfer(UsbAddressingExtensions.GetAddressing(FTDI_DEVICE_OUT_REQTYPE), SIO_RESET_REQUEST, SIO_RESET_SIO, 0, null, 0, USB_WRITE_TIMEOUT_MILLIS); if (result != 0) { throw new UsbSerialException("Reset failed: result=" + result); } _deviceType = FtdiDeviceType.TYPE_R; }
internal byte[] InControlTransfer(int requestType, int request, int value, int index, int length) { byte[] buffer = new byte[length]; // ReSharper disable once PossibleInvalidCastException int result = _connection.ControlTransfer(UsbAddressingExtensions.GetAddressing(requestType), request, value, index, buffer, length, USB_READ_TIMEOUT_MILLIS); if (result != length) { throw new UsbSerialException($"ControlTransfer with value 0x{value:x} failed: {result:D}"); } return(buffer); }
internal virtual int SetBaudRate(int baudRate) { long[] vals = ConvertBaudrate(baudRate); long actualBaudrate = vals[0]; long index = vals[1]; long value = vals[2]; int result = _connection.ControlTransfer(UsbAddressingExtensions.GetAddressing(FTDI_DEVICE_OUT_REQTYPE), SIO_SET_BAUD_RATE_REQUEST, (int)value, (int)index, null, 0, USB_WRITE_TIMEOUT_MILLIS); if (result != 0) { throw new UsbSerialException($"Setting baudrate failed: result={result}"); } return((int)actualBaudrate); }
internal virtual int SetConfigSingle(int request, int value) => _connection.ControlTransfer( UsbAddressingExtensions.GetAddressing(REQTYPE_HOST_TO_DEVICE), request, value, 0, null, 0, USB_WRITE_TIMEOUT_MILLIS);
internal virtual int ControlIn(int request, int value, int index, byte[] buffer) => _connection.ControlTransfer( UsbAddressingExtensions.GetAddressing(REQTYPE_HOST_TO_DEVICE_CTL_IN), request, value, index, buffer, buffer.Length, USB_TIMEOUT_MILLIS);
internal virtual int ControlOut(int request, int value, int index) => _connection.ControlTransfer( UsbAddressingExtensions.GetAddressing(REQTYPE_HOST_TO_DEVICE_CTL_OUT), request, value, index, null, 0, USB_TIMEOUT_MILLIS);