/*
 * reseter.c v0x1 by vnull ( vnull@pcnet.com.pl ) 2003
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ezV24/ezV24.h>

#define PORT "/dev/ttyS1"
#define WAIT_TIME 2 /* in seconds */

#define M_DEFAULT 	0x0 /* first off then on */
#define M_ONLY_ON 	0x1
#define M_ONLY_OFF 	0x2

int main(int argc, char **argv)
{
	v24_port_t *com;
	char cmdon[16];
	char cmdoff[16];
	int mode = M_DEFAULT;

	if(argc < 2) {
		printf("reseter v0x1 by vnull ( vnull@pcnet.com.pl ) 2003\n");
		printf("usage: %s <device_id> [on/off]\n", argv[0]);
		printf("\t<device_id>\t\t-id or all\n\n");
		return -1;
	}
	
	if(!strcmp(argv[1], "all")) {
		strcpy(cmdon, "on a\n");
		strcpy(cmdoff, "off a\n");
	} else {
		int id;
		id = atoi(argv[1]);
		if(id < 1 || id > 6) {
			printf("bad device_id\n");
			return 1;
		}
		snprintf(cmdon, sizeof(cmdon)-1, "on %d\n", id);
		snprintf(cmdoff, sizeof(cmdoff)-1, "off %d\n", id);
	}

	if(argc == 3) {
		if(!strcmp(argv[2], "on")) {
			mode = M_ONLY_ON;		
		} else if(!strcmp(argv[2], "off")) {
			mode = M_ONLY_OFF;
		} else {
			printf("unknown option: only \"on\" or \"off\"\n");
			return 2;
		}
	}

	com = v24OpenPort(PORT, V24_XON_XOFF);
	if(com == NULL) {
		printf("init com failed!\n");
		return -1;
	}	

	v24SetParameters(com, V24_B9600, V24_8BIT, V24_NONE);

	if(mode == M_DEFAULT || mode == M_ONLY_OFF) {
		v24Write(com, cmdoff, strlen(cmdoff));
	}

	if(mode == M_DEFAULT || mode == M_ONLY_ON) {
		sleep(WAIT_TIME);
		v24Write(com, cmdon, strlen(cmdon));
	}

	sleep(1);
	v24ClosePort(com);
	return 0;
}

