/*
 * Copyright 1988, 1989, 1990, 1991 Massachusetts Institute of Technology
 */

/* necpcvcr.h */

/* NEC PC_VCR header file for videodisc driver */
/* 
  Russ Sasnett
  MIT Project Athena
  Visual Courseware Group
  russ@athena
  */

/* Originally for PANA_OMDR, modified by danapple for NEC PC-VCR, 2/7/91 */

#ifndef NECPCVCR_H
#define NECPCVCR_H

/* 

  Each command packet is terminated with a newline.
  Each ack or error packet is terminated with a newline.
  */

typedef unsigned char	UBYTE;

static struct cmdtbl
{
  char *	cmd_name;
  char *	cmd_fmt;	/* output format (used for sprintf'ing) */
  char *	resp_fmt;	/* format of bytes received */
  UBYTE	nresp;		/* nchars in response (without STX + ETX)*/
} necpcvcr_table[] =
  
  /*
    ==========================================
    cmd_name, 	cmd_str, 	resp_bytes
    ==========================================
    */
{
  "Eject",        "EJ",	     "",	0,
  "Clear",	  "CL",	     "",	0,
  "Cancel",	  "CV",	     "",	0,
  "Status",	  "DS",	     "SS%2d",   4,
  "Power-Ctrl",   "PW%d",    "",	0,
  "AC-Ctrl",      "AC%d",    "",	0,
  "GetFrame",	  "RF",	     "FG%2d",   4, /* gets current address */
  "GetAddr",	  "RP0",     "PG%5d",   7, /* gets current address */
  "Record-Setup", "PI",      "",        0,
  "Record-Start", "PS",      "",        0,
  "Record-Clear", "PS",	     "",	0,
  "Motor-Off",	  "ST",	     "",	0,
  "Step-Fwd",	  "FS",	     "",	0,
  "Fwd-Play",	  "PL",	     "",	0,
  "Fwd-Play-To",  "SP%d:%d", "",	0,
  "Fwd-10th",	  "SL",      "",	0,
  "Fwd-30th",	  "SL-",     "",	0,
  "Fwd-5th",	  "SL+",     "",	0,
  "Fwd-Fast",     "FF",      "",	0,
  "Fwd-Search",   "FF1",     "",        0,
  "Fwd-Jet",      "FF2",     "",        0,
  "Rev-Search",	  "RW1",     "",	0,
  "Rev-Jet",	  "RW2" ,    "",	0,
  "Pause",        "PS",      "",        0,
  "Search",	  "JF%d",    "",	0,

  "Audio-Left",   "RLL",     "",        0,
  "Audio-Right",  "RLR",     "",        0,
  "Audio-Both",   "RLS",     "",        0,
  "Audio-Linear", "RLN",     "",        0,
  "Audio-Mute",   "AM%d",    "",        0,

  "Index-On",	  "DP1",     "",	0,
  "Index-Off",	  "DP0",     "",	0,

  "Video-On",	  "VM0",     "",	0,
  "Video-Off",	  "VM1",     "",	0,

  "Display-Write","CA00:%d'%s'","",      0, /* Display chars on line */
  "Display-Off",  "DP0",     "" ,       0, /* Turn off chars */
  "Display-On",   "DP1",     "" ,       0, /* Turn on chars */
  "Display-Erase","EL%d",    "" ,       0, /* Number for a row, or A for all */
  "Display-Reset","OC",      "" ,       0, 

  "Remote-Ctrl-Lock", "RM%1d","",       0, /* Lock remote control */

  "Counter-Reset","CR",      "",        0, /* Reset tape counter */

  "Wait-For-Pause","WN:PLAY-PS","",        0, /* Wait for Pause mode */

#ifdef OBSOLETE
  "Repeat-Play", 
  "Record-Remain","RR",	"RR%05d", 7,	/* # frame can record */
  /* enter recording mode, with # frames */
  "Manual-Record-Number","RM%05d:","RM",2,
  "Manual-Record-Mode",	"RM1:","RM",2,
  /* enter recording mode, with # frames */
  "Auto-Record-Number",	"RA%05d:","RA",2,
  /* enter recording mode, with # frames */
  "Auto-Record-Mode","RA","RA",2,
  "Record-Audio-On","AS","AS",	2,
  "Record-Audio-Off","AR","AR",	2,
  "Play-Audio-On","AS",	"AS",	2,
  "Play-Audio-Off","AR","AR",	2,
  "Record-Clear","RC",	"RC",	2,	/* gets out of recording mode */
  "Rev-Fast-To", "FR%03d:%05d:","FR",	2,
  "Find-Free-Video","RE","RE%05d", 7,	/* number of first free video */
  "Find-Free-Audio","AE","AE%05d", 7,	/* number of first free audio */
  "On-Line-Lock","OL%1d:","OL",1,
  "Dub-Play",	"DP",	"DP",	2,
  "Rev-Play",	"PR",	"PR",	2,
  "Rev-Play-To","PR%05d:","PR",	2,
  "Rev-Slow",	"LR%03d:","LR",	2, 
  "Rev-Slow-To","LR%03d:%05d:","LR",	2, 
  "Fwd-Fast-To", "FF%03d:%05d:","FF",	2, /* X times normal */
  "Fwd-Slow-To","LF%03d:%05d:","LF",	2, /*1/X times normal*/
  "A1-On",	"A134:","A1",	2,
  "A1-Off",	"A10:",	"A1",	2,
  "A2-On",	"A234:","A2",	2,
  "A2-Off",	"A20:",	"A2",	2,
  "Load",	"LD",	"LD",	2,
  "Motor-On","TF","TF",2,  /* tease player into starting motor */
  "Motor-On-2","TR","TR",2, /* tease player, part 2*/
  "Step-Rev",	"JR",	"JR",	2,
#endif /* OBSOLETE */
};

