📄 inteteam.cpp
字号:
#include <stdio.h>
#include "InteTeam.h"
#include "hello.h"
#include "InfoTeam.h"
#include "BDSin.h"
void lcdout(char*,int,int);
const INTERFACE_TYPE TYPE_ARRAY[] = {
INTERFACE_SITEID,
INTERFACE_SAMPLE,
INTERFACE_SERIAL,
INTERFACE_BIAODINPLUSE,
INTERFACE_BIAODINWAVE,
INTERFACE_FILT,
INTERFACE_CORRECT};
const char TEAMHEAD[] = {0xbf,0x13,0x97,0x74};
const unsigned int COMMAND[] = {0X1008,0X1004,0X100A,0X1007,0X1006,0XFFAF,0X1009};
const unsigned int LENGTH[] = {8,4,10,16,0,0,6};
const unsigned int SCOMMAND[] = {0X2008,0X2004,0,0X2007,0X2006,0XFFAF,0X2009};
const unsigned int SLENGTH[] = {8,8,0,16,0,0,6};
const int TYPENUM = 7;
CInterTeam g_nInterTeam;
CInterTeam::CInterTeam()
{
m_nTeamIndex = 0;
m_nSendType = INTERFACE_NULL;
m_pReceiveBuff = new char[HEX_BIG];
}
CInterTeam::~CInterTeam()
{
if(m_pReceiveBuff)
delete[] m_pReceiveBuff;
}
char CInterTeam::GetNext(unsigned int& nTeamIndex)
{
char nChar;
nTeamIndex ++;
if(nTeamIndex < 5)
nChar = Team_HEAD[nTeamIndex-1];
else if(nTeamIndex < 7)
nChar = ItoChar(g_nInfoTeam.GetSiteID(),nTeamIndex - 5);
else if(nTeamIndex < 9)
nChar = ItoChar(SCOMMAND[m_nSendType],nTeamIndex - 7);
else if(nTeamIndex < 11)
{
if(SLENGTH[m_nSendType])
nChar = ItoChar(SLENGTH[m_nSendType],nTeamIndex - 9);
else if(m_nSendType == INTERFACE_BIAODINWAVE)
{
// 正玄函数
nChar = ItoChar(14+6*g_nBDSin.m_nFrqNum,nTeamIndex - 9);
}
}
else
{
switch(m_nSendType)
{
case INTERFACE_SITEID:
{
if(nTeamIndex < 15)
nChar = 0;
else if(nTeamIndex < 17)
nChar = ItoChar(g_nInfoTeam.GetSiteID(),nTeamIndex - 15);
else
{
int nCheckSum = -(g_nInfoTeam.GetSiteID()*2+
SCOMMAND[m_nSendType]+SLENGTH[m_nSendType]);
nChar = ItoChar(nCheckSum,nTeamIndex - 17);
}
if(nTeamIndex == 18)
nTeamIndex = 0;
}
break;
case INTERFACE_SAMPLE:
{
if(nTeamIndex < 12)
nChar = ItoChar(g_nInfoTeam.GetSample(),nTeamIndex - 10);
else if(nTeamIndex < 14)
nChar = ItoChar(2,nTeamIndex - 12);
else if(nTeamIndex < 16)
nChar = ItoChar(g_nInfoTeam.GetFrqWidth(),nTeamIndex - 12);
else
{
int nCheckSum = -(g_nInfoTeam.GetSiteID()+SCOMMAND[m_nSendType]+
SLENGTH[m_nSendType]+g_nInfoTeam.GetSample()+2+
g_nInfoTeam.GetFrqWidth());
nChar = ItoChar(nCheckSum,nTeamIndex - 17);
}
if(nTeamIndex == 18)
nTeamIndex = 0;
}
break;
case INTERFACE_BIAODINWAVE:
{
if(nTeamIndex < 12)
nChar = ItoChar(7,nTeamIndex - 10);
else if(nTeamIndex < 14)
nChar = ItoChar(g_nBDSin.IsClockStart(),nTeamIndex - 12);
else if(nTeamIndex < 18)
nChar = LtoChar(g_nBDSin.GetStartSecond(),nTeamIndex - 14);
else if(nTeamIndex < 20)
nChar = ItoChar(g_nBDSin.GetTMDay(),nTeamIndex - 18);
else if(nTeamIndex < 22)
nChar = ItoChar(g_nBDSin.m_nFrqNum,nTeamIndex - 20);
else if(nTeamIndex < 22+6*g_nBDSin.m_nFrqNum)
{
int nFrqPos = (nTeamIndex - 22)/6;
int nCountPos = nTeamIndex - 22 - nFrqPos*6;
if(nCountPos < 2)
nChar = ItoChar(g_nBDSin.m_pFrqArray[nFrqPos].m_nPeriod,nCountPos);
else if(nCountPos < 4)
nChar = ItoChar(g_nBDSin.m_pFrqArray[nFrqPos].m_nFrq,nCountPos-2);
else
nChar = ItoChar(g_nBDSin.m_pFrqArray[nFrqPos].m_nDamp,nCountPos-4);
}
else
{
int nCheckSum = 0;
for(int i = 0;i<g_nBDSin.m_nFrqNum;i++)
{
nCheckSum -= g_nBDSin.m_pFrqArray[i].m_nPeriod;
nCheckSum -= g_nBDSin.m_pFrqArray[i].m_nFrq;
nCheckSum -= g_nBDSin.m_pFrqArray[i].m_nDamp;
}
long nSecond = g_nBDSin.GetStartSecond();
int* pSecond = (int*)&nSecond;
nCheckSum = -(g_nInfoTeam.GetSiteID()+SCOMMAND[m_nSendType]+
21+7*g_nBDSin.m_nFrqNum+pSecond[0]+pSecond[1]+
g_nBDSin.GetTMDay());
nChar = ItoChar(nCheckSum,nTeamIndex - 22-6*g_nBDSin.m_nFrqNum);
}
if(nTeamIndex == 24+6*g_nBDSin.m_nFrqNum)
nTeamIndex = 0;
}
break;
}
}
return nChar;
}
void CInterTeam::CheckTeamHead(char nChar)
{
static unsigned int nIndex = 0;
if(nChar != TEAMHEAD[nIndex])
{
nIndex = 0;
if(nChar == TEAMHEAD[m_nTeamIndex])
nIndex ++;
}
else if(nIndex == 3)
{
nIndex = 0;
m_nTeamIndex = 4;
}
else
nIndex ++;
}
void CInterTeam::TeamIn(char nChar)
{
m_pReceiveBuff[m_nTeamIndex] = nChar;
if(m_nTeamIndex < 4)
{
if(nChar != TEAMHEAD[m_nTeamIndex])
{
m_nTeamIndex = 0;
if(nChar == TEAMHEAD[m_nTeamIndex])
m_nTeamIndex ++;
}
else
m_nTeamIndex ++;
}
else
{
m_nTeamIndex ++;
CheckTeamHead(nChar);
}
unsigned int& nLength = (unsigned int&)m_pReceiveBuff[8];
if(m_nTeamIndex < 10)
{
}
else if(m_nTeamIndex == 10)
{
// 检验命令和长度
unsigned int& nSiteID = (unsigned int&)m_pReceiveBuff[4];
unsigned int& nCommand = (unsigned int&)m_pReceiveBuff[6];
m_nSendType = INTERFACE_NULL;
for(int i = 0;i<TYPENUM;i++)
{
if(nCommand == COMMAND[i])
{
if(nSiteID == g_nInfoTeam.GetSiteID() &&
(!LENGTH[i]||nLength == LENGTH[i]))
m_nSendType = TYPE_ARRAY[i];
break;
}
}
if(m_nSendType == INTERFACE_NULL)
m_nTeamIndex = 0;
}
else if(m_nSendType != INTERFACE_NULL && m_nTeamIndex == nLength + 10)
{
m_nTeamIndex = 0;
int nSum = 0;
for(int i = 4;i<nLength+10;i+=2)
{
int& nInt = (int&)m_pReceiveBuff[i];
nSum += nInt;
}
if(nSum != 0)
{
// frame error
m_nSendType = INTERFACE_NULL;
return;
}
switch(m_nSendType)
{
case INTERFACE_SITEID:
{
unsigned int& nSiteID = (unsigned int&)m_pReceiveBuff[14];
g_nInfoTeam.SetSiteID(nSiteID);
}
break;
case INTERFACE_SAMPLE:
{
unsigned int& nSampleRate = (unsigned int&)m_pReceiveBuff[10];
g_nInfoTeam.SetSample(nSampleRate);
}
break;
case INTERFACE_SERIAL:
{
unsigned long& nSerialSpeed = (unsigned long&)m_pReceiveBuff[14];
g_nInfoTeam.SetSerialSpeed(nSerialSpeed);
m_nSendType = INTERFACE_NULL;
}
break;
case INTERFACE_BIAODINWAVE:
{
int& nCalID = (int&)m_pReceiveBuff[10];
int& nTimeEnable = (int&)m_pReceiveBuff[12];
long& nSecond = (long&)m_pReceiveBuff[14];
int& nDay = (int&)m_pReceiveBuff[18];
int& nNum = (int&)m_pReceiveBuff[20];
if(nCalID != 7 || ((nLength-14) != 6*nNum) || nNum >=50)
{
m_nSendType = INTERFACE_NULL;
break;
}
if(nTimeEnable == 0)
{
g_nBDSin.SetClockFalse();
}
else
{
long nSec = nDay;
nSec *= 86400;
g_nBDSin.SetClockStart(nSecond,nSec);
g_nBDSin.m_nFrqNum = nNum;
g_nBDSin.ReadFromBuff(&m_pReceiveBuff[22]);
}
}
break;
}
// send back
if(m_nSendType != INTERFACE_NULL)
{
if(SLENGTH[m_nSendType] != 0)
{
g_pSendTeam[g_nSendTeamPos++] = &g_nInterTeam;
g_nSendTeamPos &= (SENDTEAM_LENGTH-1);
}
}
}
//char buff[20];
//sprintf(buff,"%d,%d ",m_nSendType,m_nTeamIndex);
//lcdout(buff,0,3);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -