c_comproc.cpp

来自「对日本KSG震动探测仪器编写的伴侣服务代码」· C++ 代码 · 共 291 行

CPP
291
字号
// (Version 1.00 :: 10-Mar-1999 :: Harutoshi Yoshida)
/*===================================================================
	俲俽俧(恔搙忣曬僱僢僩儚乕僋)
	-----------------------------------
		奺抧恔寁偲偺捠怣儌僕儏乕儖
	-----------------------------------
	Program Name        : C_ComProc.cpp
	Program Start       : 16-Dec-1998
===================================================================*/

#include	"stdafx.h"
#include	"time.h"
#include	"C_ComProc.h"
#include	"C_SeqProc.h"
#include	"C_ComThread.h"
#include	"C_SockServer.h"
#include	"C_SockClient.h"
#include	"C_Work.h"

extern	HWND	MsgHdl;
extern	void	MsgOut(char *p1, char *p2);
extern	char	MsgBuff[2][128];
extern	S_SOCK_DAT	SkSvDat;			// 僜働僢僩僨乕僞
extern	S_SOCK_DAT	SkClDat;

// 15-Jun-2004		攇宍庢摼帪偺僷働僢僩10攞庴怣懳墳
int		GetWaveF = 0;
int		savRcvLen = 0;
int		WavLen = 0;
int		WavRcvLen = 0;


/*=====================================
						m:24-Jan-1999
@p	<< send com work init >>
=====================================*/
void	snd_wrk_ini(int ch)
{
	Scw[ch].ReqSav = 0;
	SndFile[ch].Exec = 0;			// 幚峴拞
	Scw[ch].DspPhs = '0';			// 捠怣僼僃乕僘(憲怣昞帵梡)
	Scw[ch].PrgPhs = 0;				// 僾儘僌儗僗僶乕僼僃乕僘
	Scw[ch].TimEnb = 0;
	Scw[ch].TryCnt = 0;
	Scw[ch].WrtPoi = Scw[ch].RedPoi = 0;
	Scw[ch].ComPhs = 0;
	Rcw[ch].Enable = 1;			// 庴怣夝愅嫋壜
	Scw[ch].Enable = 0;
	Scw[ch].ReqCmd = 0;			// command clear
	Com_Logging(ch, &S_LogOneBuf[ch]);
	CmsBit.SendExec &= Msk_dat[ch];				// 憲怣幚峴拞 off
	M_Cmd_Exec &= Atv_dat[ch];
}

/*=====================================
						m:24-Jan-1999
@p	<< recv com work init >>
=====================================*/
void	rcv_wrk_ini(int ch)
{
	CmsBit.RecvExec &= Msk_dat[ch];				// 庴怣幚峴拞 off
	Rcw[ch].DspPhs = '0';		// 捠怣僼僃乕僘(庴怣昞帵梡)
	Rcw[ch].TimEnb = 0;
	Rcw[ch].TryCnt = 0;
	Rcw[ch].WrtPoi = Rcw[ch].RedPoi = Rcw[ch].RcvCnt = 0;
	Rcw[ch].ComPhs = 0;
	Com_Logging(ch, &R_LogOneBuf[ch]);
	Rcw[ch].DelEnb = 1;
	Rcw[ch].DelPhs = 0;
	M_Cmd_Exec &= Atv_dat[ch];
}

/*=====================================
						m:11-Jan-1999
@p	<< 僄儔乕昞帵 >>
=====================================*/
void	SysErrDsp(int code)
{
	int c1, c2;

	c1 = (code / 1000) - 1;
	c2 = code % 100;
	User_work = 1;
	if (c1 < 0 || c1 > 2 || c2 < 0 || c2 > 9){
		// ver 1.12
		//pKSGView->PostMessage(WM_DISP_MESS, (WPARAM) "枹掕媊僄儔乕", 1);
		User_work = 0;
	}
	else{
		pKSGView->PostMessage(WM_DISP_MESS, (WPARAM) ErrDspTbl[c1][c2], 1);
	}
}

void	comm_err(int err)
{
	int a;

	a = err;
}

/*-------------------------------------
						m:16-Dec-1998
@p	<< 擔帪偺曄姺 >>
-------------------------------------*/
void	E_ChgDateTime(int type, struct S_DateTime *dat, char *d_buf, char *t_buf)
{
	int yer, mon, day;
	int hor, min, sec, msc;

	sscanf(d_buf, "%2d%2d%4d", &day, &mon, &yer);
	if (type){
		sscanf(t_buf, "%2d%2d%2d%2d", &hor, &min, &sec, &msc);
	}
	else{
		sscanf(t_buf, "%2d%2d", &hor, &min);
		sec = msc = 0;
	}

	dat->yer = yer;
	dat->mon = mon;
	dat->day = day;
	dat->hor = hor;
	dat->min = min;
	dat->sec = sec;
	dat->msc = msc;
}

/*=====================================
						m:16-Dec-1998
@p	<< 侾暥帤憲怣僙僢僩 >>
=====================================*/
void	OneStor(int ch, uchar dat)
{
	Scw[ch].Buffer[Scw[ch].WrtPoi ++] = dat;
	Scw[ch].CalBcc += (uint) dat;
	Scw[ch].WrtPoi &= RSB_MAX;
}

