#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <time.h>

#include "driver/s2253ioctl.h"


int main (int argc, char * argv[])
{
	int fd, rc;
	char msg[256];
	int logioc = S2253_VIDIOC_LOG;
	char *devname = "/dev/video0";
	char level = 127;
	if (argc >= 2) {
		if (strcmp(argv[1], "-k") == 0) {
			logioc = S2253_VIDIOC_KLOG;
			level = '6';
		} else if (strcmp(argv[1], "-d") == 0) {
			logioc = S2253_VIDIOC_DEBUG;
		} else {
			devname = argv[1];
		}
	}

	fprintf(stderr, "--- Trying to open %s ---\n", devname);
	while (1) {
		fd = open(devname, O_RDWR);
		if (fd < 0) {
			sleep(1);
			continue;
		}
		fprintf(stderr, "--- Connected ---\n");
		while (ioctl(fd, logioc, msg) >= 0) {
			if (msg[0]) {
				if (msg[1] <= level) {
					printf("%s", msg);
					fflush(stdout);
				}
			} else {
				struct timespec ts = {0, 100000000}; //100ms

				nanosleep(&ts, NULL);
			}
		}
		fprintf(stderr, "--- Disconnected ---\n");
		close(fd);
		sleep(1);
	}
	return 0;

#if 0
	printf("Device Log:\n\n");
	do {
		msg[0] = 0;
		ioctl(fd, S2253_VIDIOC_LOG, msg);
		if (msg[0])
			printf("%s", msg);
	} while (msg[0]);

	printf("\n\nDevice Kernel Log:\n\n");
	do {
		msg[0] = 0;
		ioctl(fd, S2253_VIDIOC_KLOG, msg);
		if (msg[0])
			printf("%s", msg);
	} while (msg[0]);
	printf("\n\nDevice Debug Message:\n\n");
	msg[0] = 0;
	ioctl(fd, S2253_VIDIOC_DEBUG, msg);
	if (msg[0])
		printf("%s\n", msg);

	close(fd);
	return 0;
#endif
}
