示例#1
0
        public bool Open()
        {
            if (IsOpen)
            {
                return(false);
            }

            if (!_Device.Open())
            {
                return(false);
            }

            IUsbDevice whole = _Device as IUsbDevice;

            if (!ReferenceEquals(whole, null))
            {
                if (!whole.SetConfiguration(ConfigurationID) || !whole.ClaimInterface(InterfaceID))
                {
                    _Device.Close();
                    throw new PTPException("could not set USB device configuration and interface to " + ConfigurationID + " and " + InterfaceID + ", respectively");
                }
            }

            Writer = _Device.OpenEndpointWriter(WriterEndpointID);
            Reader = _Device.OpenEndpointReader(ReaderEndpointID);

            return(true);
        }
示例#2
0
        public Brazo()
        {
            dev = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(VENDOR_ID, PRODUCT_ID));

            if (dev == null)
            {
                throw new Exception("Brazo no encontrado.");
            }

            try {
                IUsbDevice wholeUsbDevice = dev as IUsbDevice;

                if (!ReferenceEquals(wholeUsbDevice, null))
                {
                    // This is a "whole" USB device. Before it can be used,
                    // the desired configuration and interface must be selected.

                    // Select config #1
                    wholeUsbDevice.SetConfiguration(1);
                    // Claim interface #0.
                    wholeUsbDevice.ClaimInterface(0);
                }
                // open device with configuration 1, interface 0 and no alt interface
            } catch (Exception e) {
                Console.WriteLine(e);
                throw;
            }
        }
示例#3
0
        /// <summary>
        /// Performs initialisation tasks required before enabling printing.
        /// </summary>
        /// <exception cref="DC.PrintingServices.PrinterNotFoundException">No printer can be found with the specified vendor id and product id.</exception>
        public void Initialise()
        {
            // Create a USB device finder for finding the printer.
            _deviceFinder = new UsbDeviceFinder(this.VendorID, this.ProductID);

            // Find and open a connection to the printer.
            _printer = UsbDevice.OpenUsbDevice(_deviceFinder);

            _printerUSBDevice = _printer as IUsbDevice;

            if (_printerUSBDevice != null)
            {
                // ANDREW LING [28 Feburary 2014]: Make the configuration and interface settings configurable.
                _printerUSBDevice.SetConfiguration(1);
                _printerUSBDevice.ClaimInterface(0);
            }
            else
            {
                // The printer cannot be located.

                // ANDREW LING [28 February 2014]: TODO: Log when the printer cannot be located.
                // ANDREW LING [28 February 2014]: TODO: Display an error message on screen when the printer cannot be located.

                throw new PrinterNotFoundException(this.VendorID, this.ProductID);
            }

            // ANDREW LING [28 February 2014]: TODO: Make the write end point ID configurable.
            _writer = _printerUSBDevice.OpenEndpointWriter(WriteEndpointID.Ep02);

            // Mark that the initialisation tasks have been completed.
            _initialised = true;
        }
示例#4
0
        // Connect to the arm
        public bool Connect()
        {
            // Vendor ID/Product ID here
            UsbDeviceFinder USBFinder = new UsbDeviceFinder(0x1267, 0x0);

            // Try to open the device
            RobotArm = UsbDevice.OpenUsbDevice(USBFinder);

            // Did we connect OK?
            if ((RobotArm == null))
            {
                return(false);
            }

            // If this is a "whole" usb device (libusb-win32, linux libusb)
            // it will have an IUsbDevice interface. If not (WinUSB) the
            // variable will be null indicating this is an interface of a
            // device.
            IUsbDevice wholeUsbDevice = RobotArm as IUsbDevice;

            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                wholeUsbDevice.SetConfiguration(1);

                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }

            // Connected and have interface to the arm
            return(true);
        }
示例#5
0
        public bool Connect()
        {
            bool rv = false;

            rv = false;
            Disconnect();
            MyUSBDeviceFinder = new UsbDeviceFinder(DevVID, DevPID, DevRevision, DevSerialNumber, DevGUID);
            MyUSBDevice       = UsbDevice.OpenUsbDevice(MyUSBDeviceFinder);
            if (MyUSBDevice != null)
            {
                WholeUSBDevice = MyUSBDevice as IUsbDevice;
                if (!ReferenceEquals(WholeUSBDevice, null))
                {
                    WholeUSBDevice.SetConfiguration(1);
                    WholeUSBDevice.ClaimInterface(0);
                }
                MyUSBWriter = MyUSBDevice.OpenEndpointWriter(WriteEndpointID.Ep01);
                MyUSBReader = MyUSBDevice.OpenEndpointReader(ReadEndpointID.Ep01, 4096);
                MyUSBReader.DataReceived       += MyUSBReader_DataReceived;
                MyUSBReader.DataReceivedEnabled = true;

                MyUSBSetupPacket.RequestType = (byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Interface | UsbCtrlFlags.Direction_In);
                MyUSBSetupPacket.Request     = 1;
                MyUSBSetupPacket.Value       = 0;
                MyUSBSetupPacket.Length      = 4;

                bkThread = new System.Threading.Thread(this.Th_DoWork);
                bkThExit = false;
                bkThread.Start();
                rv = true;
            }
            return(rv);
        }
