[PD] comport port numbers :: bash trick
Martin Peach
martin.peach at sympatico.ca
Mon Sep 25 15:26:32 CEST 2006
Hans-Christoph Steiner wrote:
>
> On Sep 24, 2006, at 6:52 PM, Martin Peach wrote:
>
>> Hans-Christoph Steiner wrote:
>>>
>>> On Sep 24, 2006, at 5:49 PM, Martin Peach wrote:
>>>
>>>> Martin Peach wrote:
>>>>> Martin Peach wrote:
>>>>>> Hans-Christoph Steiner wrote:
>>>>>>>
>>>>>>> On the latest version of [comport], the [info( message should
>>>>>>> print out a similar output to the Pd window.
>>>>>> Don't try it on Windows though, you'll crash pd.
>>>>>> for(i=1; i<COMPORT_MAX; i++)
>>>>>> {
>>>>>> /* TODO: this should actually probe ports */
>>>>>> post("\t%d - COM%s", i, i);
>>>>>> }
>>>>>> doesn't work as well as being useless and irritating (it is
>>>>>> supposed to just print 98 lines of COM names).
>>>>>> But since i isn't a string, post() crashes.
>>>>>> I'm looking into how to enumerate serial ports on Windows properly.
>>>>>> It looks like you have to open each device to find out about it,
>>>>>> unlike on linux where they are listed as files.
>>>>>>
>>>>> So I changed it in cvs. Now you get a list of available serial
>>>>> ports in Windows as well. At least it works for me but I only have
>>>>> one port here so I don't know if it _really_ works.
>>>>>
>>>>
>>>> Now I'm trying it on linux where I have only two ports and I get
>>>> the full list of 32 devices. Maybe we should try probing them all
>>>> to see which ones actually exist?
>>>
>>> Nice work on the COM stuff, sorry for introducing a bug on Windows.
>>> :-/ I'll be getting a WinXP autobuild machine up in the next couple
>>> days, so that will help.
>>>
>>> That would be nice. On Mac OS X, the exist if they are in the file
>>> system. On newer Linux-based systems, that is also the case. But
>>> the only manually created files are still prevalent.
>>>
>> They 'exist' virtually but there is not usually a real device to plug
>> your cable into except for the first one or two entries. It seems
>> like you have to open each virtual device and see if you get a valid
>> handle. If you do then the hardware exists (and you have to close it
>> again), otherwise you have to check the error code to see if it
>> wasn't opened because it's already in use or because it isn't there.
>>
>> Martin
>
> I guess I meant that and vice versa: on Mac OS X, if they are in the
> filesystem, they exist. I think its the same with Linux udev systems.
udev looks nice but I guess not every linux has it.
> I am wary of opening and closing every port to test if its there
> unless its absolutely necessary. I don't know about Windows or
> GNU/Linux, but some devices take a long time to open, so the whole
> system hangs waiting for it. The Apple modem is an example of that.
It seems like you have to get a file descriptor in order to get any
information about a device, and the only way to get the descriptor is to
open the device :(
Windows has higher-level functions for getting system information but
they aren't in the core API.
On my Windows box COM3 seems to be a modem but the error returned is
"invalid parameters" instead of "doesn't exist" or "permission denied"
(when it's already open).
OTOH, in the infamous registry we have:
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM which contains a list
of all real serial devices. Maybe that's better?
Apples can be tricky, it can take almost a minute to get the cd tray to
open...
>
>
> I suppose that the testing phase could be in a background thread, then
> it wouldn't hang. A simple thread that just iterated thru all
> possible ports, testing to see what exists, then making a report to
> the console and the status outlet when complete.
Also it might be better to do it only once at comport setup time.
Martin
More information about the Pd-list
mailing list