📄 carditfa.cpp.bak
字号:
Flag=writedata(buff,buff_len);
return Flag;
}
/***************SetSync(BYTE sync1,BYTE sync2)--设置同步码****
sync1 :同步码1, sync2 :同步码2
**************************************************************/
BOOL WINAPI SetSync(BYTE sync1,BYTE sync2)
{
WORD Data;
unsigned char buff[100];
int i = 0;
int buff_len=0;
BOOL Flag;
Data=sync1;
Data=Data<<8 | sync2;
memset(buff,SYNC_CODE,4);
// buff[0]=SYNC_CODE;
// buff[1]=SYNC_CODE;
// buff[2]=SYNC_CODE;
// buff[3]=SYNC_CODE;
buff[4]=INS_FLAG;
buff[5]=0x00;
buff[6]=0x01;
buff[7]=0x00;
buff[8]=0xB1;
buff[9]=(Data & 0x00FF);
buff[10]=(Data>>8) & 0x00FF;
memset(&buff[11],0,61);
// for(i=11;i<72;i++)
// buff[i]=0;
buff_len=72;
Flag=writedata(buff,buff_len);
return Flag;
}
/******************GetItfaState()--获取接口状态***************
**************************************************************/
BOOL WINAPI GetItfaState(unsigned char *stat)
{
// unsigned char buff[100];
int trynum=0;
// int buff_len=0;
BOOL Flag;
/*
if(!(Flag = SetScc(1)))
return FALSE;
*/
if(Flag = SetScc(0))
{
trynum=0;
while(trynum<5)
{
if(!(Flag=readcardstat(stat)))
trynum++;
else trynum = 5;
}
}
return Flag;
}
BOOL WINAPI SetMonitor(int mode)
{
unsigned char buff[100];
int i = 0;
int buff_len=0;
BOOL Flag;
memset(buff,SYNC_CODE,4);
// buff[0]=SYNC_CODE;
// buff[1]=SYNC_CODE;
// buff[2]=SYNC_CODE;
// buff[3]=SYNC_CODE;
buff[4]=INS_FLAG;
buff[5]=0x00;
buff[6]=0x00;
buff[7]=0x01;
memset(&buff[8],0,64);
// for(i=0;i<64;i++)
// buff[i+8]=0;
buff[72]=0x90;
buff[73]=mode;
buff_len=74;
Flag=writedata(buff,buff_len);
return Flag;
}
/*SetScc(nCtCode)控制SCC使的可以控制机器对线路上数据的接收
//nCtCode:0,自检返回状态信息;
0:返回PB口信号
1:打开SCC,允许SCC接收和发送
2:禁止SCC,关闭SCC接收和发送,清除底层缓冲区和上、下行缓冲区
3:仅打开SCC接收
4:仅关闭SCC接收,清除底层接收缓冲和上行缓冲区
5:仅打开SCC发送
6:仅关闭SCC发送,清除下行缓冲区
*/
BOOL WINAPI SetScc(int nCtlCode)
{
/* //前清空发送缓冲区
if((nCtlCode == 6) || (nCtlCode == 2))
{
::WaitForSingleObject(hMutex_sd,1000);
tx_buf_head = 0;
tx_buf_end = 0;
txbuf_space_left = MAXBUFFSEND;
::ReleaseMutex(hMutex_sd);
}
*/ unsigned char buff[100];
int i = 0,trynum = 0;
int buff_len = 0;
BOOL Flag;
memset(buff,SYNC_CODE,4);
// buff[0] = SYNC_CODE;
// buff[1] = SYNC_CODE;
// buff[2] = SYNC_CODE;
// buff[3] = SYNC_CODE;
buff[4] = INS_FLAG;
buff[5] = 0x00;
buff[6] = 0x00;
buff[7] = 0x01;
memset(&buff[8],0,64);
// for(i = 0;i < 64;i ++)
// buff[i+8] = 0;
buff[72] = 0x91;
buff[73] = nCtlCode;
buff_len = 74;
if((nCtlCode == 4) || (nCtlCode == 2))
{
::WaitForSingleObject(hMutex_rx,1000);
rx_buf_head = 0;
rx_buf_end = 0;
rxbuf_received = 0;
::ReleaseMutex(hMutex_rx);
}
trynum = 0;
while(trynum < 1)
{
if(!(Flag = writedata(buff,buff_len)))
trynum ++;
else
{
trynum = 1;
// return Flag;
}
}
//清空接收缓冲
if((nCtlCode == 4) || (nCtlCode == 2))
{
Sleep(1000);
::WaitForSingleObject(hMutex_rx,1000);
rx_buf_head = 0;
rx_buf_end = 0;
rxbuf_received = 0;
::ReleaseMutex(hMutex_rx);
}
return Flag;
}
/************ReadCard()--读数据****************************
data:存放数据,ych:存放异常帧(0:无,1:超短,2:CRC错,3:不完整 以不同的位显示)
返回值:读出的数据字节数
***********************************************************/
int WINAPI ReadCard(unsigned char *data,BOOL *data_source,unsigned char *ych,unsigned int * pTime)
{
// BOOL BeSyncFlag=FALSE;
unsigned char temp_data;
unsigned char data_type;
unsigned short i = 0;
// int two_ins_nums;
// int multi_ins_nums;
int data_len;
int j=0;
// BOOL Flag;
do{
//读取同步头,连续4个SYNC_CODE
if(!read_data(&temp_data))return 0;
if(temp_data==SYNC_CODE)
i++;
else
i=0;
}while(i<4);
if(!read_data(&data_type))return 0; //读取数据类型
switch(data_type)
{
//无上传的指令
/* case 0: //指令
//保留字节
if(!(read_data(&temp_data)))
{
data_len=0;
return data_len;
}
Flag=read_data(&temp_data); //长度高位
if(!Flag)
{
data_len=0;
return data_len;
}
data_len=temp_data;
Flag=read_data(&temp_data); //长度低位
if(!Flag)
{
data_len=0;
return data_len;
}
data_len=(data_len<<8)|temp_data;
if(data_len>0)
{
for(i=0;i<data_len;i++)
{
Flag=read_data(&temp_data);
if(!Flag)
{
discard_num++;
data_len=0;
return data_len;
}
*(data+j)=temp_data;
j++;
}
}
break;
*/
case 1: //scc1数据
*data_source=0;
if(!read_data(ych))return 0;
//状态字节
//////
if(!pTime)
{
for( i = 0; i < 4; i ++)
{
if(!read_data(&temp_data))return 0;
}
}
else
{
for( i = 0; i < 4; i ++)
{
if(!read_data(((BYTE *)pTime+i)))return 0;
}
}
//要求 0 < data_len <= 2048
/* if((temp_data & 0xf0)||((temp_data&0x0f)>0x08))
{
// discard_num++;
return 0; //返回长度为0
}
*/
//数据长度
if(!read_data(&temp_data))return 0;
data_len=temp_data;
if(!read_data(&temp_data))return 0;
data_len=(data_len<<8) | temp_data;
if( (data_len > 2048) || (data_len < 0) )
return 0;
for(i=0;i<data_len;i++)
{
if(!read_data(&temp_data))return 0;
*(data+i)=temp_data;
}
break;
case 3:
case 2: //scc2数据
*data_source=1;
if(!read_data(ych))return 0; //状态字节
//////
if(!pTime)
{
for( i = 0; i < 4; i ++)
{
if(!read_data(&temp_data))return 0;
}
}
else
{
for( i = 0; i < 4; i ++)
{
if(!read_data(((BYTE *)pTime+i)))return 0;
}
}
if(!read_data(&temp_data))return 0;
//要求 0 < data_len <= 2048
/* if((temp_data & 0xf0)||((temp_data&0x0f)>0x08))
{
// discard_num++;
return 0;
}
*/
data_len=temp_data; //数据长度
if(!read_data(&temp_data))return 0;
data_len=(data_len<<8) | temp_data;
if( (data_len > 2048) || (data_len < 0))
return 0;
for(i=0;i<data_len;i++)
{
if(!read_data(&temp_data))return 0;
*(data+i)=temp_data;
}
break;
}
return data_len;
}
BOOL readcardstat(unsigned char *data)
{
BOOL BeSyncFlag=FALSE;
unsigned char temp_data;
unsigned char data_type;
unsigned short i = 0;
int data_len=0;//data_sum=0;
// int j=0;
// BOOL Flag;
BOOL GotStatOk = FALSE;
while((!GotStatOk)&&(data_len<20000))
{
do{
//读取同步头,连续4个SYNC_CODE
if(!read_data(&temp_data))return 0;
if(temp_data==SYNC_CODE)
i++;
else
i=0;
}while(i<4);
if(!read_data(&data_type))return 0; //读取数据类型
switch(data_type)
{
case 0: //指令
GotStatOk=TRUE;
if(!read_data(&temp_data))return 0; //保留字节
if(!read_data(&temp_data))return 0; //长度高位
//data_len=temp_data;
if(!read_data(&temp_data))return 0; //长度低位
//data_len=(data_len<<8)|temp_data;
data_len=2;
if(data_len>0)
{
for(i=0;i<data_len;i++)
{
if(!read_data(&temp_data))return 0;
*(data++)=temp_data;
// j++;
}
}
break;
case 1: //scc1数据
case 2: //scc2数据
if(!read_data(&temp_data))return 0;
//状态字节
if(!read_data(&temp_data))return 0;
//要求 0 < data_len <= 2048
if((temp_data & 0xf0)||((temp_data&0x0f)>0x08))
{
// discard_num++;
return 0;
}
data_len=temp_data; //数据长度
if(!read_data(&temp_data))return 0;
data_len=(data_len<<8) | temp_data;
for(i=0;i<data_len;i++)
{
if(!read_data(&temp_data))return 0;
}
break;
}
}
return GotStatOk;
}
int * WINAPI Stat_frame()
{
return fra_stat;
}
BOOL WINAPI SetTtc(BOOL bFlag)
{
unsigned char buff[100];
// int i = 0;
int buff_len=0;
BOOL Flag;
memset(buff,SYNC_CODE,4);
buff[4]=INS_FLAG;
buff[5]=0x00;
buff[6]=0x00;
buff[7]=0x01;
memset(&buff[8],0,64);
//for(i=0;i<64;i++)
// buff[i+8]=0;
buff[72]=0x92;
buff[73]=bFlag;
buff_len=74;
Flag=writedata(buff,buff_len);
return Flag;
}
//选择监测线路 0:双向,1:监测DTE方向,2:监测DCE方向,3:都不监测
BOOL WINAPI SetLineSel(int nLine)
{
unsigned char buff[100];
//int i = 0;
int buff_len=0;
BOOL Flag;
memset(buff,SYNC_CODE,4);
buff[4]=INS_FLAG;
buff[5]=0x00;
buff[6]=0x00;
buff[7]=0x01;
memset(&buff[8],0,64);
//for(i=0;i<64;i++)
// buff[i+8]=0;
buff[72]=0x93;
buff[73]=nLine;
buff_len=74;
Flag=writedata(buff,buff_len);
return Flag;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -