⬢ DragonFlyBSD Kernel Audit
DF-5642 / df5642ctl.c
← back to finding ↓ download raw
/*
 * df5642ctl.c -- userland driver for /dev/df5642 (DF-5642/5643 rig).
 */
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define DF5642_STAT	_IOWR('d', 1, int)
#define DF5642_CYCLE	_IOWR('d', 2, int)
#define DF5642_GRAB	_IOWR('d', 3, int)
#define DF5642_VETO	_IOWR('d', 4, int)
#define DF5642_RELFREE	_IOWR('d', 5, int)
#define DF5642_PARK	_IOWR('d', 6, int)
#define DF5642_WAKUAF	_IOWR('d', 7, int)

static void
usage(void)
{
	fprintf(stderr, "usage: df5642ctl stat|cycle N|grab|veto|relfree|park|wakuaf\n");
	exit(2);
}

int
main(int argc, char **argv)
{
	int fd, arg, rc;
	unsigned long cmd;

	if (argc < 2)
		usage();
	if (!strcmp(argv[1], "stat"))
		cmd = DF5642_STAT;
	else if (!strcmp(argv[1], "cycle")) {
		if (argc < 3)
			usage();
		cmd = DF5642_CYCLE;
	} else if (!strcmp(argv[1], "grab"))
		cmd = DF5642_GRAB;
	else if (!strcmp(argv[1], "veto"))
		cmd = DF5642_VETO;
	else if (!strcmp(argv[1], "relfree"))
		cmd = DF5642_RELFREE;
	else if (!strcmp(argv[1], "park"))
		cmd = DF5642_PARK;
	else if (!strcmp(argv[1], "wakuaf"))
		cmd = DF5642_WAKUAF;
	else
		usage();

	arg = (cmd == DF5642_CYCLE) ? atoi(argv[2]) : 0;

	fd = open("/dev/df5642", O_RDWR);
	if (fd < 0) {
		perror("open /dev/df4642");
		return (1);
	}
	rc = ioctl(fd, cmd, &arg);
	if (rc < 0) {
		perror("ioctl");
		close(fd);
		return (1);
	}
	printf("ctl: %s -> ioctl ok, ret=%d\n", argv[1], arg);
	close(fd);
	return (0);
}