summaryrefslogtreecommitdiff
path: root/sbin/nmeaattach/nmeaattach.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/nmeaattach/nmeaattach.c')
-rw-r--r--sbin/nmeaattach/nmeaattach.c166
1 files changed, 0 insertions, 166 deletions
diff --git a/sbin/nmeaattach/nmeaattach.c b/sbin/nmeaattach/nmeaattach.c
deleted file mode 100644
index eade0e029fa..00000000000
--- a/sbin/nmeaattach/nmeaattach.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* $OpenBSD: nmeaattach.c,v 1.9 2007/10/13 16:28:24 mbalmer Exp $ */
-/*
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- * Copyright (c) 2006 Marc Balmer <mbalmer@openbsd.org>
- *
- * This code is derived from software contributed to Berkeley by
- * Rick Adams.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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.
- */
-
-#include <sys/ioctl.h>
-#include <sys/ttycom.h>
-
-#include <err.h>
-#include <fcntl.h>
-#include <paths.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <termios.h>
-#include <unistd.h>
-
-int speed = B4800;
-
-char devicename[32];
-
-__dead void usage(void);
-void coroner(int);
-
-volatile sig_atomic_t dying = 0;
-
-__dead void
-usage(void)
-{
- extern char *__progname;
-
- fprintf(stderr, "usage: %s [-dhm] [-s baudrate] [-t cond] device\n",
- __progname);
- exit(1);
-}
-
-int
-main(int argc, char *argv[])
-{
- int fd;
- char *dev;
- struct termios tty;
- struct tstamps tstamps;
- const char *errstr;
- tcflag_t cflag = HUPCL;
- int ch;
- sigset_t sigset;
- int nmeadisc = NMEADISC;
- int nodaemon = 0;
-
- tstamps.ts_set = tstamps.ts_clr = 0;
-
- while ((ch = getopt(argc, argv, "dhms:t:")) != -1) {
- switch (ch) {
- case 'd':
- nodaemon = 1;
- break;
- case 'h':
- cflag |= CRTSCTS;
- break;
- case 'm':
- cflag &= ~HUPCL;
- break;
- case 's':
- speed = (int)strtonum(optarg, 50, 115200, &errstr);
- if (errstr)
- errx(1, "speed is %s: %s", errstr, optarg);
- break;
- case 't':
- if (!strcasecmp(optarg, "dcd"))
- tstamps.ts_set |= TIOCM_CAR;
- else if (!strcasecmp(optarg, "!dcd"))
- tstamps.ts_clr |= TIOCM_CAR;
- else if (!strcasecmp(optarg, "cts"))
- tstamps.ts_set |= TIOCM_CTS;
- else if (!strcasecmp(optarg, "!cts"))
- tstamps.ts_clr |= TIOCM_CTS;
- else
- errx(1, "'%s' not supported for timestamping",
- optarg);
- break;
- default:
- usage();
- }
- }
- argc -= optind;
- argv += optind;
-
- if (argc != 1)
- usage();
-
- dev = *argv;
- if (strncmp(_PATH_DEV, dev, sizeof(_PATH_DEV) - 1)) {
- (void)snprintf(devicename, sizeof(devicename),
- "%s%s", _PATH_DEV, dev);
- dev = devicename;
- }
- if ((fd = open(dev, O_RDWR)) < 0)
- err(1, "open: %s", dev);
-
- tty.c_cflag = CREAD | CS8 | cflag;
- tty.c_iflag = 0;
- tty.c_lflag = 0;
- tty.c_oflag = 0;
- tty.c_cc[VMIN] = 1;
- tty.c_cc[VTIME] = 0;
- cfsetspeed(&tty, speed);
- if (tcsetattr(fd, TCSADRAIN, &tty) < 0)
- err(1, "tcsetattr");
- if (ioctl(fd, TIOCSDTR, 0) < 0)
- warn("TIOCSDTR");
- if (ioctl(fd, TIOCSETD, &nmeadisc) < 0)
- err(1, "TIOCSETD");
- if (ioctl(fd, TIOCSTSTAMP, &tstamps) < 0)
- err(1, "TIOCSTSTAMP");
-
- if (!nodaemon && daemon(0, 0))
- errx(1, "can't daemonize");
-
- signal(SIGHUP, coroner);
- signal(SIGTERM, coroner);
-
- sigemptyset(&sigset);
- for (;;) {
- sigsuspend(&sigset);
- if (dying)
- return 0;
- }
-}
-
-/* ARGSUSED */
-void
-coroner(int useless)
-{
- dying = 1;
-}