示例#6
0
        public override bool Open()
        {
            try
            {
                UsbDeviceFinder MyUsbFinder   = new UsbDeviceFinder(((UsbConfigModel)Configuration).PID, ((UsbConfigModel)Configuration).VID);
                UsbRegistry     myUsbRegistry = UsbDevice.AllWinUsbDevices.Find(MyUsbFinder);

                if (myUsbRegistry is null)
                {
                    return(false);
                }
                // Open this usb device.

                _dev = UsbDevice.OpenUsbDevice(MyUsbFinder) as IUsbDevice;

                _dev.SetConfiguration(1);

                _dev.ClaimInterface(0);
                _writer = _dev.OpenEndpointWriter(WriteEndpointID.Ep01);
                _reader = _dev.OpenEndpointReader(ReadEndpointID.Ep01);
            }
            catch (Exception exp)
            {
                throw new Exception(exp.ToString());
            }
            return(true);
        }
示例#7
0
        private static void InitDevice()
        {
            MyUsbFinder = new UsbDeviceFinder(0x045E, 0x02B0);
            MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);

            // If the device is open and ready
            if (MyUsbDevice == null)
            {
                throw new Exception("Device Not Found.");
            }

            // If this is a "whole" usb device (libusb-win32, linux libusb)
            // it will have an IUsbDevice interface. If not (WinUSB) the
            // variable will be null indicating this is an interface of a
            // device.
            IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;

            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                wholeUsbDevice.SetConfiguration(1);

                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }
        }
        /// <summary>
        /// Initializes the device via LibUSB, and sets the refresh interval of the controller data
        /// </summary>
        /// <param name="Interval">The interval that the device is polled for information.</param>
        public void Init(int Interval)
        {
            //ErrorCode ec = ErrorCode.None;

            // Find and open the usb device.
            MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
            if (MyUsbDevice == null)
            {
                throw new Exception("Device Not Found.");
            }

            IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;

            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                wholeUsbDevice.SetConfiguration(1);
                wholeUsbDevice.ClaimInterface(0);
            }

            reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep02);
            writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);

            ButtonMasks.InitializeMasks();

            SetPollingInterval(Interval);
            pollTimer.Elapsed += new ElapsedEventHandler(pollTimer_Elapsed);
            pollTimer.Start();

            TestLEDs();
            RefreshLEDState();
        }
示例#9
0
        private void USB_init()
        {
            IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;

            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                wholeUsbDevice.SetConfiguration(1);

                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }
            reader1 = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
            writer1 = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);

            // Setup trigger

            USB_receive = new Thread(USBReceive);
            // open read endpoint 1.

            USB_receive.Start();

            button1Enable(true);
        }
示例#10
0
        public bool OpenDevice()
        {
            MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
            if (MyUsbDevice == null)
            {
                return(false);
            }

            #region   当设备是一个 "whole" USB 时,我们的设备一般不会是此情况
            // If this is a "whole" usb device (libusb-win32, linux libusb)
            // it will have an IUsbDevice interface. If not (WinUSB) the
            // variable will be null indicating this is an interface of a
            // device.
            IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                wholeUsbDevice.SetConfiguration(1);

                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }
            #endregion

            reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep02);
            reader.ReadBufferSize = nReadBufSize;

            writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);
            return(true);
        }
示例#11
0
文件: LCD.cs 项目: hipejoe/G19LCD
        /// <summary>
        /// Open connection to the device
        /// </summary>
        public void OpenDevice()
        {
            MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);

            if (MyUsbDevice == null)
            {
                throw new Exception("Device Not Found.");
            }
            // If this is a "whole" usb device (libusb-win32, linux libusb)
            // it will have an IUsbDevice interface. If not (WinUSB) the
            // variable will be null indicating this is an interface of a
            // device.

            wholeUsbDevice = MyUsbDevice as IUsbDevice;


            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                wholeUsbDevice.SetConfiguration(1);
                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }
            // open read endpoint 1.
            reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
            // open write endpoint 1.
            writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep02);
        }
示例#12
0
        public void Open()
        {
            _device = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(_vendorId, _productId));

            if (_device != null)
            {
                IUsbDevice whole = _device as IUsbDevice;

                if (!ReferenceEquals(whole, null))
                {
                    whole.SetConfiguration(1);
                    whole.ClaimInterface(1);
                }

                //Set up the endpoints
                var hci = _device.OpenEndpointReader(ReadEndpointID.Ep01);
                _reader    = _device.OpenEndpointReader(ReadEndpointID.Ep02);
                _writer    = _device.OpenEndpointWriter(WriteEndpointID.Ep02);
                _isoReader = _device.OpenEndpointReader(ReadEndpointID.Ep03);
                _isoWriter = _device.OpenEndpointWriter(WriteEndpointID.Ep03);

                //Set up our read callback(s)
                hci.DataReceived              += hci_DataReceived;
                hci.DataReceivedEnabled        = true;
                _reader.DataReceived          += reader_DataReceived;
                _reader.DataReceivedEnabled    = true;
                _isoReader.DataReceived       += _isoReader_DataReceived;
                _isoReader.DataReceivedEnabled = true;

                //Reset the device
                Reset();
            }
        }
