コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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}");
            }
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 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);
コード例 #7
0
 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);
コード例 #8
0
 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);