/*    Visca Interface Program
visca1.c */

#include <stdio.h>
#include <conio.h>
#include <bios.h>

void sendpacket(unsigned char *packet);

/* VISCA DEFINITIONS */

unsigned char initvisca[] = {5,0x88,0x01,0x00,0x01,0xff};
unsigned char address[] = {4,0x88,0x30,0x01,0xff};
unsigned char poweron[] = {6,0x81,0x01,0x02,0x00,0x02,0xff};
unsigned char poweroff[] = {6,0x81,0x01,0x02,0x00,0x03,0xff};
unsigned char vcrrecord[] = {6,0x81,0x01,0x02,0x01,0x48,0xff};
unsigned char vcrstop[] = {6,0x81,0x01,0x02,0x01,0x00,0xff};

void main()
{
  int ch;
  char inkey;

  s_setup(0, 0xE3);

  sendpacket(initvisca);
  sendpacket(address);

  printf("\n\n\n1 - POWER ON\n");
  printf("2 - VCR RECORD\n");
  printf("3 - VCR STOP\n");
  printf("4 - POWER OFF\n");
  printf("9 - QUIT\n\n");

  while(1){

    if(kbhit()){
      inkey = getch();
      switch(inkey){
	case '1': sendpacket(poweron);
	  break;
	case '2': sendpacket(vcrrecord);
	  break;
	case '3': sendpacket(vcrstop);
	  break;
	case '4': sendpacket(poweroff);
	  break;
	case '9': exit(0);
      }
    }

    if((ch = s_rcvchar()) != -1) printf("%02x", (char)ch);

  }
}

void sendpacket(unsigned char *packet)
{
  int msglen;
  long int x;

  printf("\npacket output: ");
  msglen = *packet;
  packet++;

  while(msglen){
    s_sendchar((int)*packet);
    printf("%02x", *packet);
    packet++;
    msglen--;
  }
  printf("\n");
}
