* serial.h ser-go32.c ser-go32-para.c ser-mac.c ser-tcp.c
authorStu Grossman <grossman@cygnus>
Tue, 7 Mar 1995 09:03:37 +0000 (09:03 +0000)
committerStu Grossman <grossman@cygnus>
Tue, 7 Mar 1995 09:03:37 +0000 (09:03 +0000)
ser-unix.c:  Add SERIAL_SETSTOPBITS to set the number of stopbits
(needed for IDP board?!?!?).

gdb/ChangeLog
gdb/ser-go32-para.c
gdb/ser-go32.c
gdb/ser-mac.c
gdb/ser-tcp.c
gdb/ser-unix.c
gdb/serial.h

index 149c68279a69aaf94d7fc653f122a2ed78e1e329..b0106f4c64e0eb5c791cbae26ca85e11c8e5d4c1 100644 (file)
@@ -1,5 +1,9 @@
 Tue Mar  7 00:23:47 1995  Stu Grossman  (grossman@cygnus.com)
 
+       * serial.h ser-go32.c ser-go32-para.c ser-mac.c ser-tcp.c
+       ser-unix.c:  Add SERIAL_SETSTOPBITS to set the number of stopbits
+       (needed for IDP board?!?!?).
+
        * defs.h utils.c remote-hms.c remote-pa.c remote.c:  Fix defs and
        usage of fputc_unfiltered and putchar_unfiltered.  Eliminate
        putc_unfiltered (it's superfluous).
index 707398efac3e36dae28f2528c306be11be123d78..2167166fd7d3e26556bccf550ba3183d08944a49 100644 (file)
@@ -230,6 +230,14 @@ go32_setbaudrate (scb, rate)
   return 0;
 }
 
+static int
+go32_setstopbits (scb, num)
+     serial_t scb;
+     int num;
+{
+  return 0;
+}
+
 static void
 go32_close (scb)
      serial_t scb;
@@ -253,6 +261,7 @@ static struct serial_ops go32_ops =
   go32_print_tty_state,
   go32_noflush_set_tty_state,
   go32_setbaudrate,
+  go32_setstopbits,
 };
 
 void
index b4a7591c2aa87b4127477eec709642c4193d996e..775ef70d3c7b0f003bfae2aafc2dd20d8834cc32 100644 (file)
@@ -719,6 +719,7 @@ dos_setbaudrate (scb, rate)
     if (port->baudrate != rate) 
       {
        int x;
+       unsigned char cfcr;
 
        x = dos_baudconv (rate);
        if (x <= 0)
@@ -729,10 +730,12 @@ dos_setbaudrate (scb, rate)
          }
 
        disable ();
+       cfcr = inb (port, com_cfcr);
+
        outb(port, com_cfcr, CFCR_DLAB);
        outb(port, com_dlbl, x & 0xff);
        outb(port, com_dlbh, x >> 8);
-       outb(port, com_cfcr, CFCR_8BITS);
+       outb(port, com_cfcr, cfcr);
        port->baudrate = rate;
        enable ();
       }
@@ -740,6 +743,34 @@ dos_setbaudrate (scb, rate)
     return 0;
 }
 
+static int
+dos_setstopbits (scb, num)
+     serial_t scb;
+     int num;
+{
+    struct dos_ttystate *port = &ports[scb->fd];
+    unsigned char cfcr;
+
+    disable ();
+    cfcr = inb (port, com_cfcr);
+
+    switch (num)
+      {
+      case SERIAL_1_STOPBITS:
+       outb (port, com_cfcr, cfcr & ~CFCR_STOPB);
+       break;
+      case SERIAL_1_AND_A_HALF_STOPBITS:
+      case SERIAL_2_STOPBITS:
+       outb (port, com_cfcr, cfcr | CFCR_STOPB);
+       break;
+      default:
+       enable ();
+       return 1;
+      }
+    enable ();
+
+    return 0;
+}
 
 static int
 dos_write (scb, str, len)
@@ -816,6 +847,7 @@ static struct serial_ops dos_ops =
   dos_print_tty_state,
   dos_noflush_set_tty_state,
   dos_setbaudrate,
+  dos_setstopbits,
 };
 
 
index 95c2481cf54e5ee888cb303e32fc6415ad47dfec..a8db83f3e146a33cb567e96e5a63ac012091a195 100644 (file)
@@ -246,6 +246,14 @@ mac_set_baud_rate (scb, rate)
   return 0;
 }
 
+static int
+mac_set_stop_bits (scb, num)
+     serial_t scb;
+     int num;
+{
+  return 0;
+}
+
 int first_mac_write = 0;
 
 static int
@@ -322,6 +330,7 @@ static struct serial_ops mac_ops =
   mac_print_tty_state,
   mac_noflush_set_tty_state,
   mac_set_baud_rate,
