We are integrating a new barcode reader (Newland NLS-FM430) in one of our products and we need to control its functionality. We have already implemented this behavior with another reader but it was an RS232 version, so we were able to send commands and wait for its input. The new one is a USB version which makes things different.
Generally, we want to initialize the barcode reader when the application is started (e.g. to disable reading setup codes) and turn it off. Then we want to enable it at the moment we need input from it and disable it again once we have read the data. There are commands for all these operations, documented in the user guide.
The issue comes when trying to communicate with the USB device. When connected to the computer it acts as a normal keyboard (Human Interface Device, HID in Device Manager) and we need to send commands to it. For this we need to open a stream to the device and write in it. We tried different libraries and solutions and opening the device always fails with an ACCESS_DENIED error. My suspicion is that the device is locked because Windows uses it as a keyboard.
I found this topic which discusses a similar problem. They found a workaround by deleting the suffix /kbd in the Device Path (and ours also has as this suffix) but removing it does not work for us - it says it cannot find the device.
I am looking into a solution in C# or C/C++ that would make it possible to open a connection to the USB device and write to it. Any help is highly appreciated.