Logo Search packages:      
Sourcecode: hamlib version File versions

win32termios.h

/*-------------------------------------------------------------------------
|   rxtx is a native interface to serial ports in java.
|   Copyright 1997-2002 by Trent Jarvi taj@www.linux.org.uk.
|
|   This library is free software; you can redistribute it and/or
|   modify it under the terms of the GNU Library General Public
|   License as published by the Free Software Foundation; either
|   version 2 of the License, or (at your option) any later version.
|
|   If you compile this program with cyg tools this package falls
|   under the GPL.  See COPYING.CYGNUS for details.
|
|   This library is distributed in the hope that it will be useful,
|   but WITHOUT ANY WARRANTY; without even the implied warranty of
|   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
|   Library General Public License for more details.
|
|   You should have received a copy of the GNU Library General Public
|   License along with this library; if not, write to the Free
|   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
|
| This file was taken from rxtx-2.1-7pre16 and adaptated for Hamlib.
--------------------------------------------------------------------------*/

#ifndef _WIN32S_H_
#define _WIN32S_H_
#include <windows.h>
#include <sys/types.h>
#include <io.h>
#ifdef TRACE
#define ENTER(x) report("entering "x" \n");
#define LEAVE(x) report("leaving "x" \n");
#else
#define ENTER(x)
#define LEAVE(x)
#endif /* TRACE */
#define YACK() \
{ \
      char *allocTextBuf, message[80]; \
      unsigned long nChars; \
      unsigned int errorCode = GetLastError(); \
      nChars = FormatMessage ( \
            FORMAT_MESSAGE_ALLOCATE_BUFFER | \
            FORMAT_MESSAGE_FROM_SYSTEM, \
            NULL, \
            errorCode, \
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), \
            (LPSTR)&allocTextBuf, \
            16, \
            NULL ); \
      sprintf( message, "Error 0x%x at %s(%d): %s\n", errorCode, __FILE__, __LINE__, allocTextBuf); \
      report_error( message ); \
      LocalFree(allocTextBuf); \
}

typedef unsigned char   cc_t;
typedef unsigned int    speed_t;
typedef unsigned int    tcflag_t;

/* structs are from linux includes or linux man pages to match
   interfaces.
*/

struct timespec
{
      time_t      tv_sec;
      long  tv_nsec;
};

#define NCCS 32
struct termios
  {
    tcflag_t c_iflag;           /* input mode flags */
    tcflag_t c_oflag;           /* output mode flags */
    tcflag_t c_cflag;           /* control mode flags */
    tcflag_t c_lflag;           /* local mode flags */
    cc_t c_cc[NCCS];            /* control characters */
    cc_t c_line;                /* line discipline (== c_cc[33]) */
    speed_t c_ispeed;           /* input speed */
    speed_t c_ospeed;           /* output speed */
  };

/*  for TIOCGSERIAL and TIOCSSERIAL of interest are baud_base and
 *  custom_divisor
 *  --- NOTE:  This is not used.  Win32 sets custom speeds on the
 *             kernel side.
 */
struct serial_struct {
/*
      Mainly we are after baud_base/custom_diviser to match
      the ioctl() in SerialImp.c
*/
      int custom_divisor;   /* use to set unsupported speeds */
      int baud_base;        /* use to set unsupported speeds */

      unsigned short    close_delay, closing_wait, iomem_reg_shift;
      int type, line, irq, flags, xmit_fifo_size, hub6;
      unsigned int      port, port_high;
      char        io_type;
      unsigned char     *iomem_base;
};
struct serial_icounter_struct {
      int cts;          /* clear to send count */
      int dsr;          /* data set ready count */
      int rng;          /* ring count */
      int dcd;          /* carrier detect count */
      int rx;                 /* recieved byte count */
      int tx;                 /* transmitted byte count */
      int frame;        /* frame error count */
      int overrun;            /* hardware overrun error count */
      int parity;       /* parity error count */
      int brk;          /* break count */
      int buf_overrun;  /* buffer overrun count */
      int reserved[9];  /* unused */
};

int win32_serial_test( char * );
int win32_serial_open(const char *File, int flags, ... );
int win32_serial_close(int fd);
int win32_serial_read(int fd, void *b, int size);
int win32_serial_write(int fd, const char *Str, int length);
int win32_serial_ioctl(int fd, int request, ... );
/*
 * lcc winsock.h conflicts
 */
#ifndef __LCC__
int win32_serial_select(int, struct fd_set *, struct fd_set *, struct fd_set *, struct timeval *);
#define SELECT win32_serial_select
#endif

#define OPEN win32_serial_open
#define CLOSE win32_serial_close
#define READ win32_serial_read
#define WRITE win32_serial_write
#define IOCTL win32_serial_ioctl