+  mac_set_stop_bits,
 };
 
 void
index db9daa268e1f62e42436614b0261de5b7f17ec59..029a6259822333f65b387c0386b88d523f2d764c 100644 (file)
@@ -38,6 +38,7 @@ static void tcp_raw PARAMS ((serial_t scb));
 static int wait_for PARAMS ((serial_t scb, int timeout));
 static int tcp_readchar PARAMS ((serial_t scb, int timeout));
 static int tcp_setbaudrate PARAMS ((serial_t scb, int rate));
+static int tcp_setstopbits PARAMS ((serial_t scb, int num));
 static int tcp_write PARAMS ((serial_t scb, const char *str, int len));
 /* FIXME: static void tcp_restore PARAMS ((serial_t scb)); */
 static void tcp_close PARAMS ((serial_t scb));
@@ -264,6 +265,14 @@ tcp_setbaudrate(scb, rate)
   return 0;                    /* Never fails! */
 }
 
+static int
+tcp_setstopbits(scb, num)
+     serial_t scb;
+     int num;
+{
+  return 0;                    /* Never fails! */
+}
+
 static int
 tcp_write(scb, str, len)
      serial_t scb;
@@ -312,6 +321,7 @@ static struct serial_ops tcp_ops =
   tcp_print_tty_state,
   tcp_noflush_set_tty_state,
   tcp_setbaudrate,
+  tcp_setstopbits,
 };
 
 void
index 237384b3b7cd95ac68dfb438b256ca171413948e..55d2a02a837d31ed55bb7c24960d74ddfa87483a 100644 (file)
@@ -627,6 +627,51 @@ hardwire_setbaudrate(scb, rate)
   return set_tty_state (scb, &state);
 }
 
+static int
+hardwire_setstopbits(scb, num)
+     serial_t scb;
+     int num;
+{
+  struct hardwire_ttystate state;
+  int newbit;
+
+  if (get_tty_state(scb, &state))
+    return -1;
+
+  switch (num)
+    {
+    case SERIAL_1_STOPBITS:
+      newbit = 0;
+      break;
+    case SERIAL_1_AND_A_HALF_STOPBITS:
+    case SERIAL_2_STOPBITS:
+      newbit = 1;
+      break;
+    default:
+      return 1;
+    }
+
+#ifdef HAVE_TERMIOS
+  if (!newbit)
+    state.termios.c_cflag &= ~CSTOPB;
+  else
+    state.termios.c_cflag |= CSTOPB; /* two bits */
+#endif
+
+#ifdef HAVE_TERMIO
+  if (!newbit)
+    state.termio.c_cflag &= ~CSTOPB;
+  else
+    state.termio.c_cflag |= CSTOPB; /* two bits */
+#endif
+
+#ifdef HAVE_SGTTY
+  return 0;                    /* sgtty doesn't support this */
+#endif
+
+  return set_tty_state (scb, &state);
+}
+
 static int
 hardwire_write(scb, str, len)
      serial_t scb;
@@ -675,6 +720,7 @@ static struct serial_ops hardwire_ops =
   hardwire_print_tty_state,
   hardwire_noflush_set_tty_state,
   hardwire_setbaudrate,
+  hardwire_setstopbits,
 };
 
 void
index 9e669cbb2bb1fb0bf6f3f45df3e9fd060e278cee..2dbb1aa883547add35d5ad662d0ba880adb7ab8a 100644 (file)
@@ -57,6 +57,7 @@ struct serial_ops {
   int (*noflush_set_tty_state)
     PARAMS ((serial_t, serial_ttystate, serial_ttystate));
   int (*setbaudrate) PARAMS ((serial_t, int rate));
+  int (*setstopbits) PARAMS ((serial_t, int num));
 };
 
 /* Add a new serial interface to the interface list */
@@ -139,6 +140,15 @@ serial_t serial_fdopen PARAMS ((const int fd));
 
 #define SERIAL_SETBAUDRATE(SERIAL_T, RATE) ((SERIAL_T)->ops->setbaudrate((SERIAL_T), RATE))
 
+/* Set the number of stop bits to the value specified.  Returns 0 for success,
+   -1 for failure.  */
+
+#define SERIAL_1_STOPBITS 1
+#define SERIAL_1_AND_A_HALF_STOPBITS 2 /* 1.5 bits, snicker... */
+#define SERIAL_2_STOPBITS 3
+
+#define SERIAL_SETSTOPBITS(SERIAL_T, NUM) ((SERIAL_T)->ops->setstopbits((SERIAL_T), NUM))
+
 /* Write LEN chars from STRING to the port SERIAL_T.  Returns 0 for
    success, non-zero for failure.  */