示例#13
0
    void Setup()
    {
        if (UsbDev != null)
        {
            return;
        }

        UsbDev = FindDevice();

        if (!UsbDev.SetConfiguration(1))
        {
            throw new M4ATXException("Failed to set device config");
        }

        if (!UsbDev.ClaimInterface(0))
        {
            throw new M4ATXException("Failed to claim interface #0");
        }

        if (!UsbDev.SetAltInterface(0))
        {
            throw new M4ATXException("Failed to set alternate interface to 0");
        }

        Writer = UsbDev.OpenEndpointWriter(WriteEndpointID.Ep01);
        Reader = UsbDev.OpenEndpointReader(ReadEndpointID.Ep01);
    }
示例#14
0
        public static void InitializeUSBDevice()
        {
            // Use the USB device finder to find our Gamecube adapter
            _usbDevice = UsbDevice.OpenUsbDevice(_usbDeviceFinder);
            if (_usbDevice == null)
            {
                // If the gamecube adapter isn't plugged in OR is being used by another application, throw an exception.
                // Is there even a way to take control over the adapter from another device?
                throw new Exception(Strings.ERROR_ADAPTERNOTFOUND);
            }

            IUsbDevice wholeUsbDevice = _usbDevice as IUsbDevice;

            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                wholeUsbDevice.SetConfiguration(1); // Set the adapter to use config one
                wholeUsbDevice.ClaimInterface(0);   // Claim interface zero
            }

            // Set reader to read from endpoint 1 (apparently GCN adapters use endpoint 0x81, but this works?)
            _controllerReader = _usbDevice.OpenEndpointReader(ReadEndpointID.Ep01);

            // Write to endpoint 2
            _controllerWriter = _usbDevice.OpenEndpointWriter(WriteEndpointID.Ep02);

            // begin polling command - https://gbatemp.net/threads/wii-u-gamecube-adapter-reverse-engineering-cont.388169/
            _controllerWriter.Write(Convert.ToByte(0x13), 5000, out int transferLength);
        }