void termios_interrupt_event_loop( int , int );
void termios_setflags( int , int[] );
struct termios_list *find_port( int );
int usleep(unsigned long usec);
int fcntl(int fd, int command, ...);
const char *get_dos_port(const char *);
void set_errno(int);
char *sterror(int);
int B_to_CBR(int);
int CBR_to_B(int);
int termios_to_bytesize(int);
int bytesize_to_termios(int);
int tcgetattr(int Fd, struct termios *s_termios);
int tcsetattr(int Fd, int when, struct termios *);
speed_t cfgetospeed(struct termios *s_termios);
speed_t cfgetispeed(struct termios *s_termios);
int cfsetspeed(struct termios *, speed_t speed);
int cfsetospeed(struct termios *, speed_t speed);
int cfsetispeed ( struct termios *, speed_t speed);
int tcflush ( int , int );
int tcgetpgrp ( int );
int tcsetpgrp ( int , int );
int tcdrain ( int );
int tcflow ( int , int );
int tcsendbreak ( int , int );
/*
int fstat(int fd, ... );
*/
void cfmakeraw(struct termios *s_termios);
int termiosGetParityErrorChar( int );
void termiosSetParityError( int, char );

#define O_NOCTTY  0400  /* not for fcntl */
#define O_NONBLOCK       00004
#define O_NDELAY  O_NONBLOCK
#define O_SYNC          040000
#define O_FSYNC         O_SYNC
#define O_ASYNC         020000      /* fcntl, for BSD compatibility */

#define F_DUPFD         0     /* dup */
#define F_GETFD         1     /* get f_flags */
#define F_SETFD         2     /* set f_flags */
#define F_GETFL         3     /* more flags (cloexec) */
#define F_SETFL         4
#define F_GETLK         7
#define F_SETLK         8
#define F_SETLKW  9

#define F_SETOWN  5     /*  for sockets. */
#define F_GETOWN  6     /*  for sockets. */

/* for F_[GET|SET]FL */
#define FD_CLOEXEC      1     /* actually anything with low bit set goes */

/* for posix fcntl() and lockf() */
#define F_RDLCK         1
#define F_WRLCK         2
#define F_UNLCK         8

/* for old implementation of bsd flock () */
#define F_EXLCK         16    /* or 3 */
#define F_SHLCK         32    /* or 4 */

/* operations for bsd flock(), also used by the kernel implementation */
#define LOCK_SH         1     /* shared lock */
#define LOCK_EX         2     /* exclusive lock */
#define LOCK_NB         4     /* or'd with one of the above to prevent
                           blocking */
#define LOCK_UN         8     /* remove lock */

/* c_cc characters */
#define VINTR 0
#define VQUIT 1
#define VERASE 2
#define VKILL 3
#define VEOF 4
#define VTIME 5
#define VMIN 6
#define VSWTC 7
#define VSTART 8
#define VSTOP 9
#define VSUSP 10
#define VEOL 11
#define VREPRINT 12
#define VDISCARD 13
#define VWERASE 14
#define VLNEXT 15
#define VEOL2 16

/* c_iflag bits */
#define IGNBRK    0000001
#define BRKINT    0000002
#define IGNPAR    0000004
#define PARMRK    0000010
#define INPCK     0000020
#define ISTRIP    0000040
#define INLCR     0000100
#define IGNCR     0000200
#define ICRNL     0000400
#define IXON      0002000
#define IXANY     0004000
#define IXOFF     0010000
#define IMAXBEL      0020000
#define CRTS_IFLOW 0040000
#define CCTS_OFLOW      0100000
#define CIGNORE         0400000
#define CRTSCTS     020000000000          /* flow control */
#define HARDWARE_FLOW_CONTROL CRTSCTS
#define CRTSXOFF        010000000000
/* c_oflag bits */
#define OPOST     0000001
#define ONLCR     0000002
#define OLCUC     0000004

#define OCRNL     0000010
#define ONOCR     0000020
#define ONLRET    0000040

#define OFILL     00000100
#define OFDEL     00000200
#define NLDLY     00001400
#define   NL0     00000000
#define   NL1     00000400
#define   NL2     00001000
#define   NL3     00001400
#define TABDLY    00006000
#define   TAB0    00000000
#define   TAB1    00002000
#define   TAB2    00004000
#define   TAB3    00006000
#define CRDLY     00030000
#define   CR0     00000000
#define   CR1     00010000
#define   CR2     00020000
#define   CR3     00030000
#define FFDLY     00040000
#define   FF0     00000000
#define   FF1     00040000
#define BSDLY     00100000
#define   BS0     00000000
#define   BS1     00100000
#define VTDLY     00200000
#define   VT0     00000000
#define   VT1     00200000
#define XTABS     01000000 /* Hmm.. Linux/i386 considers this part of TABDLY.. */

