/*	PONTECH Copyright 1996
 *  Term.C
 *  	A simple terminal like program for sending STP100 commands
 */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "comm.h"
#include "comm.c"	/* don't need this line if include in project */

#define ESC_KEY 	27
#define BS_KEY 		8
#define ENTER_KEY 13

int initPort(int commPort);

/* Global */
char numStr[10];
int baudRate, rcvWait;

int main()
{
	char ch;
	int port, cont = 1;

	clrscr();

	printf("******************************************\n");
	printf("*** Simple Terminal program for STP100 ***\n");
	printf("******************************************\n");

	port = COM1;
	if (!initPort(port))
	{
		port = COM2;
		if (!initPort(port))
		{
			port = COM3;
			if (!initPort(port))
			{
				port = COM4;
				if (!initPort(port))
				{
					printf("STP100 Not Founded\n");
					return 0;
				}
			}
		}
	}

	printf("\nSV100 Founded on COM%d, %d baud\n\n", port+1, baudRate);
	printf("  Enter Command(s).\n");
	printf("    <ENTER> only - board return prompt >\n");
	printf("    <ESC> to quit.\n\n");

	while(cont)
	{
		if (kbhit())
		{
			ch = toupper(getch());

			if (ch == ESC_KEY)
				cont = 0;
			else if (ch == BS_KEY)
				printf ("%c %c", ch, ch);
			else if (ch == ENTER_KEY)
				printf ("\n");
			else
				printf ("%c", ch);

			serlXmit(ch);
		}
		while (serlAvl())
		{
			ch = serlRcv();
			if (ch == ENTER_KEY)
				printf ("\n");
			else if (ch == 10)
				;
			else
				printf ("%c", ch);
		}
	}

	serlClosePort(port);
	return 1;
}

int initPort(int commPort)
{
	char ch = ' ';
	int i;

	serlClrBuff();
	serlSetIntr(commPort);   	/* Port 0 (COM1) */

	baudRate = 9600; 					/* Start With 9600 Baud */
	rcvWait = 10;
	for (i = 0; i < 4; i++)
	{
		serlPortInit(commPort,baudRate,0,8,1);

		serlXmitStr(" \n");
		serlXmitStr("\n");
		delay(50);			/* wait until STP100 send enough info */

		while(serlAvl())
		{
			ch = serlRcv();
			if (ch == '>')
				return 1;
		}

		switch(i)
		{
		case 0:
			baudRate = 2400;
			rcvWait = 30;
			break;
		case 1:
			baudRate = 4800;
			rcvWait = 20;
			break;
		case 2:
		default:
			baudRate = 19200;
			rcvWait = 6;
			break;
		}
	}
	return 0;
}
