
#include <stdio.h>

#include "videoserver.h"
#include "video_conf.h"

static SWTR_ptr		swtr;
static VCONF_DEVTABLE	vdt;

main(argc,argv)

	int	argc;
	char	*argv[];
{
	int	i, swtr_index;
	int	reqtype;
	int	reqp1, reqp2, reqp3, reqp4;
	int	repcode, repval, reperr, video, aud1, aud2;
	char	line[256];
	char	cmd[32];
	char *	name;

	if( argc != 2 )
	{
		fprintf(stderr,"usage: %s <device-name>\n",
			argv[0]);
		printf("-1 -1 -1\n");	/* let user know we died */
		fflush(stdout);
		exit(1);
	}

	name = argv[1];

	/* the following gets the ENTIRE video.conf table; this
	   is okay, because we are guaranteed not to have name clashes */

	if( vconf_get_table( "", VCONF_FILENAME, &vdt ) != VCONF_AOK )
	{
		printf("-1 -1 -1\n");	/* let user know we died */
		fflush(stdout);
		exit(1);
	}

	vconf_mkupper( name );
	
	swtr_index = -1;
	for( i=0; i<vdt.ndevs; i++ )
	{
		vconf_mkupper( vdt.dev[i].name );

		if( !strcmp(vdt.dev[i].name,name) )
		{
			swtr_index = i;
			break;
		}
	}

	if( swtr_index < 0 )
	{
		fprintf(stderr,"unable to find swtr device '%s'\n",name);
		printf("-1 -1 -1\n");	/* let user know we died */
		fflush(stdout);
		exit(1);
	}

	if( (swtr = swtrutil_open( &vdt, swtr_index )) == NULL )
	{
		fprintf(stderr,"unable to open swtr %s on %s\n",
			name, vdt.dev[swtr_index].tty );
		printf("-1 -1 -1\n");	/* let user know we died */
		fflush(stdout);
		exit(1);
	}
	
	printf("0 0 0\n");	/* let user know we're ready */
	fflush(stdout);
	
	while(!feof(stdin))
	{
		fgets(line,255,stdin);

		repcode = repval = reperr = 0;
		sscanf(line,"%d %d %d %d %d\n",&reqtype,&reqp1,&reqp2,&reqp3,&reqp4);
		switch( reqtype )
		{
		case	VIDSERVE_RESET:
			if( (*swtr->reset)(swtr) < 0 )
			{
				fprintf(stderr,"%s: error resetting swtr\n",
					swtr->devname);
				repcode = VIDSERVE_REQ_FAILURE;
			}
			break;
		case	VIDSERVE_SET_CHAN_SRC:
			if( (*swtr->set_chan_src)(swtr,reqp1,reqp2,reqp3) < 0 )
			{
				fprintf(stderr,"%s: error setting swtr channel source\n",
					swtr->devname);
				repcode = VIDSERVE_REQ_FAILURE;
			}
			break;
		case	VIDSERVE_INQUIRE:
			if( (*swtr->inquire)(swtr,reqp1,&video,&aud1,&aud2) )
			{
				fprintf(stderr,"%s: error inquiring swtr settings\n",
					swtr->devname);
				repcode = VIDSERVE_REQ_FAILURE;
			}
			else
			{
				/* encode the reply */
				repval = swtrutil_encode_settings( video,aud1,aud2 );
			}
			break;
		default:
			repcode = VIDSERVE_REQ_FAILURE;
			reperr = -1;
			fprintf(stderr,"%s: unknown request id #%d\n",
				swtr->devname,reqtype);
			break;
		}

		printf("%d %d %d\n",repcode,repval,reperr);
		fflush(stdout);
	}
	
}