示例#15
0
        public MainWindow()
        {
            InitializeComponent();
            ErrorCode ec = ErrorCode.None;

            try
            {
                MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
                if (MyUsbDevice == null)
                {
                    MessageBox.Show("Device Not Found.");
                }
                IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
                if (!ReferenceEquals(wholeUsbDevice, null))
                {
                    // This is a "whole" USB device. Before it can be used,
                    // the desired configuration and interface must be selected.

                    // Select config #1
                    wholeUsbDevice.SetConfiguration(1);

                    // Claim interface #0.
                    wholeUsbDevice.ClaimInterface(0);
                }
                UsbEndpointReader reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
                reader.DataReceived       += (OnRxEndPointData);
                reader.DataReceivedEnabled = true;
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#16
0
        /// <summary>
        /// Attempts to open a USB registry as a USB DFU device.
        /// </summary>
        /// <param name="registry">The input USB registry of a connected device</param>
        /// <param name="dfuDevice">The opened DFU device in case of success</param>
        /// <returns>True if the DFU device is successfully opened</returns>
        public static bool TryOpen(UsbRegistry registry, out Device dfuDevice)
        {
            dfuDevice = null;
            UsbDevice dev;
            byte      cfIndex = 0;
            byte      ifIndex = 0;

            if (!registry.Open(out dev))
            {
                return(false);
            }

            var confInfo = dev.Configs[cfIndex];

            // This is a "whole" USB device. Before it can be used,
            // the desired configuration and interface must be selected.
            IUsbDevice usbDevice = dev as IUsbDevice;

            if (usbDevice != null)
            {
                // Select config
                usbDevice.SetConfiguration(confInfo.Descriptor.ConfigID);
            }

            // find DFU interface
            for (ifIndex = 0; ifIndex < confInfo.InterfaceInfoList.Count; ifIndex++)
            {
                var iface = confInfo.InterfaceInfoList[ifIndex];

                if (!IsDfuInterface(iface))
                {
                    continue;
                }

                if (usbDevice != null)
                {
                    // Claim interface
                    usbDevice.ClaimInterface(iface.Descriptor.InterfaceID);
                }
                break;
            }

            try
            {
                if (ifIndex == confInfo.InterfaceInfoList.Count)
                {
                    throw new ArgumentException("The device doesn't have valid DFU interface");
                }
                dfuDevice = new Device(dev, cfIndex, ifIndex);
                return(true);
            }
            catch (Exception)
            {
                var d = dev as IDisposable;
                d.Dispose();
                return(false);
            }
        }
        public static void Connect(DeviceNameList dList)
        {
            try
            {
                if ((uDevice = UsbDevice.OpenUsbDevice(uDevFinder)) == null)
                {
                    throw new Exception("Device Not Found");
                }

                IUsbDevice iuDev = uDevice as IUsbDevice;
                if (!ReferenceEquals(iuDev, null))
                {
                    iuDev.SetConfiguration(1);
                    iuDev.ClaimInterface(0);
                }
                uDevice.Open();
            }
            catch (Exception e)
            {
                Console.WriteLine("usbcom Connecting Proces : {0}", e);
                throw;
            }
            (new Thread(() => {
                while (uDevice.IsOpen)
                {
                    byte[] buf = new byte[64];
                    int bytesRead = 0;

                    using (var Reader = uDevice.OpenEndpointReader(ReadEndpointID.Ep01))
                    {
                        ErrorCode ec = ErrorCode.None;
                        ec = Reader.Read(buf, 2000, out bytesRead);

                        if (ec == ErrorCode.IoTimedOut)
                        {
                            continue;
                        }
                        if (ec == ErrorCode.IoCancelled)
                        {
                            return;
                        }
                        if (ec != 0)
                        {
                            throw new Exception("usbcom ReadCtrl Error : ErrorCode==" + ec.ToString() + "\n" + UsbDevice.LastErrorString);
                        }
                    }

                    if (bytesRead > 0)
                    {
                        (new Thread(() => DataGot?.Invoke(null, new DataGotEvArgs()
                        {
                            Data = buf
                        }))).Start();
                    }
                }
            })).Start();
        }
示例#18
0
        public override void OpenDevice()
        {
            log.Info("QDLUsb trying to find device");
            UsbDevice.UsbErrorEvent += new EventHandler <UsbError>(UsbErrorEvent);
            UsbRegistry regDev = null;

            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                regDev = UsbDevice.AllWinUsbDevices.Find((reg) => reg.Vid == VID && reg.Pid == PID);
            }
            else
            {
                regDev = UsbDevice.AllDevices.Find((reg) => reg.Vid == VID && reg.Pid == PID);
            }
            if (regDev == null)
            {
                log.Error("No QDLUSB Devices found");
                throw new QDLDeviceNotFoundException("Unable to find device");
            }

            if (!regDev.Open(out device) || device == null)
            {
                log.Error("No QDLUSB Devices found");
                throw new QDLDeviceNotFoundException("Unable to open device");
            }

            if (UsbDevice.IsLinux)
            {
                log.Debug("Running on linux, detaching kernel driver");
                MonoUsbDevice monodev = device as MonoUsbDevice;
                if (!monodev.DetachKernelDriver())
                {
                    log.Error("Failed to detach kernel driver");
                    throw new Exception("Failed to detach kernel driver");
                }
            }

            IUsbDevice wholeUsbDevice = device as IUsbDevice;

            if (wholeUsbDevice != null)
            {
                wholeUsbDevice.SetConfiguration(1);
                wholeUsbDevice.ClaimInterface(0);
            }

            reader = device.OpenEndpointReader(ReadEndpointID.Ep01);
            writer = device.OpenEndpointWriter(WriteEndpointID.Ep01, EndpointType.Bulk);
            if (reader == null || writer == null)
            {
                device.Close();
                device = null;
                UsbDevice.Exit();
                log.Error("Failed to open endpoints");
                throw new Exception("Unable to open endpoints");
            }
            log.Info("Found QDLUSB device");
        }
示例#19
0
        public void usbConnect() // The name is self-explanatory...
        {
            // Find and open the usb device.
            mUsbDevice = UsbDevice.OpenUsbDevice(mini2440Finder);
            if (mUsbDevice == null)
            {
                mUsbDevice = UsbDevice.OpenUsbDevice(mini6410Finder);
            }

            // If we fail to find or connect to the device
            if (mUsbDevice == null)
            {
                l_usbFound.Text = "Error";
                t_log.AppendText("\r\n" + "## Could not find or open device." + "\r\n"
                                 + "Please plug the device, I will detect it." + "\r\n");
                b_download.Enabled = false;
                b_upload.Enabled   = false;
            }
            // If the device is open and ready
            else
            {
                l_usbFound.Text = "Connected";
                if (mUsbDevice.UsbRegistryInfo.Pid == pid2440)
                {
                    t_log.AppendText("\r\n" + "## Mini2440 connected." + "\r\n");
                }
                if (mUsbDevice.UsbRegistryInfo.Pid == pid6410)
                {
                    t_log.AppendText("\r\n" + "## Mini6410 connected." + "\r\n");
                }
                b_download.Enabled = true;
                b_upload.Enabled   = true;
                mEpReader          = mUsbDevice.OpenEndpointReader((ReadEndpointID)(byte.Parse("1") | 0x80)); // = 81
                mEpWriter          = mUsbDevice.OpenEndpointWriter((WriteEndpointID)byte.Parse("3"));
                if (mEpWriter.EndpointInfo == null)                                                           // Try opening endpoint 4 if endpoint 3 is unavailable (i.e. after usb reset when downloading firmware)
                {
                    mEpWriter = mUsbDevice.OpenEndpointWriter((WriteEndpointID)byte.Parse("4"));
                }

                //mEpReader.Flush();
                mEpWriter.Flush();

                IUsbDevice wholeUsbDevice = mUsbDevice as IUsbDevice;
                if (!ReferenceEquals(wholeUsbDevice, null))
                {
                    // This is a "whole" USB device. Before it can be used,
                    // the desired configuration and interface must be selected.

                    // Select config #1
                    wholeUsbDevice.SetConfiguration(1);

                    // Claim interface #0.
                    wholeUsbDevice.ClaimInterface(0);
                }
            }
        }
示例#20
0
        private void btnPrint_Click(object sender, EventArgs e)
        {
            _printer = UsbDevice.OpenUsbDevice(_printerFinder);

            _printerUsbDevice = _printer as IUsbDevice;

            if (_printerUsbDevice != null)
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                _printerUsbDevice.SetConfiguration(1);

                // Claim interface #0.
                _printerUsbDevice.ClaimInterface(0);
            }

            // open write endpoint 1.
            UsbEndpointWriter writer         = _printer.OpenEndpointWriter(WriteEndpointID.Ep02);
            List <byte>       writeBytesList = new List <byte>();

            writeBytesList.AddRange(Encoding.ASCII.GetBytes(txtTextToPrint.Text));
            writeBytesList.Add(0x0A);

            byte[] writeBuffer = writeBytesList.ToArray();

            int       bytesWritten;
            ErrorCode writeErrorCode = writer.Write(writeBuffer, 10000, out bytesWritten);

            // open read endpoint 1.
            //UsbEndpointReader reader = printer.OpenEndpointReader(ReadEndpointID.Ep01);

            //ErrorCode readErrorCode = ErrorCode.None;

            //byte[] readBuffer = new byte[1024];

            //while (readErrorCode == ErrorCode.None)
            //{
            //    int bytesRead;

            //    // If the device hasn't sent data in the last 100 milliseconds,
            //    // a timeout error (ec = IoTimedOut) will occur.
            //    readErrorCode = reader.Read(readBuffer, 10000, out bytesRead);

            //    if (bytesRead == 0)
            //    {
            //        break;
            //    }

            //    // Write that output to the console.
            //    MessageBox.Show(Encoding.ASCII.GetString(readBuffer, 0, bytesRead));
            //}
        }
