[PD-cvs] externals/iem/comport/comport comport.c,1.23,1.24

Martin Peach mrpeach at users.sourceforge.net
Wed Oct 4 03:24:22 CEST 2006


Update of /cvsroot/pure-data/externals/iem/comport/comport
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32156

Modified Files:
	comport.c 
Log Message:


baud settings include all posix names, windows allows any divisor


Index: comport.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/comport/comport/comport.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** comport.c	26 Sep 2006 04:12:11 -0000	1.23
--- comport.c	4 Oct 2006 01:24:20 -0000	1.24
***************
*** 94,101 ****
  
  #ifdef _WIN32
  static long baudspeedbittable[] =
  {
-     CBR_256000,
-     CBR_128000,
      CBR_115200,
      CBR_57600,
--- 94,102 ----
  
  #ifdef _WIN32
+ /* we don't use the  table for windos cos we can set the number directly. */
+ /* This may result in more possible baud rates than the table contains. */
+ /*
  static long baudspeedbittable[] =
  {
      CBR_115200,
      CBR_57600,
***************
*** 107,110 ****
--- 108,112 ----
      CBR_4800,
      CBR_2400,
+     CBR_1800,
      CBR_1200,
      CBR_600,
***************
*** 112,116 ****
      CBR_110
  };
! 
  #else /* _WIN32 */
  
--- 114,118 ----
      CBR_110
  };
! */
  #else /* _WIN32 */
  
***************
*** 118,157 ****
  #define OPENPARAMS (O_RDWR|O_NDELAY|O_NOCTTY)
  #define TIONREAD FIONREAD         /* re map the IOCTL function */
! #define BAUDRATE_256000 -1
! #define BAUDRATE_128000 -1
  #define BAUDRATE_115200 -1
  #define BAUDRATE_57600  -1
- #define BAUDRATE_56000  -1
  #define BAUDRATE_38400  B38400
- #define BAUDRATE_14400  B19200 /* 14400 gibts nicht */
  #else /* IRIX */
  #define OPENPARAMS (O_RDWR|O_NDELAY|O_NOCTTY)
! #define BAUDRATE_256000 -1
! #define BAUDRATE_128000 -1
  #define BAUDRATE_115200 B115200
  #define BAUDRATE_57600  B57600
- #define BAUDRATE_56000  B57600 /* 56000 gibts nicht */
  #define BAUDRATE_38400  B38400
- #define BAUDRATE_14400  B19200 /* 14400 gibts nicht */
  #endif /* else IRIX */
  
  static
! short baudspeedbittable[] =
  {
!     BAUDRATE_256000,  /* CPU SPECIFIC */
!     BAUDRATE_128000,  /* CPU SPECIFIC */
      BAUDRATE_115200,  /* CPU SPECIFIC */
      BAUDRATE_57600,   /* CPU SPECIFIC */
-     BAUDRATE_56000,
      BAUDRATE_38400,   /* CPU SPECIFIC */
      B19200,
-     BAUDRATE_14400,
      B9600,
      B4800,
      B2400,
      B1200,
      B600,
      B300,
!     B110
  };
  
--- 120,157 ----
  #define OPENPARAMS (O_RDWR|O_NDELAY|O_NOCTTY)
  #define TIONREAD FIONREAD         /* re map the IOCTL function */
! #define BAUDRATE_230400 -1
  #define BAUDRATE_115200 -1
  #define BAUDRATE_57600  -1
  #define BAUDRATE_38400  B38400
  #else /* IRIX */
  #define OPENPARAMS (O_RDWR|O_NDELAY|O_NOCTTY)
! #define BAUDRATE_230400 B230400
  #define BAUDRATE_115200 B115200
  #define BAUDRATE_57600  B57600
  #define BAUDRATE_38400  B38400
  #endif /* else IRIX */
  
  static
! long baudspeedbittable[] =
  {
!     BAUDRATE_230400,
      BAUDRATE_115200,  /* CPU SPECIFIC */
      BAUDRATE_57600,   /* CPU SPECIFIC */
      BAUDRATE_38400,   /* CPU SPECIFIC */
      B19200,
      B9600,
      B4800,
      B2400,
+     B1800,
      B1200,
      B600,
      B300,
!     B200,
!     B150,
!     B134,
!     B110,
!     B75,
!     B50,
!     B0
  };
  
***************
*** 160,187 ****
  #endif /* else _WIN32 */
  
! #define BAUDRATETABLE_LEN 15
  
  static long baudratetable[] =
  {
!     256000L,
!     128000L,
      115200L,
      57600L,
-     56000L,
      38400L,
      19200L,
-     14400L,
      9600L,
      4800L,
      2400L,
      1200L,
      600L,
      300L,
!     110L
  }; /* holds the baud rate selections */
  
  t_class *comport_class;
  
