/* ======================================================================
**
** Serial IO include file
**
** History:
**       Date       Who      Description
**      ---------   ---      --------------------------------------------
**      07/22/2003  SL       Create from SeaBed io.h (serial io subset)
** ======================================================================
*/
#ifndef SERIAL_IO_INCLUDE_H
#define SERIAL_IO_INCLUDE_H

#include <fcntl.h>      /* file control definitions           */
#include <termios.h>    /* POSIX terminal control definitions */

typedef struct {
  char port_str[80];       /* Port description - set in open*/

  //Serial IO
  char *port;              /* eg: /dev/ttyS0                */
  int  port_fd;            /* port file descriptor for r/w  */
  int  block;              /* 1-blocking, 0-non blocking    */
  int  baud;               /* 9600,19200,...    def:9600    */
  int  nbits;              /* data bits 7,8     def:8       */
  char parity;             /* N-no,E-even,O-odd def:N       */
  int  sbits;              /* stop bits 0,1,2   def:1       */
  int  flowctl;	   	   /* 0-none,1-xonxoff,2-rtscts,3-onoff-rtscts def:0 */
  int  canonical;          /* 1-canonical 0-raw mode  def:0 */
  char terminator;         /* line terminator   default:'\n'*/
  int  echo;               /* 1-on, 0-off  default: 0       */
  int  vtime;              /* Time to wait for data (tenths of secs) def: 0*/
  int  vmin;               /* Minimum number of chars to read def: 1*/

  //Misc
  int vlevel;

} io_cfg_t;


extern int open_io_port(io_cfg_t *io);
extern int read_io_port(io_cfg_t *io, char *buf, int buf_len, int vlevel);
extern int write_io_port(io_cfg_t *io, char *buf, int buf_len, int vlevel);
extern int close_io_port(io_cfg_t *io);
extern int valid_io_descriptor(io_cfg_t *io);
extern void init_io_cfg(io_cfg_t *io);

extern int open_sensor_port(int id, io_cfg_t *cfg);
extern int set_serial_port(io_cfg_t *io);

extern int write_to_port(int fd, char *msg, int msg_length, int vlevel);
extern int read_port(int fd, char *buff, int buff_length, int vlevel);
extern void close_port(int fd, int vlevel);
extern void send_break(int fd, int duration);

#endif /* SERIAL_IO_INCLUDE_H */



