/**
         * Probes a single device for a compatible driver.
         *
         * @param usbDevice the usb device to probe
         * @return a new {@link UsbSerialDriver} compatible with this device, or
         *         {@code null} if none available.
         */
        public IUsbSerialDriver ProbeDevice(UsbDevice usbDevice)
        {
            int vendorId  = usbDevice.VendorId;
            int productId = usbDevice.ProductId;

            var driverClass = mProbeTable.FindDriver(vendorId, productId);

            if (driverClass != null)
            {
                IUsbSerialDriver driver;
                try
                {
                    driver = (IUsbSerialDriver)Activator.CreateInstance(driverClass, new System.Object[] { usbDevice });
                } catch (NoSuchMethodException e) {
                    throw new RuntimeException(e);
                } catch (IllegalArgumentException e) {
                    throw new RuntimeException(e);
                } catch (InstantiationException e) {
                    throw new RuntimeException(e);
                } catch (IllegalAccessException e) {
                    throw new RuntimeException(e);
                } catch (InvocationTargetException e) {
                    throw new RuntimeException(e);
                }
                return(driver);
            }
            return(null);
        }