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

📄 svisupdisp.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/************************************************
Update History:
2000.06.08:procISUPCLGNOdisp()
2000.07.11:procISUPGNdisp()
2000.07.19:procISUPCONNOdisp()
*************************************************/
#include "stdafx.h"
#include <windows.h>

extern BYTE *dispbuf,*recbuf;
extern WORD displen;
extern WORD Version; 

#define bytedisp(x) *dispbuf++=x;       \
					*dispbuf++=1;       \
					*dispbuf++=*recbuf; \
					*dispbuf++=8;		 \
					*dispbuf++=*recbuf++;\
					*dispbuf++=0xcc;	 \
					displen+=6;
#define procOPTIONoverDisp(x)	*dispbuf++=x;  \
								*dispbuf++=1;	\
								*dispbuf++=0;	\
								*dispbuf++=8;	\
								*dispbuf++=0;	\
								*dispbuf++=0xcc;\
								displen+=6;
#define proc3byte(x)	*dispbuf++=x;\
						*dispbuf++=3;\
						*dispbuf++=*recbuf;\
						*dispbuf++=*(recbuf+1);\
						*dispbuf++=*(recbuf+2);\
						*dispbuf++=24;\
						*dispbuf++=*(recbuf+2);\
						*dispbuf++=*(recbuf+1);\
						*dispbuf++=*recbuf;\
						*dispbuf++=0xcc;\
						displen+=10;recbuf+=3;

#define proc2byte(x)	*dispbuf++=x;\
						*dispbuf++=2;\
						*(WORD *)dispbuf=*(WORD *)recbuf;dispbuf+=2;\
						*dispbuf++=16;\
						*dispbuf++=*(recbuf+1);\
						*dispbuf++=*recbuf;recbuf+=2;\
						*dispbuf++=0xcc;\
						displen+=8;

extern void procDPCOPCSLC14disp();
extern void proc24bitsdisp(BYTE dfldno);
extern void proc8bitsdisp(BYTE dfldno);

void procISUPCLGNOdisp(BYTE dfldno)
{ BYTE li,oddeven,i;
//CLGNOLI,8bits
	*dispbuf++=dfldno;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=8;
	*dispbuf++=li;
	*dispbuf++=0xcc;
	displen+=6;
//ADDIN:D6-D0
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=7;
	*dispbuf++=(*recbuf)<<1;
	*dispbuf++=0xcc;
//odd\even:D7
	*dispbuf++=dfldno+2;
	*dispbuf++=0;
	*dispbuf++=1;
	oddeven=*dispbuf++=*recbuf&0x80;
	*dispbuf++=0xcc;
	recbuf++;
//D1-D0
	*dispbuf++=dfldno+3;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=2;
	*dispbuf++=(*recbuf)<<6;
	*dispbuf++=0xcc;
//D3-d2
	*dispbuf++=dfldno+4;
	*dispbuf++=0;
	*dispbuf++=2;
	*dispbuf++=(*recbuf&0x0c)<<4;  //update by 2000.06.08
	*dispbuf++=0xcc;
//D6-d4
	*dispbuf++=dfldno+5;
	*dispbuf++=0;
	*dispbuf++=3;
	*dispbuf++=(*recbuf&0x70)<<1;
	*dispbuf++=0xcc;
//D7
	*dispbuf++=dfldno+6;
	*dispbuf++=0;
	*dispbuf++=1;
	*dispbuf++=*recbuf&0x80;
	*dispbuf++=0xcc;
	recbuf++;
	displen+=32;

	li-=2;
	if(li!=0)//exist ADDR
	  {*dispbuf++=dfldno+7;
		*dispbuf++=li;
		for(i=0;i<li;i++) *dispbuf++=*(recbuf+i);
		if(oddeven==0x80)  //addr is odd(with ST)
		 {displen+=li*2+3;
		  li--;
		  *dispbuf++=li*8;
		  for(i=0;i<li;i++) *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		  recbuf+=li+1;
		 }
		else  //addr is even(with ST)
		 {*dispbuf++=li*8-4;
		  for(i=0;i<li-1;i++)
		  *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		  *dispbuf++=(*(recbuf+li-1))<<4;
		  recbuf+=li;
		  displen+=li*2+4;
		 }
		*dispbuf++=0xcc;
	 }//exist ADDR
}

