/* send serial data to Smartsocket */

#include    <stdio.h>
#include    <fcntl.h>
#include    <errno.h>
#include    <stdlib.h>
#include    <unistd.h>
#include    <termios.h>

#define     SPEED           B9600

static const char * Readwrite = "r+";
static const char * Serial    = "/dev/cu.KeySerial1";

int
main(
    int             argc,       /* argument count */
    char **         argv)       /* argument vector */
{
    int             fd;         /* file descriptor */
    FILE *          fp;         /* file pointer */
    struct termios  termios;    /* terminal I/O control */

    if (argc > 1) {
        Serial = argv[1];
    }

    fd = open(Serial, O_RDWR);

    if (fd < 0) {
        fprintf(stderr, "can't open %s", Serial);
        exit(errno);
    }

    if (tcgetattr(fd, &termios) < 0) {
        fprintf(stderr, "couldn't get serial parameters from %s", Serial);
        exit(errno);
    }

    termios.c_oflag     = 0;
    termios.c_lflag     = 0;
    termios.c_cflag     = CS8 | CREAD | CLOCAL;
    termios.c_cc[VMIN]  = 1;
    termios.c_cc[VTIME] = 0;

    cfsetospeed(&termios, SPEED);
    cfsetispeed(&termios, SPEED);

    if (tcsetattr(fd, TCSANOW | TCSAFLUSH, &termios) < 0) {
        fprintf(stderr, "couldn't set serial parameters for %s", Serial);
        exit(errno);
    }

    printf("serial port configured\n");

    fp = fdopen(fd, Readwrite);

    if (fp == NULL) {
        fprintf(stderr, "can't open %s", Serial);
        exit(EXIT_FAILURE);
    }

    for (;;) {
        printf("sending command...\n");
        fprintf(fp, "MS");  /* send command in ASCII */
        putc(100, fp);      /* send parameters in direct binary values */
        putc(4, fp);
        putc(1, fp);
        /* send ASCII to display */
        fprintf(fp, "IV-17 Smartsocket driven by Unix, test OK  ");
        printf("sent command\n");
        sleep(20);  /* wait for 20 sec before re-running commands */
    }

    exit(EXIT_SUCCESS);
}
