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 + -
显示快捷键?