void procISUPNSPERdisp(BYTE dfldno)
{  BYTE len,li,i;
//NSPERLI,8bits
	*dispbuf++=dfldno;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=8;
	*dispbuf++=li;
	*dispbuf++=0xcc;
	displen+=6;
//network len,8bits,P82
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	len=*dispbuf++=*recbuf++;
	*dispbuf++=8;
	*dispbuf++=len;
	*dispbuf++=0xcc;
	displen+=6;

	if(len!=0)
	 {
//D3-D0
	  *dispbuf++=dfldno+2;
	  *dispbuf++=1;
	  *dispbuf++=*recbuf;
	  *dispbuf++=4;
	  *dispbuf++=(*recbuf)<<4;
	  *dispbuf++=0xcc;
//D6-D4
	  *dispbuf++=dfldno+3;
	  *dispbuf++=0;
	  *dispbuf++=3;
	  *dispbuf++=(*recbuf&0x70)<<1;
	  *dispbuf++=0xcc;
	  displen+=11;
	  recbuf++;
//NETWORK ID
	  len--;
	  if(len!=0)
		 {*dispbuf++=dfldno+4;
		  *dispbuf++=len;
		  for(i=0;i<len;i++) *dispbuf++=*(recbuf+i);
		  *dispbuf++=len*8;
		  for(i=0;i<len;i++) *dispbuf++=*(recbuf+i);
		  *dispbuf++=0xcc;
		  displen+=len*2+4;
		 }
	 }
//NSPER
	if(li>len+1)
	 {li-=len-1;
	  *dispbuf++=dfldno+5;
	  *dispbuf++=li;
	  for(i=0;i<li;i++) *dispbuf++=*(recbuf+i);
	  *dispbuf++=li*8;
	  for(i=0;i<li;i++) *dispbuf++=*(recbuf+i);
	  *dispbuf++=0xcc;
	  displen+=li*2+4;
	 }
}

void procISUPGDdisp(BYTE li,BYTE dfldno)
{  BYTE i;
//digital type:D4-D0
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=5;
	*dispbuf++=(*recbuf)<<3;
	*dispbuf++=0xcc;
//D7-D5
	*dispbuf++=dfldno+1;
	*dispbuf++=0;
	*dispbuf++=3;
	*dispbuf++=(*recbuf++)&0xe0;
	*dispbuf++=0xcc;
	displen+=11;
//digital
	if(li>1)
	 {li--;
	  *dispbuf++=dfldno+2;
	  *dispbuf++=li;
	  for(i=0;i<li;i++) *dispbuf++=*(recbuf+i);
	  *dispbuf++=li*8;
	  for(i=0;i<li;i++) *dispbuf++=*recbuf++;
	  *dispbuf++=0xcc;
	  displen+=li*2+4;
	 }
}


void procISUPGNdisp(BYTE dfldno)
{ BYTE li,oddeven,i;

//GNLI,8bits
	*dispbuf++=dfldno;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=8;
	*dispbuf++=li;
	*dispbuf++=0xcc;
	displen+=6;
//in:8bits
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=8;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//ADDIN:D6-D0
	*dispbuf++=dfldno+2;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=7;
	*dispbuf++=(*recbuf)<<1;
	*dispbuf++=0xcc;
//odd\even:D7
	*dispbuf++=dfldno+3;
	*dispbuf++=0;
	*dispbuf++=1;
	oddeven=*dispbuf++=*recbuf&0x80;
	*dispbuf++=0xcc;
	recbuf++;
//D1-D0
	*dispbuf++=dfldno+4;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=2;
	*dispbuf++=(*recbuf)<<6;
	*dispbuf++=0xcc;
//D3-d2
	*dispbuf++=dfldno+5;
	*dispbuf++=0;
	*dispbuf++=2;
	*dispbuf++=(*recbuf&0x0c)<<2;
	*dispbuf++=0xcc;
//D5-d4
	*dispbuf++=dfldno+6;
	*dispbuf++=0;
	*dispbuf++=2;
	*dispbuf++=(*recbuf&0x30)<<2;
	*dispbuf++=0xcc;

//NIIN:D7-D6
	*dispbuf++=dfldno+7;
	*dispbuf++=0;
	*dispbuf++=2;
	*dispbuf++=*recbuf&0xc0;
	*dispbuf++=0xcc;
	recbuf++;
	displen+=38;

	li-=3;  //update by 2000.07.11
	if(li!=0)//exist ADDR
	  {*dispbuf++=dfldno+8;
		*dispbuf++=li;
		for(i=0;i<li;i++) *dispbuf++=*(recbuf+i);
		if(oddeven==0)
		 {*dispbuf++=li*8;
		  for(i=0;i<li;i++)
			 *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		 }
		else
		 {*dispbuf++=li*8-4;
		  for(i=0;i<li-1;i++)
		  *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		  *dispbuf++=(*(recbuf+li-1))<<4;
		 }
		*dispbuf++=0xcc;
		recbuf+=li;
		displen+=li*2+4;
	 }//exist ADDR
}



void procISUPOCLDNOdisp(BYTE dfldno)
{  BYTE oddeven,i,li;
//No.67 field:RORCNOLI,8bits
	*dispbuf++=dfldno;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=8;
	*dispbuf++=li;
	*dispbuf++=0xcc;
	displen+=6;
//ADDIN:D6-D0
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=7;
	*dispbuf++=(*recbuf)<<1;
	*dispbuf++=0xcc;
//odd\even:D7
	*dispbuf++=dfldno+2;
	*dispbuf++=0;
	*dispbuf++=1;
	oddeven=*dispbuf++=*recbuf&0x80;
	*dispbuf++=0xcc;
	recbuf++;
//D2
	*dispbuf++=dfldno+3;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=1;
	*dispbuf++=(*recbuf&0x04)<<5;
	*dispbuf++=0xcc;
//D6-D4
	*dispbuf++=dfldno+4;
	*dispbuf++=0;
	*dispbuf++=4;
	*dispbuf++=(*recbuf&0x78)<<1;
	*dispbuf++=0xcc;
	recbuf++;
	displen+=22;

	if(li>2)//exist ADDR
	  {li-=2;
		*dispbuf++=dfldno+5;
		*dispbuf++=li;
		for(i=0;i<li;i++) *dispbuf++=*(recbuf+i);
		if(oddeven==0)
		 {*dispbuf++=li*8;
		  for(i=0;i<li;i++)
			 *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		 }
		else
		 {*dispbuf++=li*8-4;
		  for(i=0;i<li-1;i++)
		  *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		  *dispbuf++=(*(recbuf+li-1))<<4;
		 }
		*dispbuf++=0xcc;
		recbuf+=li;
		displen+=li*2+4;
	 }//exist ADDR
}

void procISUPOCONNOdisp(BYTE li,BYTE dfldno)
{  BYTE i,oddeven;
//ADDIN:D6-D0
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=7;
	*dispbuf++=(*recbuf)<<1;
	*dispbuf++=0xcc;
//odd\even:D7
	*dispbuf++=dfldno+1;
	*dispbuf++=0;
	*dispbuf++=1;
	oddeven=*dispbuf++=*recbuf&0x80;
	*dispbuf++=0xcc;
	recbuf++;
//D1-D0
	*dispbuf++=dfldno+2;
	*dispbuf++=1;
	*dispbuf++=*recbuf;
	*dispbuf++=2;
	*dispbuf++=*recbuf<<6;
	*dispbuf++=0xcc;
//D3-D2
	*dispbuf++=dfldno+3;
	*dispbuf++=0;
	*dispbuf++=2;
	*dispbuf++=(*recbuf&0xc)<<4;
	*dispbuf++=0xcc;
	recbuf++;
//D6-D4
	*dispbuf++=dfldno+3;
	*dispbuf++=0;
	*dispbuf++=3;
	*dispbuf++=(*recbuf&0x70)<<1;
	*dispbuf++=0xcc;
	recbuf++;
	displen+=25;

	li-=2;
	if(li>0)//exist ADDR
	  {*dispbuf++=dfldno+4;
		*dispbuf++=li;
		for(i=0;i<li;i++) *dispbuf++=*(recbuf+i);
		if(oddeven==0)
		 {*dispbuf++=li*8;
		  for(i=0;i<li;i++)
			 *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		 }
		else
		 {*dispbuf++=li*8-4;
		  for(i=0;i<li-1;i++)
		  *dispbuf++=(*(recbuf+i)>>4)|(*(recbuf+i)<<4);
		  *dispbuf++=(*(recbuf+li-1))<<4;
		 }
		*dispbuf++=0xcc;
		recbuf+=li;
		displen+=li*2+4;
	 }//exist ADDR
}

void procISUPPCINFO(BYTE dfldno) //P86
{  BYTE li;
//option para name,8bits
	bytedisp(dfldno)
//option li,8bits
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=8;
	*dispbuf++=li;
	*dispbuf++=0xcc;

	while(li>=2)
	{*dispbuf++=dfldno+2;
	 *dispbuf++=1;
	 *dispbuf++=*recbuf;
	 *dispbuf++=8;
	 *dispbuf++=*recbuf++;
	 *dispbuf++=0xcc;
	 *dispbuf++=dfldno+3;
	 *dispbuf++=1;
	 *dispbuf++=*recbuf;
	 *dispbuf++=8;
	 *dispbuf++=*recbuf++;
	 *dispbuf++=0xcc;

	 displen+=12;
	 li-=2;
	}//while
	if(li > 0) //add by 2000.07.11
		recbuf += li;
}


void procISUPCRdisp(BYTE li,BYTE dfldno) //P86
{
//local ref,16bits
	if(li<5) {recbuf+=li;return;}

	*dispbuf++=dfldno;
	*dispbuf++=2;
	*(WORD *)dispbuf=*(WORD *)recbuf;
	dispbuf+=2;
	*dispbuf++=16;
	*(WORD *)dispbuf=*(WORD *)recbuf;
	dispbuf+=2;recbuf+=2;
	*dispbuf++=0xcc;
	displen+=8;
//point code
	proc3byte(dfldno+1)

	li-=5;
	if(li>0)
	{bytedisp(dfldno+2)
	 li--;
	 if(li>0)
	 {*dispbuf++=dfldno;
	  *dispbuf++=2;
	  *(WORD *)dispbuf=*(WORD *)recbuf;
	  dispbuf+=2;
	  *dispbuf++=16;
	  *(WORD *)dispbuf=*(WORD *)recbuf;
	  dispbuf+=2;recbuf+=2;
	  *dispbuf++=0xcc;
	  displen+=8;
	 }
	}
}



void procISUPBaseOption(BYTE dfldno)
{  BYTE i,li;
//option para name,8bits

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -