site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com static int set_local_mode(int inFileDescriptor) { int theResult = 0; struct termios theOptions = {}; I'm trying to read a Mac's built-in modem in raw mode (after some help from this lists months ago, then a long period of downtime) and I'm running into something annoying. When data shows up, it comes through as a small burst (100 characters or so) followed by a brief pause (.02 seconds, say) and then another small burst (32 characters). The difficulty I'm having is that the read() I eventually issue returns before the second burst shows up. Here's the setup routine. if(tcgetattr(inFileDescriptor, &theOptions) == -1) {theResult = errno;} cfmakeraw(&theOptions); //theOptions.c_lflag &= ~(ICANON | ECHO); /* Clear ICANON and ECHO. */ theOptions.c_cc[VMIN] = 1; theOptions.c_cc[VTIME] = 5; theOptions.c_cflag |= (CS8 | CLOCAL); if(tcsetattr(inFileDescriptor, TCSANOW, &theOptions) == -1) {theResult = errno;} return theResult; } My understanding is that if this completes successfully, the read() should return after once there has been a half-second interval since the last character received. The buffer passed to read() is much larger than the returned data, and the commented line doesn't have any impact (c_lflag is already zero by the time we get there). Any advice? _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... This email sent to site_archiver@lists.apple.com
participants (1)
-
Gregory Weston