示例#21
0
        private void InitUSB(int VendorID, int ProductID)
        {
            dev = (IUsbDevice)UsbDevice.OpenUsbDevice(x => x.Vid == VendorID && x.Pid == ProductID);

            if (dev == null)
            {
                throw new NullReferenceException("Cannot find USB device for JZ4780. Check Vendor/Product IDs and that LibUSB-Win32 \".inf\" installed.");
            }

            dev.SetConfiguration(1);
        }
示例#22
0
        public bool Connect()
        {
            _usbRegistry.Open(out _usbDevice);
            if (_usbDevice == null)
            {
                return(false);
            }

            // If this is a "whole" usb device (libusb-win32, linux libusb)
            // it will have an IUsbDevice interface. If not (WinUSB) the
            // variable will be null indicating this is an interface of a
            // device.
            IUsbDevice wholeUsbDevice = _usbDevice as IUsbDevice;

            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                wholeUsbDevice.SetConfiguration(1);

                // Claim interface #0.
                if (!wholeUsbDevice.ClaimInterface(0))
                {
                    wholeUsbDevice.ReleaseInterface(0);
                    _usbDevice.Close();
                    return(false);
                }
            }
            if (_resolverInfo.V45Endpoints == true)
            {
                // Open EP1 for writing, used to send BCP commands/packets to the unit.
                _endpointWriter = _usbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);

                // Open EP2 for reading, used to send BCP replies to the USB host.
                _endpointReader = _usbDevice.OpenEndpointReader(ReadEndpointID.Ep02);

                // Open EP5 for reading, used to send “real time capture data” to the host.
                _realTimeEndpointReader = _usbDevice.OpenEndpointReader(ReadEndpointID.Ep05);
            }
            else
            {
                // Open EP2 for writing, used to send BCP commands/packets to the unit.
                _endpointWriter = _usbDevice.OpenEndpointWriter(WriteEndpointID.Ep02);

                // Open EP6 for reading, used to send BCP replies to the USB host.
                _endpointReader = _usbDevice.OpenEndpointReader(ReadEndpointID.Ep06);

                // Open EP8 for reading, used to send “real time capture data” to the host.
                _realTimeEndpointReader = _usbDevice.OpenEndpointReader(ReadEndpointID.Ep08);
            }
            return(true);
        }
        private void buttonRead_Click(object sender, EventArgs e)
        {
            dev = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(0x1915, 0x7B));
//            bool success = reg.Open(out dev);
            IUsbDevice wholeUsbDevice = dev as IUsbDevice;

            wholeUsbDevice.SetConfiguration(1);
            wholeUsbDevice.ClaimInterface(0);
            rdr = wholeUsbDevice.OpenEndpointReader((ReadEndpointID)0x81);
            rdr.Flush();
            Read();
        }
