I've encountered a problem in using serial ports (comm ports) with the latest cygwin snapshots.
The problem was first encountered in snapshot cygwin1-20040416.dll and with further testing i've
concluded that the issue remains with the most recent snapshots. These being:
- cygwin1-20040422.dll
- cygwin1-20040420.dll
- cygwin1-20040416.dll
The problem occurs when a call to open() is made. Under WIN XP the open fails
after a few seconds of blocking. Under WIN 2000, the open is successful however
calls to ioctl with TIOCMGET produce false results (i.e. obtaining the status
of DTR, RTS etc).
I think this is related to the changes 'Corinna Vinschen' made in the cygwin1-20040416.dll
snapshot, specifically:
(fhandler_base::open): Rearrange to use NtCreateFile instead of CreateFile.
This problem does not occur in snapshots previous to cygwin1-20040416.dll.
I've written a piece of code which demonstrates this issue, and have attached it to this
posting. I would appreciate it if people could verify this issue by running the attached
code.
To compile: make all
To run: ./openfault
Tested system configurations: - WIN XP 256MB RAM P4 @ 1.6 GHz SP1
- WIN 2000 192MB RAM P4 @ 1.2 GHz SP1
I've also attached the cygcheck for the WIN XP system.
george.
_________________________________________________________________
SEEK: Now with over 50,000 dream jobs! Click here: http://ninemsn.seek.com.au?hotmail
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <fcntl.h>
int main(int argc, char *argv[]) {
int flag = ( O_RDWR | O_NOCTTY | O_NDELAY ); int handle = -1; char* port = "/dev/ttyS0";
printf("Attempting to open port \"%s\"\n", port);
if( (handle = open(port, flag)) == -1) {
/*
An error has occured in opening the port, log an error report
*/
printf("ERROR: An error has occured during opening of comport.\n");
printf(" Error number = [%d] => description: %s", errno, strerror(errno));
exit(EXIT_FAILURE); return 0;
}
printf("Success occured during opening of comport.\n"); close(handle);
exit(EXIT_SUCCESS); return 1; }
Makefile
Description: Binary data
cygcheck.out
Description: Binary data-- 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/