np43 / qextserialport

Automatically exported from code.google.com/p/qextserialport
Other
0 stars 0 forks source link

USB serial ports don't show up in enumerator. #13

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
We have some devices that use a USB serial port driver.  The driver inf is
attached.  When you plug the device in, it shows up under Ports in the
Device Manager (something like Communications Port (COM3)).

However, this port will not appear when using
QextSerialEnumerator::getPorts().  The list contains only the fixed COM
ports on the computer.  

What steps will reproduce the problem?
1.  Connect device using attached driver (custom hardware) 
2.  Verify that the port shows up in Device Manager
3.  Call getPorts(). 

What is the expected output? What do you see instead?
The port should be listed, it is not.

What version of the product are you using? On what operating system?
Subversion from mid-July 2009.  Windows XP SP3.

Original issue reported on code.google.com by leo.spal...@gmail.com on 19 Aug 2009 at 12:21

Attachments:

GoogleCodeExporter commented 9 years ago
I tried changing the GUID defined in qextserialenumerator.cpp to the one 
specified in
the inf file, but this didn't fix the problem.  Devices using that driver still 
don't
show up.

Original comment by leo.spal...@gmail.com on 19 Aug 2009 at 1:00

GoogleCodeExporter commented 9 years ago
Any chance you can do a pull of a more recent version?  

Original comment by lst...@gmail.com on 19 Aug 2009 at 5:23

GoogleCodeExporter commented 9 years ago
Cloned hg a few minutes ago.   Won't compile because qextserialenumerator.cpp 
line 64, 
it tries to statically allocate an array with a dynamic size.  I'm changing it 
to the 
old behavior (heap allocated) to make it work and will then re-test.

Original comment by leo.spal...@gmail.com on 19 Aug 2009 at 5:45

GoogleCodeExporter commented 9 years ago
Right-o.  I'll switch that back over.

Original comment by lst...@gmail.com on 19 Aug 2009 at 6:26

GoogleCodeExporter commented 9 years ago
Thanks.  Same behavior with the latest snapshot though.   The devices simply 
don't
show up in the list from getPorts().

I do have a different USB serial device (US Digital A2 Encoder) that does show 
up, so
it just seems to be this type of driver.   In Linux, these devices show up as
/dev/ttyACMXX

Original comment by leo.spal...@gmail.com on 19 Aug 2009 at 7:26

GoogleCodeExporter commented 9 years ago
Oh.  Just looked at your .inf - you should register your device with 
serenum.sys as well so it can get enumerated.

We have one for our device that you can check at 
http://code.google.com/p/makecontroller/source/browse/firmware/trunk/core/making
things/make_controller_kit.inf

Original comment by lst...@gmail.com on 19 Aug 2009 at 8:43

GoogleCodeExporter commented 9 years ago
Wow, great, thank you.  I will see if I can add that to our driver.  I have no 
idea
where our electrical engineers got the one that we use, so I''m not surprised 
that it
is sketchy.

Original comment by leo.spal...@gmail.com on 19 Aug 2009 at 10:41

GoogleCodeExporter commented 9 years ago
Hmm..  I got our hardware to load your example driver by copying over the 
VID/PID for
our device, but unfortunately it still doesn't show up in getPorts.  However it
sounds like it is just my inexperience with making a proper driver file.  I'll 
keep
working on it.

Original comment by leo.spal...@gmail.com on 20 Aug 2009 at 10:25

GoogleCodeExporter commented 9 years ago
OK - are you sure you uninstalled the previous driver version successfully?

Original comment by lst...@gmail.com on 27 Aug 2009 at 4:56

GoogleCodeExporter commented 9 years ago
Hi,

I have the same issue as Leo described. I have a CDC device to which works fine 
with
terminal programs like TeraTerm. Unfortunately the device is not listed by
qextserialenumerator. First my .inf file missed the section for serenum.sys, 
too. So
I added them (as lstask proposed) according to the mentioned 
make_controller_kit.inf.
But still the problem exists. I installed the new .inf correctly since the
devicemanager is stating that my device has now two drivers (the usbser.sys and 
newly
the the serenum.sys). 

What else could be the problem?

I would be glad the get qextserialenumerator run since I am planning to write my
application with qt.

regards

spachner

Original comment by stefanpa...@googlemail.com on 31 Aug 2009 at 2:26

GoogleCodeExporter commented 9 years ago
Not sure - works for me on XP and Vista.  Confirm that you've completely 
uninstalled your previous drivers, and 
that the GUIDs match.  Other than that, maybe step through the code and see 
where it's not behaving?

Original comment by lst...@gmail.com on 31 Aug 2009 at 9:22

GoogleCodeExporter commented 9 years ago
Hi lstask,

thanks for your answer. Yes, I am sure that the new driver with serenum.sys is 
now
installed. My .inf File is attached, so you can also see that my GUID is the 
one you
are using to search for.

I found that still people, me too until yesterday :-) are using sourceforge
(https://sourceforge.net/projects/qextserialport/) for posting issues. 
Unfortunately there is no hint on the sourceforge page that you have moved to
code.google.

I will try to debug further into the CDC enumeration problem.

regards

Stefan

Original comment by stefanpa...@googlemail.com on 1 Sep 2009 at 6:59

Attachments:

GoogleCodeExporter commented 9 years ago
Hm - ok.  You might also try to see if the event driven device notifications 
work for you, in addition to polling via 
getPorts().  

We don't have access to the sourceforge site so can't put any notices up there, 
unfortunately.  We're hoping to as 
soon as ownership transfers.

Original comment by lst...@gmail.com on 1 Sep 2009 at 7:17

GoogleCodeExporter commented 9 years ago
Hi lstask,

I solved my problem! 

I tried your .inf file
(http://code.google.com/p/makecontroller/source/browse/firmware/trunk/core/makin
gthings/make_controller_kit.inf),
patched the USB ids to my device AND changed the GUID in 
qextserialenumerator.cpp
from      

DEFINE_GUID(GUID_CLASS_COMPORT, 0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 
0x00,
0x3e, 0x30, 0x1f, 0x73);

to

DEFINE_GUID(GUID_CLASS_COMPORT, 0x4D36E978L, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 
0x00,
0x2B, 0xE1, 0x03, 0x18);

This GUID is mentioned at http://msdn.microsoft.com/en-us/library/ms791134.aspx 
for 
"COM & LPT ports" and is also used in the makecontroller .inf file. This GUID 
filters
the "normal" serial ports as with the old GUID, plus my CDC device now. Great! 
Seems
that this is the correct GUID to be used in qextserialenumerator.cpp.

Thanks for your help!

regards

Stefan

Original comment by stefanpa...@googlemail.com on 1 Sep 2009 at 9:30

GoogleCodeExporter commented 9 years ago
Ah, ok - maybe we should update the GUID then.  Thanks for reporting back!

Original comment by lst...@gmail.com on 1 Sep 2009 at 4:07

GoogleCodeExporter commented 9 years ago
OK, after a little research I committed a change that makes this the new 
default GUID that's used.  I also posted a 
version of this INF file in the wiki so hopefully that makes it a little easier 
for people on Windows.  

If you're still having trouble enumerating ports, please re-open this issue or 
file a new one.  Closing it for now.

Original comment by lst...@gmail.com on 1 Sep 2009 at 10:27

GoogleCodeExporter commented 9 years ago
THanks. Works now!

Original comment by leo.spal...@gmail.com on 16 Sep 2009 at 10:13