- static long get_baud_ratebits(t_float *baud);
  static void comport_pollintervall(t_comport *x, t_floatarg g);
  static void comport_tick(t_comport *x);
--- 160,219 ----
  #endif /* else _WIN32 */
  
! #define BAUDRATETABLE_LEN 19
  
  static long baudratetable[] =
  {
!     230400L,
      115200L,
      57600L,
      38400L,
      19200L,
      9600L,
      4800L,
      2400L,
+     1800L,
      1200L,
      600L,
      300L,
!     200L,
!     150L,
!     134L,
!     110L,
!     75L,
!     50L,
!     0L
! 
  }; /* holds the baud rate selections */
  
+ /* From man cfsetospeed:
+        cfsetospeed()  sets  the  output  baud  rate stored in the
+        termios structure pointed to by termios_p to speed,  which
+        must be one of these constants:
+             B0
+             B50
+             B75
+             B110
+             B134
+             B150
+             B200
+             B300
+             B600
+             B1200
+             B1800
+             B2400
+             B4800
+             B9600
+             B19200
+             B38400
+             B57600
+             B115200
+             B230400
+   The  zero  baud rate, B0, is used to terminate the connec­
+   tion.  If B0 is specified, the modem control  lines  shall
+   no longer be asserted.  Normally, this will disconnect the
+   line.*/
+ 
  t_class *comport_class;
  
  static void comport_pollintervall(t_comport *x, t_floatarg g);
  static void comport_tick(t_comport *x);
***************
*** 204,207 ****
--- 236,240 ----
  static int open_serial(unsigned int com_num, t_comport *x);
  static int close_serial(t_comport *x);
+ static long get_baud_ratebits(t_float *baud);
  #endif
  static void comport_pollintervall(t_comport *x, t_floatarg g);
***************
*** 241,260 ****
  /* --------- sys independent serial setup helpers ---------------- */
  
- static long get_baud_ratebits(t_float *baud)
- {
-     int i = 0;
- 
-     while(i < BAUDRATETABLE_LEN && baudratetable[i] > *baud) i++;
- 
-     /* nearest Baudrate finding */
-     if(i==BAUDRATETABLE_LEN ||  baudspeedbittable[i] < 0)
-     {
-         post("*Warning* The baud rate %d is not supported or out of range, using 9600\n",*baud);
-         i = 8;
-     }
-     *baud =  baudratetable[i];
- 
-     return baudspeedbittable[i];
- }
  
  
--- 274,277 ----
***************
*** 268,272 ****
  static float set_baudrate(t_comport *x,t_float baud)
  {
!     x->dcb.BaudRate = get_baud_ratebits(&baud);
      return baud;
  }
--- 285,289 ----
  static float set_baudrate(t_comport *x,t_float baud)
  {
!     x->dcb.BaudRate = (DWORD)baud ;//!!!try directly setting any baud rate...was get_baud_ratebits(&baud);
      return baud;
  }
***************
*** 374,377 ****
--- 391,402 ----
  {
      if (SetCommState(x->comhandle, &(x->dcb))) return 1;
+     /* Didn't work. Get the actual state of the device */
+     GetCommState(x->comhandle, &(x->dcb));
+     x->baud = x->dcb.BaudRate;
+     x->data_bits = x->dcb.ByteSize;
+     x->parity_bit = x->dcb.fParity;
+     x->stop_bits = x->dcb.StopBits;
+     x->xonxoff = (x->dcb.fOutX)?1:0;
+     x->ctsrts = (x->dcb.fOutxCtsFlow)?1:0;
      return 0;
  }
***************
*** 583,590 ****
  
  
! static float set_baudrate(t_comport *x,t_float baud)
  {
      struct termios  *tio = &(x->com_termio);
!     long            baudbits = get_baud_ratebits(&baud);
  
      cfsetispeed(tio, baudbits);
--- 608,632 ----
  
  
! static long get_baud_ratebits(t_float *baud)
! {
!     int i = 0;
! 
!     while(i < BAUDRATETABLE_LEN && baudratetable[i] > *baud) i++;
! 
!     /* nearest Baudrate finding */
!     if(i==BAUDRATETABLE_LEN ||  baudspeedbittable[i] < 0)
!     {
!         post("*Warning* The baud rate %d is not supported or out of range, using 9600\n",*baud);
!         i = 8;
!     }
!     *baud =  baudratetable[i];
! 
!     return baudspeedbittable[i];
! }
! 
! static float set_baudrate(t_comport *x, t_float baud)
  {
      struct termios  *tio = &(x->com_termio);
!     speed_t            baudbits = get_baud_ratebits(&baud);
  
      cfsetispeed(tio, baudbits);





More information about the Pd-cvs mailing list