Mail Archives: cygwin/2007/01/19/17:01:12
You don't show the complete output of the two programs. Do you have a device
connected to the serial port that echoes the data written? Or a device that
provides some data to read? With the first program, how many bytes does it
read?
Is the serial port set driver set to generate echo locally? On Linux? On XP?
On both?
> The second code write on socket, but it says that serial port isn't ready
> to read.
Your select statement appears to tell that there are no data available to
read on the serial port.
You should normally write select() read-write loops so that file descriptors
are entered into the write_fdset only if there is something to write.
Otherwise the program will be running in a tight loop because the the
select() returns telling that (e.g) the serial_fd is ready to accept more
data. The point in using select is to have the program sleep until there is
something to do.
while(up_is_open || down_is_open)
{
if (up_is_open) {
has_data(up_buffer))
FD_SET(space_fd, &write_fdset);
else
FD_SET(earth_fd, &read_fds);
}
if (down_is_open) {
if (has_data(down_buffer))
FD_SET(earth_fd, &write_fdset);
else
FD_SET(space_fd, &read_fdset);
}
ready_fds = select(max_fd, &read_fdset, &write_fdset, NULL, NULL);
if (ready_fds < 0) {...}
if (FD_ISSET(earth_fd, &write_fdset) {...}
if (FD_ISSET(space_fd, &write_fdset) {...}
if (FD_ISSET(earth_fd, &read_fdset) {...}
if (FD_ISSET(space_fd, &read_fdset) {...}
}
Regards
--
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/
- Raw text -