/// <summary>
        /// Open a new instance of a USB device using the finder criteria.  (Innocuous if device instance already exists).
        /// This will also enable the Transmit button as well as setup the asynchronous reader and event.
        /// </summary>
        void OpenUsbDevice()
        {
            if (m_usbDevice != null)
            {
                return;
            }

            m_usbDevice = LibUsbDotNet.UsbDevice.OpenUsbDevice(m_usbFinder);

            if (m_usbDevice == null)
            {
                Log("No device found with VID={0:X4} PID={1:X4}", m_usbFinder.Vid, m_usbFinder.Pid);
                return;
            }

            transmitButton.Enabled = true;

            m_usbReader = m_usbDevice.OpenEndpointReader(LibUsbDotNet.Main.ReadEndpointID.Ep01);
            m_usbReader.DataReceived       += new EventHandler <LibUsbDotNet.Main.EndpointDataEventArgs>(UsbReader_DataReceived);
            m_usbReader.DataReceivedEnabled = true;

            // UsbRegistryInfo is null in Linux, so only include it if defined.
            //
            string sSymbolicInfo = m_usbDevice.UsbRegistryInfo == null ? string.Empty :
                                   string.Format(" ({0})", m_usbDevice.UsbRegistryInfo.SymbolicName);

            Log("Opened device VID={0:X4} PID={1:X4}{2}.",
                m_usbDevice.Info.Descriptor.VendorID, m_usbDevice.Info.Descriptor.ProductID, sSymbolicInfo);
        }
Exemple #2
0
        public UsbInterface(
            LibUsbDotNet.UsbDevice usbDevice,
            byte interfaceId,
            ushort?readBufferSize  = null,
            ushort?writeBufferSize = null,
            ILogger logger         = null,
            int timeout            = 1000,
            Func <LibUsbDotNet.UsbDevice, SetupPacket, byte[], int?, Task <TransferResult> > performControlTransferAsync = null)
            : base(
                performControlTransferAsync != null ?
                //A func was passed in
                new PerformControlTransferAsync((sb, data, c) => performControlTransferAsync(usbDevice, sb, data, timeout)) :
                //Use the default
                new PerformControlTransferAsync((sb, data, c) => PerformControlTransferLibUsbAsync(usbDevice, sb, data, c)),

                logger, readBufferSize, writeBufferSize)
        {
            _usbDevice   = usbDevice ?? throw new ArgumentNullException(nameof(usbDevice));
            Timeout      = timeout;
            _interfaceId = interfaceId;
        }
        /// <summary>
        /// Gracefully dispose and close the USB device and the related reader.
        /// </summary>
        void CloseUsbDevice()
        {
            transmitButton.Enabled = false;

            if (m_usbReader != null)
            {
                m_usbReader.Abort();
                m_usbReader.Dispose();
                m_usbReader = null;
            }

            if (null == m_usbDevice)
            {
                return;
            }

            m_usbDevice.Close();
            m_usbDevice = null;

            Log("Closed device.");
        }