/*=====================================
						m:16-Dec-1998
@p	<< 侾暥帤憲怣 >>
=====================================*/
void	OneSend(int ch, uchar dat)
{
	OneStor(ch, dat);
	//pKSGView->PostMessage(WM_SEND_EXEC, ch, NULL);

	int len, err;
	char buf[1024];

	len = 0;
	while (Scw[ch].RedPoi != Scw[ch].WrtPoi){
		buf[len ++] = Scw[ch].Buffer[Scw[ch].RedPoi ++];
		Scw[ch].RedPoi &= RSB_MAX;
	}

	if (TcpUse){
		if (ch == 0){	// PC 偑僒乕僶乕偺捠怣
			err = SkSend(&SkSvDat.Cli[0], buf, len);
		}
		if (ch == 1){	// PC偑僋儔僀傾儞僩偺捠怣
			TcpSndErr = SkSend(&SkClDat.Cli[0], buf, len);
		}
	}
	else{
		err = WriteCommBlock(ch, buf, len);
	}
}

/*=====================================
						m:06-Jan-1999
@p	<< 侾僐乕僪憲怣 >>
=====================================*/
void	OneCode(int ch, uchar dat)
{
	OneStor(ch, dat);
	OneStor(ch, C_CR);
	OneSend(ch, C_LF);
}

// 23-Jan:HY
/*=====================================
						m:23-Jan-1999
@p	<< 暥帤楍憲怣 (NULL傑偱) >>
=====================================*/
void	StrSend(int ch, uchar *p)
{
	while (*(p+1)){
		OneStor(ch, *p ++);
	}
	OneSend(ch, *p);
}

/*=====================================
						m:16-Dec-1998
@p	<< 侾暥帤庴怣 >>
=====================================*/
uint	OneRecv(int ch)
{
	uint c;

	if (Rcw[ch].RedPoi == Rcw[ch].WrtPoi){
		c = -1;
	}
	else{
		c = (uchar)Rcw[ch].Buffer[Rcw[ch].RedPoi ++];			// 庴怣僶僢僼傽
		Rcw[ch].RedPoi &= RSB_MAX;

		Rcw[ch].CalBcc += c;									// BCC ADD
	}
	return (c);
}

/*=====================================
						m:06-Jan-1999
@p	<< 僨儕儈僞傑偱庴怣 >>
=====================================*/
void	DmyRecv(int ch)
{
	int c, d;

	c = OneRecv(ch);
	d = OneRecv(ch);
	if (c != C_CR || d != C_LF){
		comm_err(1);
	}
}

/*=====================================
						m:16-Dec-1998
@p	<< 1僷働僢僩嶌惉 >>
=====================================*/
void	OnePackSend(int ch, uchar *p, int len)
{
	int a;
	uint bcc;

	#if	SEND_LOG	// 憲怣儘僌桳岠
		CC_File	cFile;
		int	hdl;
		char fn[MAX_PATH];

		struct  tm  *n_time;
		time_t  time_cnt;

		time(&time_cnt);								// 尰嵼偺帪娫庢摼(Sec)
		n_time = localtime(&time_cnt);					// 尰抧帪崗偵曄姺
		sprintf(fn, "log\\S_%04d%02d%02d_%02d%d02%02d.txt",
				n_time->tm_year + 1900,		// 擭
				n_time->tm_mon + 1,			// 寧
				n_time->tm_mday,			// 擔
				n_time->tm_hour,			// 帪
				n_time->tm_min,				// 暘
				n_time->tm_sec				// 昩
		);

		hdl = cFile.Open(fn, _O_RANDOM | _O_BINARY | O_RDWR);
		//hdl = cFile.Open(fn, _O_RANDOM | _O_TEXT | O_RDWR);
		if (hdl == -1){		// 僼傽僀儖柍偟
			hdl = cFile.Creat(fn); cFile.Close(hdl);
			hdl = cFile.Open(fn, _O_RANDOM | _O_BINARY | O_RDWR);
			//hdl = cFile.Open(fn, _O_RANDOM | _O_TEXT | O_RDWR);
		}
	#endif
	
	
	Scw[ch].CalBcc = 0;			// CALC BCC Clear
	OneStor(ch, C_SOH);			// SOH
	OneStor(ch, RS_StpFlg[ch]);				// 拞抐僼儔僌

	#if	SEND_LOG	// 憲怣儘僌桳岠
		sprintf(fn, "SOH, %d\x0d\x0a", RS_StpFlg[ch]);				// 拞抐僼儔僌
		a = cFile.Write(hdl, fn, strlen(fn));
	#endif

	if (RS_StpFlg[ch]){			// 拞抐 ?
		Scw[ch].PckCnt = 0;
	}

	#if	SEND_LOG	// 憲怣儘僌桳岠
		a = cFile.Write(hdl, (char*)p, len+2);
	#endif

	for (a=2;a<len+2;a++){		// 僨乕僞
		OneStor(ch, *p ++);
	}

	for (;a<BF_256-3;a++){			// 梊旛
		OneStor(ch, ' ');
		#if	SEND_LOG	// 憲怣儘僌桳岠
			cFile.Write(hdl, "

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?