Windows, C++ and interfacing with USB Devices - windows

Essentially, I want to know how to access the raw byte code sent by a USB device at a given port using C++ on windows. Specifically, I am trying to write a program to interface with an IR receiver. (Yes I have tried using other software, EventGhost, IRSS, etc.)
I have Visual Studio Ultimate if that helps with anything.
Thanks in advance.

Related

Emulate an HID device on windows?

I am trying to write a program that emulates a gamepad in such a way that windows recognizes it as a gamepad, but it is actually controlled by my own code.
I have tried to create a virtual COM port and try to make windows recognize it as a gamepad, but without much luck.
Does anyone know a way to do something like this, or could maybe give me some pointers on what might be worth trying?
The HIDUSBFX2 sample driver (hidusbfx2.sys) demonstrates how to map a non-HID USB device to a HID device.
On Windows 10 there is new Virtual HID Framework (VHF) that is intended for same purpose.

how to control the on-off operation of a usb device through matlab in windows 7.?

i want to control the on-off operation of a device(say a small usb fan or a usb lamp) connected to my laptop via usb cable through matlab in windows os.I have searched too many websites including matlab blogs and product documentation,but in vain.There is some information in matlab instrument control toolbox box about switches but it caters to industrial switches so not usefull to me.please help.
Does the driver for your device have C/C++ functions that you could call to control it? If so, write a simple DLL in Visual Studio which uses the standard MEX interface with Matlab, and call those C/C++ functions there. Build the DLL and rename it from .dll to .mexw32 (or .mexw64, if you're using a 64-bit Matlab). Then you should be able to run it by calling the filename as a function from Matlab.
Without knowing more about your device, I can only give examples of controlling other USB devices. For example, you could use the C code from this article to unmount a USB flash drive; just compile the code into a DLL and call it from Matlab.

How can I make a custom USB device show up in Windows as a COM Port?

I have developed a USB device that communicates with linux over a simple but proprietary interface and some custom Linux drivers. My goal is to port this to Windows without writing windows drivers. What I would like to do is find an open source or inbuilt class driver for windows that would look like a COM port in Windows. Then I would tailor the embedded software to match what ever protocol and descriptors the virtual COM port expects to see.
The idea would be that I could plug my device in to a Windows machine and a relatively high speed COM port would appear with out me having to develop Windows drivers for it.
I have been looking at the USB CDC (Communications Device Class) documentation and it looks promising, but I don't know which sub interface would be best to use so that it would show up as a COM port.
Has anyone here done any work like this before or could provide some insight?
Specifically:
Are there virtual COM drivers "built in" to windows or would I need a 3rd party driver.
Which CDC sub class should I use for simple RS232 emulation (No need for modem AT commands, etc)
Is there a better option to do what I am trying to do.
Thanks
There is a USB-to-serial driver built in to Windows that will do what you want. It is called usbser.sys:
http://support.microsoft.com/kb/837637
You will have to write an INF file and distribute that to your users, but that will not be too hard because it is only a few kilobytes of text and you can find examples online.
I'm not aware of any great documentation for this driver by Microsoft, so my advice would be to find some other device that uses it, such as Pololu Wixel, and copy what they did.
Here are the device descriptors we used and the special control tranfers we had to implement:
https://github.com/pololu/wixel-sdk/blob/master/libraries/src/usb_cdc_acm/usb_cdc_acm.c
You can see our INF file, wixel_serial.inf, by downloading the software and looking in the drivers folder:
http://www.pololu.com/docs/0J46/3.a
(There are other files in there that are not necessary for you.)
You can also look at the Arduino Uno because they use the same driver.
Whatever you do, please don't use our USB Vendor ID in your product! You need to get your own.
Update: In Windows 10, you don't need an INF file anymore because of the new usbser.inf driver that comes with Windows.
If you are using a UART you can easily interface it to a FTDI USB chip like http://www.ftdichip.com/Products/ICs/FT232R.htm or a Prolific like http://www.prolific.com.tw/eng/products.asp?id=59
For development, prototype and testing I have half dozen of these laying around http://www.pololu.com/catalog/product/391
I connect it directly to the UART pins on AVR and 8051 micros.

How to list all attached USB devices in Visual C++

In Short: I need to detect hotplug events of my USB CDC device by PID/VID and get the corresponding virtual COM port which was created by Windows in Visual C++ and in the end create a dll.
I have a USB CDC device which I need to be notified of when connected/disconnected on Windows. My approach is to use RegisterDeviceNotification and an "invisible" Window to receive WM_DEVICECHANGE notifications. This part is working so far.
Now as far as I found out I need to get the list of USB devices that is plugged, iterate over it and filter out the devices with my PID/VID? I assume that I am then able to get more informations about the device including the COM port?
Is the only way to achieve my goal to use SetupDi calls in setupapi.h? Is using WDK / DDK the only way to achieve my goal?
As soon as that is working I open-source it on http://github.com/vinzenzweber/USBEventHandler. The Mac version is available already!
After digging through tons of useless documentation at msdn and some debugging I found the missing link: SetupDi calls in setupapi.h: More infos as well as source code for Mac and Windows can be found in my USBEventHandler project at github.com with sources for Mac and Windows.

Using HID USB in Visual Basic 6.0

im trying to interface a Gramin usb GPS to get the coordinates in a visual basic project, but i dont have an idea how to accomplish this, anyone point me out in the right direction please?
If the Garmin unit uses an RS-232 (standard serial) interface, then its USB driver probably implements a virtual serial port that you can open using the MSCOMM control.
Check that by opening the Hardware Manager and see if there's an extra port, maybe even labeled 'Garmin', while it's plugged in.
There are simple, standard text protocols used by GPS units. As long as no other app has the port open, you should be able to open it in VB and capture the output with a little experimenting for baud rate, etc. 4800,8,N,1 is a good place to start.

Resources