📄 hlrese.cpp
字号:
#include "stdafx.h"
#include "HLReSe.h"
#include <time.h>
#include "stdlib.h"
#include "cqm.h"
#define warningEventBufNum 32
HANDLE gComHandleProc = NULL;
void RemoveForModemDelay(char *inBuf, char *outBuf)
{
short i = 0;
short j = 1000;
char *tt = inBuf;
while(*tt != '*'&& *tt!=0)
{
if(*tt == '@') j = i;
i ++;
}
if(j == 1000) outBuf[0]=0;
else
{
for(i = j; i< (short)strlen(inBuf); i ++)
outBuf[i-j] = inBuf[j+i];
outBuf[i-j] = 0;
}
}
void AddForModemDelay(char *inBuf, char *outBuf)
{
#define delayLetter 45
short i;
for(i = 0; i< delayLetter; i++)
outBuf[i]='@';
for(short ii =0; ii <(short)strlen(inBuf); ii ++)
outBuf[i+ii] = inBuf[ii];
outBuf[i+ii] = 0;
}
unsigned char
CalculateFCS(char *inBuf, char *inendBuf)
{
BYTE fcs = 0; while(inBuf != inendBuf)
fcs ^=(BYTE)*inBuf ++;
return fcs;
}
short AnalysisRDRespone(char *inBuf, char *outBuf)
{
if(!ExtractHostLinkText(inBuf, outBuf)) return 0;
if(CalculateHex(outBuf[0])*16+CalculateHex(outBuf[1]) !=0) return 0;
int count = strlen(outBuf)-2;
if(count<3) return count;
int aa;
for(aa = 0; aa <count; aa ++)
outBuf[aa]= outBuf[aa+2];
outBuf[aa] =0;
return count/4;
}
short AnalysisRDRespone_h1(char *inBuf, char *outBuf)
{
if(!ExtractHostLinkText(inBuf, outBuf)) return 0;
// if(CalculateHex(outBuf[0])*16+CalculateHex(outBuf[1]) !=0) return 0;
int count = strlen(outBuf)-2;
if(count&3) return count+2;
int aa;
for(aa = 0; aa <count; aa ++)
outBuf[aa]= outBuf[aa+2];
outBuf[aa] =0;
return count/4;
}
short AnalysisRDResponeShort(char *inBuf, short *outShort)
{
short count = outShort[0];
for(int aa = 0; aa <count; aa ++)
outShort[aa]= CombineOneShort(inBuf+aa*4);
return count;
}
void
ConvertShort2BCD(short inShort, char *bcd)
{
short aa = inShort/1000;
inShort -= aa *1000;
if(aa >9) bcd[0] = 'a'+aa-10;
else bcd[0]='0'+aa;
aa = inShort/100;
inShort -= aa *100;
if(aa >9) bcd[1] = 'a'+aa-10;
else bcd[1]='0'+aa;
aa = inShort/10;
inShort -= aa *10;
if(aa >9) bcd[2] = 'a'+aa-10;
else bcd[2]='0'+aa;
aa = inShort;
if(aa >9) bcd[3] = 'a'+aa-10;
else bcd[3]='0'+aa;
}
short
CombineOneShort(char *inBuf)
{
return CalculateHex(inBuf[0])*10*10*10 +
CalculateHex(inBuf[1])*10*10 +
CalculateHex(inBuf[2])*10 +
CalculateHex(inBuf[3]);
}
long
CombineOneShort_ToHex(char *inBuf)
{
return CalculateHex(inBuf[0])*16*16*16 +
CalculateHex(inBuf[1])*16*16 +
CalculateHex(inBuf[2])*16 +
CalculateHex(inBuf[3]);
}
unsigned char
CalculateHex(char inChar)
{
if(inChar<='9' && inChar >='0')
return inChar -'0';
if((inChar>='a' && inChar <='f'))
return inChar-'a'+10;
if(inChar>='A' && inChar <='F')
return inChar-'A'+10;
return 0;
}
void EncodeTextToHostLinkCommandFortl(char *inBuf, char *error,char *outBuf)
{
char *pTempPtr = outBuf;
//Host Link Begin Part----one Byte
*pTempPtr ++ = '@';
//Host Link Node NO. part----two bytes
*pTempPtr ++ = (NodeNo%100)/10+'0';
*pTempPtr ++ = (NodeNo%10)+'0';
//Host Link Hearder Code----two bytes
// *pTempPtr ++ = 'R';
// *pTempPtr ++ = 'R';
//Host Link Text
// while(*inBuf != 0) *pTempPtr ++ = *inBuf ++;
*pTempPtr ++ = *error ++;
*pTempPtr ++ = *error ++;
*pTempPtr ++ = *error ++;
*pTempPtr ++ = *error ++;
while(*inBuf != 0) *pTempPtr ++ = *inBuf ++;
//Host Link FCS-----two Bytes
BYTE fcs = CalculateFCS(outBuf, pTempPtr);
BYTE tt = fcs>>4;
if(tt>9) *pTempPtr ++ ='A'+tt-10;
else *pTempPtr ++ ='0'+tt;
tt = fcs&0X0F;
if(tt>9) *pTempPtr ++ ='A'+tt-10;
else *pTempPtr ++ ='0'+tt;
//Host Link Termitor-----two Bytes
*pTempPtr ++ = '*';
*pTempPtr ++ = 13;
*pTempPtr ++ = 0;
}
void EncodeTextToHostLinkCommand(char *inBuf, char *outBuf)
{
char *pTempPtr = outBuf;
//Host Link Begin Part----one Byte
*pTempPtr ++ = '@';
//Host Link Node NO. part----two bytes
*pTempPtr ++ = (NodeNo%100)/10+'0';
*pTempPtr ++ = (NodeNo%10)+'0';
//Host Link Hearder Code----two bytes
// *pTempPtr ++ = 'R';
// *pTempPtr ++ = 'R';
//Host Link Text
// while(*inBuf != 0) *pTempPtr ++ = *inBuf ++;
while(*inBuf != 0) *pTempPtr ++ = *inBuf ++;
//Host Link FCS-----two Bytes
BYTE fcs = CalculateFCS(outBuf, pTempPtr);
BYTE tt = fcs>>4;
if(tt>9) *pTempPtr ++ ='A'+tt-10;
else *pTempPtr ++ ='0'+tt;
tt = fcs&0X0F;
if(tt>9) *pTempPtr ++ ='A'+tt-10;
else *pTempPtr ++ ='0'+tt;
//Host Link Termitor-----two Bytes
*pTempPtr ++ = '*';
*pTempPtr ++ = 13;
*pTempPtr ++ = 0;
}
bool
ExtractHostLinkText(char *inBuf, char *outBuf)
{
if(*inBuf == '@')
{
char *pTemp = inBuf;
while(*pTemp != '*' && *pTemp != 0) pTemp ++;
if(*pTemp == '*')
{
if(*(pTemp+1) == 13)
{
BYTE code = CalculateFCS(inBuf, pTemp-2);
if(code == (CalculateHex(*(pTemp-1))+CalculateHex(*(pTemp-2))*16))
// if(code == *(pTemp-1)-'0'+((*(pTemp-2)-'0')<<4))
{
char *pTemp2 = inBuf+5;
while(pTemp2 != pTemp-2) *outBuf ++ = *pTemp2 ++;
*outBuf = 0;
return true;
}
}
}
}
return false;
}
bool
InitComPort(short inNO, short baudRate)
{
DCB dcb;
// DWORD dwError;
BOOL fSuccess = false;
if(inNO == 1)
{
gComHandleProc = CreateFile( "COM1",
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
}
else
// if (gComHandleProc == INVALID_HANDLE_VALUE)
{
// handle error
gComHandleProc = CreateFile( "COM2",
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
}
if (gComHandleProc == INVALID_HANDLE_VALUE) return FALSE;
SetCommMask(gComHandleProc,EV_CTS|EV_DSR);
// Omit the call to SetupComm to use the default queue sizes.
// Get the current configuration.
fSuccess = GetCommState(gComHandleProc, &dcb);
if (!fSuccess)
{
EndComm();
return false;
}
// Fill in the DCB: baud=1200, 8 data bits, no parity, 1 stop bit.
dcb.BaudRate = baudRate;
dcb.ByteSize =7;// 8;
dcb.Parity = EVENPARITY;//NOPARITY;
dcb.StopBits = TWOSTOPBITS;//ONESTOPBIT;
dcb.fRtsControl = 0;
fSuccess = SetCommState(gComHandleProc, &dcb);
if(!fSuccess)
{
EndComm();
return false;
}
COMMTIMEOUTS cto;
GetCommTimeouts(gComHandleProc, &cto);
cto.ReadTotalTimeoutConstant = 100;
cto.ReadTotalTimeoutMultiplier = 12000/dcb.BaudRate;
fSuccess = SetCommTimeouts(gComHandleProc, &cto);
if(!fSuccess)
{
EndComm();
return false;
}
return true;
}
void
EndComm()
{
if (gComHandleProc != INVALID_HANDLE_VALUE)
{
CloseHandle(gComHandleProc);
gComHandleProc = INVALID_HANDLE_VALUE;
}
}
/*
void WINAPI
GetAllData15M(DataTransfer *iodt, short nodeNO)
{
}
*/
//===End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -