⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 carditfa.cpp.bak

📁 一个vxworks开发的snmp的程序
💻 BAK
📖 第 1 页 / 共 3 页
字号:
	
	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 + -