This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: 1.57 on Win2k or WinXP. Not more than 16 com ports. Differences between //./comX and /dev/comX


> -----Original Message-----
> From: cygwin-owner On Behalf Of Lutz Hörl
> Sent: 19 April 2004 17:29

> Hello,
> 
> I want to use (Windows-) COM port numbers greater
> than 16, but when I use open() to get a file
> descriptor for the devices I get the behaviour:
> 
> ---1.case-----------------------------------------
> 
> errno = 0;
> fd = open("/dev/com8", O_RDWR | O_NONBLOCK);
> -> fd = 3, errno = 0
> -> everything is OK,
>    I can use the opened COM port
>
> ---2.case-----------------------------------------
> 
> errno = 0;
> fd = open("\\.\com8", O_RDWR | O_NONBLOCK);
> 
> -> fd = 3, errno = 20 = ERROR_BAD_UNIT
>    = "The system cannot find the device specified"
> -> I can not use the opened COM port. The port
>    number 1...16 versus 17...255 does NOT matter.

  You got this one wrong.  The backslashes inside the quotes need to be
escaped, otherwise the first two will be parsed as a single escaped
backslash, and the second as '\c', which isn't a valid control char in C, so
you're likely to end up actually trying to open a device called "\.com8".
You must have ignored a warning message from the compiler when you tried
this.  WHY???!?

dk@mace /davek/test> cat testslash.c

#include <stdio.h>

int main (int argc, const char **argv)
{
  printf ("\\.\com8\n");
  return 0;
}

dk@mace /davek/test> gcc -o testslash testslash.c
testslash.c:6:11: warning: unknown escape sequence '\c'
dk@mace /davek/test> ./testslash.exe
\.com8
dk@mace /davek/test>

> ---3.case-----------------------------------------
> 
> errno = 0;
> fd = open("/dev/com23", O_RDWR | O_NONBLOCK);
> 
> -> fd = -1, errno = 2 = ERROR_FILE_NOT_FOUND
>    = "The system cannot find the file specified"
> -> I can not use the opened COM port. The port
>    number 1...16 (OK) 17...255 (not OK) DOES matter.
> 
> ---end cases------------------------------------

  It's a dos/windoze limitation that only the low few com ports actually
have dos devices created for them.  8 is the upper limit, IIRC.  So you can
just open com1....com8 from an ordinary DOS program, and so cygwin creates 8
com devices under /dev, because that's all it finds windoze has listed.  If
you want to use the others, you have to use the \\.\comX notation.
 
> Is there a workaround?

  Yep.  Use the \\.\comX notation and get it correct.  That should work.

    cheers, 
      DaveK
-- 
Can't think of a witty .sigline today....


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]