/* c_cflag bit meaning */
# define CBAUD    0010017
#define  B0 0000000           /* hang up */
#define  B50      0000001
#define  B75      0000002
#define  B110     0000003
#define  B134     0000004
#define  B150     0000005
#define  B200     0000006
#define  B300     0000007
#define  B600     0000010
#define  B1200    0000011
#define  B1800    0000012
#define  B2400    0000013
#define  B4800    0000014
#define  B9600    0000015
#define  B19200   0000016
#define  B38400   0000017
#define  B57600     0010001
#define  B115200  0010002
#define  B230400  0010003
#define  B460800  0010004
#define  B500000  0010005
#define  B576000  0010006
#define  B921600  0010007
#define  B1000000 0010010
#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#define  B4000000 0010017

/* glue for unsupported linux speeds see also SerialImp.h.h */

#define B14400          1010001
#define B28800          1010002
#define B128000         1010003
#define B256000         1010004

#define EXTA B19200
#define EXTB B38400
#define CSIZE     0000060
#define   CS5     0000000
#define   CS6     0000020
#define   CS7     0000040
#define   CS8     0000060
#define CSTOPB    0000100
#define CREAD     0000200
#define PARENB    0000400
#define PARODD    0001000
#define HUPCL     0002000
#define CLOCAL    0004000
# define CBAUDEX 0010000
# define CIBAUD     002003600000          /* input baud rate (not used) */
# define CRTSCTS  020000000000            /* flow control */

/* c_l flag */
#define ISIG    0000001
#define ICANON  0000002
#define XCASE   0000004
#define ECHO    0000010
#define ECHOE   0000020
#define ECHOK   0000040
#define ECHONL  0000100
#define NOFLSH  0000200
#define TOSTOP  0000400
#define ECHOCTL 0001000
#define ECHOPRT 0002000
#define ECHOKE  0004000
#define FLUSHO  0010000
#define PENDIN  0040000
#define IEXTEN  0100000

/* glue for unsupported windows speeds */

#define CBR_230400      230400
#define CBR_28800 28800
#define CBR_460800      460800
#define CBR_500000      500000
#define CBR_576000      576000
#define CBR_921600      921600
#define CBR_1000000     1000000
#define CBR_1152000     1152000
#define CBR_1500000     1500000
#define CBR_2000000     2000000
#define CBR_2500000     2500000
#define CBR_3000000     3000000
#define CBR_3500000     3500000
#define CBR_4000000     4000000


/* Values for the ACTION argument to `tcflow'.  */
#define     TCOOFF            0
#define     TCOON       1
#define     TCIOFF            2
#define     TCION       3

/* Values for the QUEUE_SELECTOR argument to `tcflush'.  */
#define     TCIFLUSH    0
#define     TCOFLUSH    1
#define     TCIOFLUSH   2

/* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'.  */
#define     TCSANOW           0
#define     TCSADRAIN   1
#define     TCSAFLUSH   2

/* ioctls */
#define TIOCSERGETLSR   0x5459

#endif /*_WIN32S_H_*/

/* unused ioctls */
#define TCSBRK          0x5409
#define TIOCCBRK  0x540a
#define TIOCSBRK  0x540b
#define TIOCOUTQ  0x5411
#define TIOCMGET  0x5415
#define TIOCMBIS  0x5416
#define TIOCMBIC  0x5417
#define TIOCMSET  0x5418
#define TIOCGSOFTCAR    0x5419
#define TIOCSSOFTCAR    0x541a
#define TIOCSER_TEMP    0x01
/*
#define FIONREAD  0x541b
TIOC[GS]SERIAL is not used on win32.  It was dropped after we could not
find a way to get/set buad_base and divisor directly.
#define TIOCGSERIAL     0x541e
#define TIOCSSERIAL     0x541f
*/
#define TCSBRKP         0x5425
#define TIOCSERCONFIG   0x5453
#define TIOCSERGWILD    0x5454
#define TIOCSERSWILD    0x5455
#define TIOCSERGSTRUCT  0x5458
#define TIOCSERGETMULTI 0x545a
#define TIOCSERSETMULTI 0x545b
#define TIOCMIWAIT      0x545c
/* this would require being able to get the number of overruns ... */
/*
      FIXME
      frame and parity errors caused crashes in testing BlackBox
*/
#define TIOCGICOUNT     0x545d

/* ioctl errors */
#define ENOIOCTLCMD     515
#define EBADFD           77
/* modem lines */
#define TIOCM_LE    0x001
#define TIOCM_DTR   0x002
#define TIOCM_RTS   0x004
#define TIOCM_ST    0x008
#define TIOCM_SR    0x010
#define TIOCM_CTS   0x020
#define TIOCM_CAR   0x040
#define TIOCM_RNG   0x080
#define TIOCM_DSR   0x100
#define TIOCM_CD    TIOCM_CAR
#define TIOCM_RI    TIOCM_RNG


#define CMSPAR      010000000000  /* mark or space parity */

Generated by  Doxygen 1.6.0   Back to index