/*-
// ==========================================================================
// Copyright (C) 1995 - 2006 Autodesk, Inc., and/or its licensors.  All 
// rights reserved.
// 
// The coded instructions, statements, computer programs, and/or related 
// material (collectively the "Data") in these files contain unpublished 
// information proprietary to Autodesk, Inc. ("Autodesk") and/or its 
// licensors,  which is protected by U.S. and Canadian federal copyright law 
// and by international treaties.
// 
// The Data may not be disclosed or distributed to third parties or be 
// copied or duplicated, in whole or in part, without the prior written 
// consent of Autodesk.
// 
// The copyright notices in the Software and this entire statement, 
// including the above license grant, this restriction and the following 
// disclaimer, must be included in all copies of the Software, in whole 
// or in part, and all derivative works of the Software, unless such copies 
// or derivative works are solely in the form of machine-executable object 
// code generated by a source language processor.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. 
// AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED 
// WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF 
// NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, 
// OR ARISING FROM A COURSE OF DEALING, USAGE, OR TRADE PRACTICE. IN NO 
// EVENT WILL AUTODESK AND/OR ITS LICENSORS BE LIABLE FOR ANY LOST 
// REVENUES, DATA, OR PROFITS, OR SPECIAL, DIRECT, INDIRECT, OR 
// CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK AND/OR ITS LICENSORS HAS 
// BEEN ADVISED OF THE POSSIBILITY OR PROBABILITY OF SUCH DAMAGES. 
// ==========================================================================
*/

/*
 * mocapserial.h - Definitions for handling serial lines for motion
 *		 capture servers for Maya
 */

#if !defined(__CAPSERIAL_H__)
#define __CAPSERIAL_H__ 1

#ifndef _WIN32
#include <termios.h>
#else
#define termios _DCB
#endif

/*
 * Enumerated types
 */

typedef enum CapParity
{
  CAP_PARITY_EVEN,
  CAP_PARITY_ODD,
  CAP_PARITY_NONE,
  _CAP_PARITY_LAST
} CapParity;

typedef enum CapSerialMode
{
  CAP_SERIAL_ASCII,
  CAP_SERIAL_BINARY,
  _CAP_MODE_LAST
} CapSerialMode;

/*
 * Figure out if we should use prototypes or not
 */

#if !defined(_PROTO)
#if defined(PROTOTYPES) || defined(FUNCPROTO) || defined(__STDC__) || defined(__EXTENSIONS__) || defined(__cplusplus)
#define _PROTO(x)	x
#else
#define _PROTO(x)	()
#endif
#endif // !defined(_PROTO)

/*
 * Capture library serial routines function declarations/prototypes
 */

/*
 * Open a serial port and return a file descriptor
 */
int	CapSerialOpen _PROTO((char *tty, int baud, int data, CapParity parity,
			  int stop, CapSerialMode mode,
			  struct termios *save_attr));

/*
 * Reset a serial port to its default attributes
 */
int	CapSerialReset _PROTO((int tty_fd, struct termios *attr));

/*
 * Read n bytes (even from a serial line)
 */
int	CapSerialRead _PROTO((int tty_fd, void *buf, size_t nbytes));

/*
 * Read n bytes (even from a serial line) with a possible timeout
 */
int	CapSerialReadTimeout _PROTO((int tty_fd, void *buf,
                                        size_t nbytes, int msec));

/*
 * Write n bytes (even from a serial line)
 */
int	CapSerialWrite _PROTO((int tty_fd, void *buf, size_t nbytes));

#endif /* __CAPSERIAL_H__ */