示例#24
0
            public static void open()
            {
                ErrorCode ec = ErrorCode.None;

                try
                {
                    MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
                    if (MyUsbDevice == null)
                    {
                        throw new Exception("Device Not Found.");
                    }
                    IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
                    if (!ReferenceEquals(wholeUsbDevice, null))
                    {
                        wholeUsbDevice.SetConfiguration(1);
                        wholeUsbDevice.ClaimInterface(0);
                    }

                    UsbEndpointWriter writer      = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);
                    byte[]            bytesToSend = { 0x1b, 0x70, 0x00, 0x19, 0xff };

                    int bytesWritten;
                    ec = writer.Write(bytesToSend, 2000, out bytesWritten);
                    if (ec != ErrorCode.None)
                    {
                        throw new Exception(UsbDevice.LastErrorString);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine();
                    Console.WriteLine((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
                }
                finally
                {
                    if (MyUsbDevice != null)
                    {
                        if (MyUsbDevice.IsOpen)
                        {
                            IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
                            if (!ReferenceEquals(wholeUsbDevice, null))
                            {
                                // Release interface #0.
                                wholeUsbDevice.ReleaseInterface(0);
                            }

                            MyUsbDevice.Close();
                        }
                        MyUsbDevice = null;
                        UsbDevice.Exit();
                    }
                }
            }
示例#25
0
        private static void SetConfiguration(IUsbDevice wholeUsbDevice)
        {
            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // This is a "whole" USB device. Before it can be used,
                // the desired configuration and interface must be selected.

                // Select config #1
                wholeUsbDevice.SetConfiguration(1);

                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }
        }
示例#26
0
        // USB connection and adapter management
        public override void Open()
        {
            this.Close();

            try
            {
                caLibUsbAdapter.write_lock.WaitOne();

                usb_finder = new UsbDeviceFinder(this.vid, this.pid);
                Debug.Assert(this.usb_finder != null);

                // open device
                usb_device = UsbDevice.OpenUsbDevice(usb_finder);
                if (usb_device == null)
                {
                    throw new Exception("No compatible adapters found");
                }

                wholeUsbDevice = usb_device as IUsbDevice;
                if (!ReferenceEquals(wholeUsbDevice, null))
                {
                    wholeUsbDevice.SetConfiguration(1);
                    wholeUsbDevice.ClaimInterface(1);
                }
                else
                {
                    throw new Exception("Failed to claim interface");
                }

                // open endpoints
                ep_reader = usb_device.OpenEndpointReader(this.read_ep_id);
                ep_writer = usb_device.OpenEndpointWriter(this.write_ep_id);
                if (ep_reader == null || ep_writer == null)
                {
                    throw new Exception("Failed to open endpoints");
                }

                // clear garbage from input
                this.ep_reader.ReadFlush();

                // attach read event
                ep_reader.DataReceived       += (read_usb);
                ep_reader.DataReceivedEnabled = true;
            } catch (Exception e) {
                this.Close();
                throw e;
            } finally {
                caLibUsbAdapter.write_lock.ReleaseMutex();
            }
        }
示例#27
0
        private void _Init(int vendorId, int productId, int interfaceNumber)
        {
            _readers = new Dictionary <int, UsbEndpointReader>();
            _writers = new Dictionary <int, UsbEndpointWriter>();

            _forwardee = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(vendorId, productId)) as IUsbDevice;
            if (_forwardee == null)
            {
                throw new InvalidOperationException("Device not found");
            }

            _forwardee.ClaimInterface(interfaceNumber);
            _forwardee.SetConfiguration(1);
        }
示例#28
0
        public GarminUnit(UsbDevice Device)
        {
            Configuration = new Dictionary <string, ushort>();

            IUsbDevice wholedevice = Device as IUsbDevice;

            if (!ReferenceEquals(wholedevice, null))
            {
                wholedevice.SetConfiguration(1);
                wholedevice.ClaimInterface(0);
            }
            Reader = Device.OpenEndpointReader(ReadEndpointID.Ep01);
            Writer = Device.OpenEndpointWriter(WriteEndpointID.Ep02);
        }
示例#29
0
        internal void OpenDevice(UsbRegistry registry)
        {
            this._device = registry.Device;

            IUsbDevice wholeUsbDevice = _device as IUsbDevice;

            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // Select config #1
                wholeUsbDevice.SetConfiguration(1);
                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }
        }
示例#30
0
        private void _Init(bool throwErrors)
        {
            Dispose();

            _device = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(_VENDOR_ID, _PRODUCT_ID1)) as IUsbDevice;
            if (_device == null)
            {
                _device = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(_VENDOR_ID, _PRODUCT_ID2)) as IUsbDevice;
            }
            if (_device == null)
            {
                _device = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(_VENDOR_ID, _PRODUCT_ID3)) as IUsbDevice;
            }
            if (_device == null)
            {
                if (throwErrors)
                {
                    throw new InvalidOperationException("Wireless receiver not found");
                }
            }
            else
            {
                _device.ClaimInterface(1);
                _device.SetConfiguration(1);

                _responses = new Dictionary <int, List <byte[]> >();
                var now = DateTime.Now;
                for (int i = 0; i < _NUMBER_OF_SLOTS; i++)
                {
                    var slot = new ReceiverSlot();

                    slot.DataWriter = _device.OpenEndpointWriter(_GetWriteEndpoint((i * 2) + 1));
                    slot.DataReader = _device.OpenEndpointReader(_GetReadEndpoint((i * 2) + 1));
                    slot.DataReader.DataReceived       += DataReader_DataReceived;
                    slot.DataReader.DataReceivedEnabled = true;
                    slot.HeadsetWriter = _device.OpenEndpointWriter(_GetWriteEndpoint((i * 2) + 2));
                    slot.HeadsetReader = _device.OpenEndpointReader(_GetReadEndpoint((i * 2) + 2));
                    slot.HeadsetReader.DataReceived       += HeadsetReader_DataReceived;
                    slot.HeadsetReader.DataReceivedEnabled = true;

                    _slots.Add(i + 1, slot);

                    _RefreshSlot(i + 1);
                }

                _refreshSlotsThread = new Thread(new ThreadStart(_RefreshSlots));
                _refreshSlotsThread.IsBackground = true;
                _refreshSlotsThread.Start();
            }
        }
