/******************************************************************/

#include <iocslib.h>
#include "defines.h"
#include "rs232c.h"

#define	START	"Start"		/* Syncro start */
#define	ANK	"Ok!"		/* Syncro ok */
#define	OTM	(5*CBASE)	/* 5sec */
#define	ITM	(10*CBASE)	/* 10sec */

/******************************************************************/

int Syncro(int try)
/* ２台同期合わせ */
/* リターン値：0=同期ｏｋ , <0=エラー */
{
unchar buff[256];
int fstart,fout;
int count=0;
int ret;
	/* 双方がSTART/ANKを受信したら終わり */
	fstart=fout=0;
	/* BIT0=自分START送信／ANK受信済み */
	/* BIT1=相手START受信／ANK送信済み */
	do {
		/* 受信 */
		ret=ComInps0(buff,OTM,ITM,0);
		if (ret==BERR) return(BERR); /* BREAK */
		if (ret>0) { /* 正常受信あり */
			if (strcmp(buff,ANK)==0) {
				if (fout) fstart|=BIT0;
			}
			else
			if (strcmp(buff,START)==0) { /* STARTの時 */
				/* ANK送信 */
				ret=ComOuts0(ANK,OTM,ITM,0);
				if (ret==BERR) return(BERR); /* BREAK */
				if (ret==0) fstart|=BIT1;
			}
		}
		/* 送信 */
		if (!(fstart&BIT0)) {
			ret=ComOuts0(START,OTM,ITM,0);
			if (ret==BERR) return(BERR);
			if (ret==0) {
				/* ANK待ち */
				ret=ComInWait(ITM);
				if (ret==BERR) return(BERR); /* BREAK */
				fout=1;
			}
		}
		
		if (try>0 && (++count)>try) return(TRYERR); /* 同期合せ失敗 */
	} while (fstart!=(BIT0|BIT1)); /* 条件が整うまでループ */
	ComClr(); /* 一応通信回線をクリアしておく */
	return(0);
}

/******************************************************************/
