mbusd/src/tty.h

128 lines
3.7 KiB
C

/*
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
*
* tty.h - terminal I/O related procedures
*
* Copyright (c) 2002-2003, 2013, Victor Antonovich (v.antonovich@gmail.com)
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: tty.h,v 1.4 2015/02/25 10:33:58 kapyar Exp $
*/
#ifndef _TTY_H
#define _TTY_H
#include "globals.h"
#include "cfg.h"
/*
* Delay value calculation macros.
* c - number of characters
* b - bits per character
* s - bits per second
*/
#define DV(c, b, s) (c * b * 1000000l / s)
/*
* Default tty port parameters
*/
#if defined (__CYGWIN__)
# define DEFAULT_PORT "/dev/COM1"
#elif defined (__linux__)
# define DEFAULT_PORT "/dev/ttyS0"
#else
# define DEFAULT_PORT "/dev/cuaa0"
#endif
#define DEFAULT_SPEED 19200
#define DEFAULT_BSPEED B19200
#define DEFAULT_MODE "8N1"
#define DEFAULT_BITS_PER_CHAR 10
/*
* Maximum tty buffer size
*/
#define TTY_BUFSIZE 256
/*
* TRX control types
*/
#ifdef TRXCTL
#define TRX_ADDC 0
#define TRX_RTS 1
#define TRX_SYSFS_1 2
#define TRX_SYSFS_0 3
#endif
/*
* TTY device FSM states
*/
#define TTY_PAUSE 0
#define TTY_READY 1
#define TTY_RQST 2
#define TTY_RESP 3
#define TTY_PROC 4
/*
* TTY related data storage structure
*/
typedef struct
{
int fd; /* tty file descriptor */
int speed; /* serial port speed */
char *port; /* serial port device name */
int bpc; /* bits per character */
#ifdef TRXCTL
int trxcntl; /* trx control type (enum - see values in config.h) */
#endif
struct termios tios; /* working termios structure */
struct termios savedtios; /* saved termios structure */
int state; /* current state */
unsigned int trynum; /* try counter */
unsigned long timer; /* time tracking variable */
unsigned int txlen; /* tx data length */
unsigned int rxlen; /* rx data length */
unsigned char ptrbuf; /* ptr in the buffer */
unsigned char rxoffset; /* ptr in the buffer */
unsigned char txbuf[TTY_BUFSIZE]; /* transmitting buffer */
unsigned char rxbuf[TTY_BUFSIZE]; /* receiving buffer */
} ttydata_t;
/* prototypes */
void tty_sighup(void);
void tty_init(ttydata_t *mod);
int tty_open(ttydata_t *mod);
int tty_set_attr(ttydata_t *mod);
speed_t tty_transpeed(int speed);
int tty_cooked(ttydata_t *mod);
int tty_close(ttydata_t *mod);
void tty_set_rts(int fd);
void tty_clr_rts(int fd);
void tty_delay(int usec);
#endif /* _TTY_H */