示例#31
0
        public Form1()
        {
            InitializeComponent();
            // Hook the device notifier event
            UsbDeviceNotifier.OnDeviceNotify += OnDeviceNotifyEvent;

            usb_command = new byte[64];
            try
            {
                MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
                if (MyUsbDevice == null)
                {
                    //throw new Exception("Device Not Found.");
                    connected = false;
                }
                else
                {

                    Device_l.Text = "Device: Connected";
                    connected = true;

                    Scan_b.Enabled = true;

                    wholeUsbDevice = MyUsbDevice as IUsbDevice;
                    if (!ReferenceEquals(wholeUsbDevice, null))
                    {
                        // This is a "whole" USB device. Before it can be used,
                        // the desired configuration and interface must be selected.

                        // Select config #1
                        wholeUsbDevice.SetConfiguration(1);

                        // Claim interface #0.
                        wholeUsbDevice.ClaimInterface(0);
                    }
                    //MessageBox.Show(ReadEndpointID.Ep04.ToString());
                    reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
                    writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);
                    mode = 4;
                    backgroundWorker1.RunWorkerAsync();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
            }
        }
示例#32
0
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
                if (MyUsbDevice == null)
                {
                    throw new Exception("Device Not Found.");
                    //connected = false;
                }
                else
                {
                    Device_l.Text = "Device: Connected";
                    //connected = true;

                    Scan_b.Enabled = true;

                    wholeUsbDevice = MyUsbDevice as IUsbDevice;
                    if (!ReferenceEquals(wholeUsbDevice, null))
                    {
                        // This is a "whole" USB device. Before it can be used,
                        // the desired configuration and interface must be selected.

                        // Select config #1
                        wholeUsbDevice.SetConfiguration(1);

                        // Claim interface #0.
                        wholeUsbDevice.ClaimInterface(0);
                    }

                    reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep03);
                    writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep04);

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
            }
        }
示例#33
0
        public void OnDeviceNotifyEvent(object sender, DeviceNotifyEventArgs e)
        {
            // A Device system-level event has occured

            //Console.SetCursorPosition(0, Console.CursorTop);
            //MessageBox.Show(e.Device.IdVendor.ToString());
            if (e.EventType == EventType.DeviceArrival && e.Device.IdVendor == 0x16C0 && e.Device.IdProduct == 0x05DD)
            {
                try
                {
                    MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
                    if (MyUsbDevice == null)
                    {
                        //throw new Exception("Device Not Found.");
                        connected = false;
                    }
                    else
                    {

                        Device_l.Text = "Device: Connected";
                        connected = true;

                        Scan_b.Enabled = true;

                        wholeUsbDevice = MyUsbDevice as IUsbDevice;
                        if (!ReferenceEquals(wholeUsbDevice, null))
                        {
                            // This is a "whole" USB device. Before it can be used,
                            // the desired configuration and interface must be selected.

                            // Select config #1
                            wholeUsbDevice.SetConfiguration(1);

                            // Claim interface #0.
                            wholeUsbDevice.ClaimInterface(0);
                        }
                        //MessageBox.Show(ReadEndpointID.Ep04.ToString());
                        reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
                        writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);
                        mode = 4;
                        backgroundWorker1.RunWorkerAsync();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
                }
            }
            if (e.EventType == EventType.DeviceRemoveComplete && e.Device.IdVendor == 0x16C0 && e.Device.IdProduct == 0x05DD)
            {
                timer1.Enabled = false;
                connected = false;
                if (MyUsbDevice != null)
                {
                    if (MyUsbDevice.IsOpen)
                    {
                        // If this is a "whole" usb device (libusb-win32, linux libusb-1.0)
                        // it exposes an IUsbDevice interface. If not (WinUSB) the
                        // 'wholeUsbDevice' variable will be null indicating this is
                        // an interface of a device; it does not require or support
                        // configuration and interface selection.
                        IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
                        if (!ReferenceEquals(wholeUsbDevice, null))
                        {
                            // Release interface #0.
                            wholeUsbDevice.ReleaseInterface(0);
                        }

                        MyUsbDevice.Close();
                    }
                    MyUsbDevice = null;

                    // Free usb resources
                    UsbDevice.Exit();
                    Device_l.Text = "Device: Not Connected";
                    Scan_b.Enabled = false;
                    DumpRAM_b.Enabled = false;
                    DumpROM_b.Enabled = false;
                    WriteRAM_b.Enabled = false;
                    Banks_l.Text = "Banks: ";
                    MBC_l.Text = "MBC: ";
                    RAM_l.Text = "RAM Size: ";
                    Size_l.Text = "Size:";
                    Title_l.Text = "Title:";

                }
            }
               // Console.WriteLine(e.ToString()); // Dump the event info to output.

            //Console.WriteLine();
            //Console.Write("[Press any key to exit]");
        }
        private void _Init(int vendorId, int productId, int interfaceNumber)
        {
            _readers = new Dictionary<int, UsbEndpointReader>();
              _writers = new Dictionary<int, UsbEndpointWriter>();

              _forwardee = UsbDevice.OpenUsbDevice(new UsbDeviceFinder(vendorId, productId)) as IUsbDevice;
              if (_forwardee == null) throw new InvalidOperationException("Device not found");

              _forwardee.ClaimInterface(interfaceNumber);
              _forwardee.SetConfiguration(1);
        }
