#ifndef __SERIAL_T_H__
#define __SERIAL_T_H__

#include <string.h>
#include <malloc.h>
#include <ctype.h>

#ifndef WIN32
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/time.h>
#ifndef __USE_MISC
#define __USE_MISC
#endif
#include <errno.h>
#include <termios.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#endif

#ifdef WIN32
#define dev_t               HANDLE
#else
#define dev_t               int
#endif

#define SERIAL_MODE_R  0x1                 /* stream mode: read */
#define SERIAL_MODE_W  0x2                 /* stream mode: write */
#define SERIAL_MODE_RW 0x3                 /* stream mode: read/write */

/* type definition -----------------------------------------------------------*/
typedef struct {            /* serial control type */
    dev_t dev;              /* serial device */
    int error;              /* error state */
} serial_t;

#ifdef __cplusplus
extern "C" {
#endif


#ifdef WIN_DLL
#define EXPORT __declspec(dllexport) /* for Windows DLL */
#else
#define EXPORT
#endif

/* open serial ---------------------------------------------------------------*/
EXPORT extern serial_t *openserial(const char *path, int mode, char *msg);

/* close serial --------------------------------------------------------------*/
EXPORT extern void closeserial(serial_t *serial);

/* read serial ---------------------------------------------------------------*/
EXPORT extern int readserial(serial_t *serial, unsigned char *buff, int n, char *msg);

/* write serial --------------------------------------------------------------*/
EXPORT extern int writeserial(serial_t *serial, unsigned char *buff, int n, char *msg);

/* get state serial ----------------------------------------------------------*/
EXPORT extern int stateserial(serial_t *serial);

#ifdef __cplusplus
}
#endif

#endif