#define NUM_NECPCVCR_CMDS	( sizeof(necpcvcr_table) / sizeof(struct cmdtbl) )

/* error table */

static  char *Necpcvcr_Errors[] = {
    "Power off",
    "Address cannot be read",
    "No cassette",
    "(Not used)",
    "Command incorrect",
    "Parameter(s) incorrect",
    "Reception buffer overflow",
    "(Not used)",
    "Header cannot be read",
    "Command cannot be executed",
};

#define NECPCVCR_END	0x0d	/* end a command packet */

/* States of disc load */
#define NECPCVCR_NOTAPE  0  /* No tape */
#define NECPCVCR_STOPPED 1  /* Tape stopped */
#define NECPCVCR_RECORDING 2
#define NECPCVCR_RECORDPAUSE 3
#define NECPCVCR_FASTFORWARD 4
#define NECPCVCR_JETSEARCH 5
#define NECPCVCR_PICTURESEARCH 6
#define NECPCVCR_PLAY 7
#define NECPCVCR_NOTUSED 8
#define NECPCVCR_PAUSE    9  /* Pause mode */
#define NECPCVCR_REVPICTURESEARCH 10
#define NECPCVCR_REVJETSEARCH 11
#define NECPCVCR_REWIND 12
#define NECPCVCR_INDEXSCANFF 13
#define NECPCVCR_INDEXSCANPLAY 14
#define NECPCVCR_INDEXSCANREW 15
#define NECPCVCR_SLOW30TH 16
#define NECPCVCR_SLOW10TH 17
#define NECPCVCR_SLOW5TH 18
#define NECPCVCR_INSERTPAUSE 19
#define NECPCVCR_INSERTPLAY 20
#define NECPCVCR_AUDIODUBPAUSE 21
#define NECPCVCR_AUDIODUBPLAY 22
#define NECPCVCR_AUDIODUBINSERTPAUSE 23
#define NECPCVCR_AUDIODUBINSERTPLAY 24

#endif /* NECPCVCR_H */