示例#35
0
        public void Start()
        {
            lock (_lock)
            {
                UsbRegDeviceList allLibUsbDevices = UsbDevice.AllLibUsbDevices;
                if (allLibUsbDevices.Count > 0)
                {
                    UsbDevice dev;
                    IsOpen = ((LibUsbRegistry)allLibUsbDevices.First()).Open(out dev);
                    _device = dev as IUsbDevice;
                    // Select config
                    bool configuration = _device.SetConfiguration(1);

                    // Claim interface
                    bool claimInterface = _device.ClaimInterface(0);
                    /*bool found = false;
                byte readerId = (byte) ReadEndpointID.Ep01;
                while (!found && (byte)readerId <= (byte)ReadEndpointID.Ep15)
                {
                    _reader = _device.OpenEndpointReader((ReadEndpointID)readerId);
                    byte[] buffer = new byte[1024];
                    int length;
                    ErrorCode ret = _reader.Read(buffer, 100, out length);
                    found = (ret != ErrorCode.Win32Error);
                    readerId++;
                }*/
                    EndPointId = GetEndpoint();
                    _reader = _device.OpenEndpointReader(EndPointId);
                    _thread.Start();
                    //_reader.DataReceivedEnabled = true;
                    //_reader.ReadBufferSize = 8;
                    //_reader.DataReceived += OnReaderDataReceived;
                }
            }
        }
示例#36
0
        private void InitUSB(int VendorID, int ProductID)
        {
            dev = (IUsbDevice)UsbDevice.OpenUsbDevice(x => x.Vid == VendorID && x.Pid == ProductID);

            if (dev == null)
            {
                throw new NullReferenceException("Cannot find USB device for JZ4780. Check Vendor/Product IDs and that LibUSB-Win32 \".inf\" installed.");
            }

            dev.SetConfiguration(1);
        }
示例#37
0
        public void Open()
        {
            if (_deviceReg.Open(out _device) == false)
            {
                throw new InvalidOperationException("Unable to open the dongle, was it removed?");
            }

            _writer = _device.OpenEndpointWriter(WriteEndpointID.Ep01, EndpointType.Bulk);
            _reader = _device.OpenEndpointReader(ReadEndpointID.Ep01, 32, EndpointType.Bulk);

            _iDevice = _device as IUsbDevice;

            if (_iDevice != null)
            {
                _iDevice.SetConfiguration(1);
                _iDevice.ClaimInterface(0);
            }

            Setup();
        }
示例#38
0
        // USB connection and adapter management
        public override void Open()
        {
            this.Close();

            try
            {
                caLibUsbAdapter.write_lock.WaitOne();

                usb_finder = new UsbDeviceFinder(this.vid, this.pid);
                Debug.Assert(this.usb_finder != null);

                // open device
                usb_device = UsbDevice.OpenUsbDevice(usb_finder);
                if (usb_device == null)
                {
                    throw new Exception("No compatible adapters found");
                }

                wholeUsbDevice = usb_device as IUsbDevice;
                if (!ReferenceEquals (wholeUsbDevice, null)) {
                    wholeUsbDevice.SetConfiguration(1);
                    wholeUsbDevice.ClaimInterface(1);
                } else {
                    throw new Exception("Failed to claim interface");
                }

                // open endpoints
                ep_reader = usb_device.OpenEndpointReader(this.read_ep_id);
                ep_writer = usb_device.OpenEndpointWriter(this.write_ep_id);
                if(ep_reader == null || ep_writer == null)
                {
                    throw new Exception("Failed to open endpoints");
                }

                // clear garbage from input
                this.ep_reader.ReadFlush();

                // attach read event
                ep_reader.DataReceived += (read_usb);
                ep_reader.DataReceivedEnabled = true;

            } catch (Exception e) {
                this.Close();
                throw e;
            } finally {
                caLibUsbAdapter.write_lock.ReleaseMutex();
            }
        }