public HidDeviceEventMonitor(HidDevice device)
 {
     _device = device;
 }
        public void StartReading()
        {
            //TODO testing to check other Symbol bar code scanners in correct mode -
            //Question - is using Usage filter appropriate/reliable?
            HidDevice[] devices = HidDevices.Enumerate().ToArray();

            //Before removing disconnected one: We won't be able to remove while it's in a foor loop, so will make a copy
            System.Collections.Generic.List<HidDevice> _ScannersCopy = new System.Collections.Generic.List<HidDevice>(_Scanners);
            //Remove if Scanner Removed (if not exist in latest HidDevice read)
            foreach (HidDevice scan in _ScannersCopy)
            {
                bool blnScanExist = false;
                foreach (var device in devices)
                {
                    if (device.DevicePath == scan.DevicePath)
                    {
                        blnScanExist = true;
                        break;
                    }
                }
                if (!blnScanExist) _Scanners.Remove(scan); //Remove from main Scanner list
            }

            //We only want to connect scanners when they are at "Handheld IBM USB Mode" so we will use below filter so that they don't connect other modes such as "Keyboard Wedge", etc.
            //List<int> checkValues = new List<int> { 19200, 18944 };

            foreach (var device in devices)
                //if (device.ProductName == "Symbol Bar Code Scanner" && (device.Capabilities.Usage == 19200 ||device.Capabilities.Usage==18944))
                //if (device.ProductName == "Symbol Bar Code Scanner" && (checkValues.Contains(device.Capabilities.Usage)))
                if ((device.ProductName != null) && (device.ProductName.StartsWith("Symbol Bar Code Scanner")) && (checkValues.Contains(device.Capabilities.Usage)) && (! _Scanners.Contains(device)))
                {
                    //Before we add, need to make sure if already exist - do not add again
                    bool blnScanExist = false;
                    foreach (HidDevice scan in _Scanners)
                    {
                        if (device.DevicePath == scan.DevicePath)
                        {
                            blnScanExist = true;
                            break;
                        }
                    }

                    if (!blnScanExist)
                    {
                     Scanner = device;
                    _scanner.OpenDevice();

                    _scanner.Inserted += new InsertedEventHandler(_scanner_Inserted);
                    _scanner.Removed += new RemovedEventHandler(_scanner_Removed);
                    _scanner.MonitorDeviceEvents = true;
                    _scanner.ReadReport(ReadProcess);
                    //System.Diagnostics.Debug.WriteLine("Usage:" + _scanner.Capabilities.Usage.ToString());
                    //System.Diagnostics.Debug.WriteLine("Usage page:" + _scanner.Capabilities.UsagePage.ToString());
                    //break;
                    }

                }
        }