
/* rpdutil.c */

#include <stdio.h>
#include "rpd_driver.h"
#include "video_conf.h"

/* -------------------------------------------------------------- */

RPD_ptr
rpdutil_open( devtbl, num )

	VCONF_DEVTABLE *devtbl;
	int		num;
{
char *calloc();
RPD_ptr	rpd;
char devport[64];
int res;

	if( !devtbl || num<0 || (num+1)>devtbl->ndevs )
	{
		fprintf(stderr,"rpdutil_open: given bad devtable or number\n");
		return NULL;
	}
	if( devtbl->dev[num].type != RPD_DEV )
	{
		fprintf(stderr,"rpdutil_open: device is not an RPD\n");
		return NULL;
	}

	rpd = (RPD_ptr) calloc( 1, sizeof(RPD) );
	if( rpd == NULL )
		return NULL;

	strcpy(devport,"/dev/");
	strcat(devport,devtbl->dev[num].tty);

	if( (rpd->fd = ttyutil_open(
		devport,
		devtbl->dev[num].baud,
		devtbl->dev[num].parity) ) == -1 )
	{
		fprintf(stderr,"rpdutil_open: unable to open RPD device\n");
		free( (char *) rpd );
		return NULL;
	}

	strcpy(rpd->port,devport);
	strcpy(rpd->devname,devtbl->dev[num].name);
	strcpy(rpd->model,devtbl->dev[num].model);
	strcpy(rpd->volume,"???");

	res = vconf_find_model( rpd->model );
	switch( res )
	{
	case 0:
		sony_setfuncs( rpd );
		break;
	case 1:
		vdp50_setfuncs( rpd );
		break;
	case 3:
		pana_setfuncs( rpd );
		break;
	default:
		printf("rpdutil_open: bad model <%s>\n",rpd->model);
		free( (char *) rpd );
		return NULL;
		break;
	}

	(*rpd->reset)(rpd);
	return rpd;
}

/* -------------------------------------------------------------- */

RPD_ptr
rpdutil_close( rpd )

	RPD_ptr rpd;
{
	ttyutil_close( rpd->fd );
	free( (char *) rpd );
	return NULL;
}
