serial: default to XON/XOFF flow control

This seems to help with Huawei and ZTE devices which often
appeared to stop responding on either primary or secondary ports
at various times.  We had this problem a long time ago, but it was
fixed then by always picking the right serial port via the USB
interface number (Huawei) or udev rules files (ZTE).  Now that we're
using the second serial port more extensively the problem came
up again, so lets try to fix it for real.
This commit is contained in:
Dan Williams
2010-03-09 11:44:25 -08:00
parent fbf3efc1e3
commit 81dc2dde45
2 changed files with 11 additions and 2 deletions

View File

@@ -698,6 +698,9 @@ mm_generic_gsm_enable_complete (MMGenericGsm *self,
}
}
/* Try to enable XON/XOFF flow control */
mm_serial_port_queue_command (priv->primary, "+IFC=1,1", 3, NULL, NULL);
/* Get allowed mode */
if (MM_GENERIC_GSM_GET_CLASS (self)->get_allowed_mode)
MM_GENERIC_GSM_GET_CLASS (self)->get_allowed_mode (self, get_allowed_mode_done, NULL);

View File

@@ -357,8 +357,14 @@ config_fd (MMSerialPort *self, GError **error)
stbuf.c_cc[VTIME] = 0;
stbuf.c_cc[VEOF] = 1;
stbuf.c_cflag &= ~(CBAUD | CSIZE | CSTOPB | CLOCAL | PARENB);
stbuf.c_cflag |= (speed | bits | CREAD | 0 | parity | stopbits);
/* Use software handshaking */
stbuf.c_iflag |= (IXON | IXOFF | IXANY);
/* Set up port speed and serial attributes; also ignore modem control
* lines since most drivers don't implement RTS/CTS anyway.
*/
stbuf.c_cflag &= ~(CBAUD | CSIZE | CSTOPB | PARENB | CRTSCTS);
stbuf.c_cflag |= (speed | bits | CREAD | 0 | parity | stopbits | CLOCAL);
if (ioctl (priv->fd, TCSETA, &stbuf) < 0) {
g_set_error (error,