svisupdisp.cpp

来自「七号信令解码器」· C++ 代码 · 共 2,501 行 · 第 1/5 页

CPP
2,501
字号
		  {dataleggel=0xff;
		   bytedisp(59)   //TRMED name,1byte
		   bytedisp(60)   //TRMED li,1byte
		   bytedisp(61)   //TRMED content,1bytes
		  }//exist TRMED
//No.62-64 field:ATRINFO,3bytes
		 if(*recbuf==0x2E)//exist ATRINFO
		  {dataleggel=0xff;
		   bytedisp(62)   //ATRINFO name,1byte
		   bytedisp(63)   //ATRINFO li,1byte
		   bytedisp(64)   //ATRINFO content,1bytes
		  }//exist ATRINFO
//No.65-67 field: PCINFO,P92
		 if(*recbuf==0x39)//exist PCINFO
		 {dataleggel=0xff;procISUPBaseOption(65);}
//No.68-70 field:CMINFO,3bytes
		 if(*recbuf==0x36)//exist CMINFO
		  {dataleggel=0xff;
		   bytedisp(68)   //CMINFO name,1byte
		   bytedisp(69)   //CMINFO li,1byte
		   bytedisp(70)   //CMINFO content,1bytes
		  }//exist CMINFO
//No.71-73 field:SACT,P93
		 if(*recbuf==0x33)//exist SACT
		 {dataleggel=0xff;procISUPBaseOption(71);}
//No.74-76 field:REDNLIT,3bytes
		 if(*recbuf==0x40)//exist REDNLIT
		  {dataleggel=0xff;
		   bytedisp(74)   //REDNLIT name,1byte
		   bytedisp(75)   //REDNLIT li,1byte
		   bytedisp(76)   //REDNLIT content,1bytes
		  }//exist REDNLIT
		 }//option over
		 break;

//table 36/6
		case 0x2D:/*USR*/
//No.12 field:ptr1
		 bytedisp(12)
//No.13 field:ptr2
		 bytedisp(13)
//No.14-15 field:USRIN,V
		 LI=*recbuf;
//No.14 field:USRINLI,V
		 bytedisp(14)
//No.15 field:USRIN content,V
		 *dispbuf++=15;
		 *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;
//No.16-18 field:ACCTR,P37,Option
		 if(*recbuf==0x03)//exist ACCTR
		  procISUPBaseOption(16);
		 break;

//table 26/6
		case 0x2F:/*CONF*/
//No.12 field:ptr1
		 bytedisp(12)
//No.13-17 field:CAUSELI and CAUSE content,V
			procISUPCAUSE(13);
		 break;

		case 0x31:/*CINF*/
		 break;

//table 46/6
		case 0x32:/*NRM*/
//No.12 field:ptr1
		 code=*recbuf;
		 bytedisp(12)

		 if (code==0) break;
		 dataleggel=0xff;
		 while(*recbuf!=0&&dataleggel==0xff)//option over
		 {dataleggel=0;
//No.13-15 field:MCINFO,P77
		 if(*recbuf==0x38)//exist MCINFO
		 {dataleggel=0xff;procISUPBaseOption(13);}
//No.16-18 field:PCINFO,P86
		 if(*recbuf==0x39)//exist PCINFO
		 {dataleggel=0xff;procISUPBaseOption(16);}
//No.19-21 field:ECINFO,3bytes
		 if(*recbuf==0x37)//exist ECINFO
		  {dataleggel=0xff;
		   bytedisp(19)   //ECINFO name,1byte
		   bytedisp(20)   //ECINFO li,1byte
		   bytedisp(21)   //ECINFO content,1bytes
		  }//exist ECINFO
//No.22-24 field:TRMED,3bytes
		 if(*recbuf==0x3e)//exist TRMED
		  {dataleggel=0xff;
		   bytedisp(22)   //TRMED name,1byte
		   bytedisp(23)   //TRMED li,1byte
		   bytedisp(24)   //TRMED content,1bytes
		  }//exist TRMED
		 }//option over
		 break;

//table 45/6
		case 0x33:/*FAC*/
//No.12 field:ptr1
		 code=*recbuf;
		 bytedisp(12)

		 if (code==0) break;
		 dataleggel=0xff;
		 while(*recbuf!=0&&dataleggel==0xff)//option over
		 {dataleggel=0;
//No.13-15 field:MCINFO,P77
		 if(*recbuf==0x38)//exist MCINFO
		 {dataleggel=0xff;procISUPBaseOption(13);}
//No.16-18 field:PCINFO,P86
		 if(*recbuf==0x39)//exist PCINFO
		 {dataleggel=0xff;procISUPBaseOption(16);}
//No.19-21 field: REOPER,P92
		 if(*recbuf==0x32)//exist REOPER
		 {dataleggel=0xff;procISUPBaseOption(19);}
//No.23-25 field:SACT,P93
		 if(*recbuf==0x33)//exist SACT
		 {dataleggel=0xff;procISUPBaseOption(22);}
		 }//option over
		 break;

//table 44/6
		case 0x34:/*UPT*/
		case 0x35:/*UPA*/
//No.12 field:ptr1
		 bytedisp(12)
//No.13-15 field:MCINFO,P77
		 if(*recbuf==0x39)//exist MCINFO
		  procISUPBaseOption(13);
		 break;

//table 47/6
		case 0x36:/*IDR*/
//No.12 field:ptr1
		 code=*recbuf;
		 bytedisp(12)

		 if (code==0) break;
		 dataleggel=0xff;
		 while(*recbuf!=0&&dataleggel==0xff)//option over
		 {dataleggel=0;
//No.13-15 field:MCIDREQ,P77
		 if(*recbuf==0x3b)//exist MCIDREQ
		 {dataleggel=0xff;procISUPBaseOption(13);}
//No.16-18 field:MCINFO,P77
		 if(*recbuf==0x38)//exist MCINFO
		 {procISUPBaseOption(16);dataleggel=0xff;}
//No.19-21 field:PCINFO,P77
		 if(*recbuf==0x39)//exist PCINFO
		 {procISUPBaseOption(19);dataleggel=0xff;}
		 }//option over
		 break;

//table 48/6
		case 0x37:/*IRS*/
//No.12 field:ptr1
		 code=*recbuf;
		 bytedisp(12)

		 if (code==0) break;
		 dataleggel=0xff;
		 while(*recbuf!=0&&dataleggel==0xff)//option over
		 {dataleggel=0;
//No.13-15 field:MCIDRESI,P77
		 if(*recbuf==0x3c)//exist MCIDRESI
		 {dataleggel=0xff;procISUPBaseOption(13);}
//No.16-18 field:MCINFO,P77
		 if(*recbuf==0x38)//exist MCINFO
		 {dataleggel=0xff;procISUPBaseOption(16);}
//No.19-21 field:PCINFO,P77
		 if(*recbuf==0x39)//exist PCINFO
		 {dataleggel=0xff;procISUPBaseOption(19);}
//No.22-30 field:CLGNO
		if(*recbuf==0x0a)//exist CLGNO
		 {dataleggel=0xff;
//No.22 field:CLGNO para name,8bits
		  bytedisp(22)
//No.23-30 field:CLGNOLI and CLGNO content
		  procISUPCLGNOdisp(23);
		 }//exist CLGNO
//No.31-33 field:ACCTR,P37
		 if(*recbuf==0x03)//exist ACCTR
		 {dataleggel=0xff;procISUPBaseOption(31);}
//No.34-43 field:GN,P67,may repeat
		while(*recbuf==0xc0)//exist GN
		 {dataleggel=0xff;
//No.34 field:GN para name,8bits
		  bytedisp(34)
//No.35-43 field:GNLI and GN content,8bits
		  procISUPGNdisp(35);
		 }//exist GN
		 }//option over
		 break;

//table 49/6
		case 0x38:/*SGM*/
//No.12 field:ptr1
		 code=*recbuf;
		 bytedisp(12)

		 if (code==0) break;
		 dataleggel=0xff;
		 while(*recbuf!=0&&dataleggel==0xff)//option over
		 {dataleggel=0;
//No.13-15 field:ACCTR,P37
		  if(*recbuf==0x03)//exist ACCTR
		  {dataleggel=0xff;procISUPBaseOption(13);}
//No.16-18 field:USRIN,P37
		  if(*recbuf==0x20)//exist USRIN
		  {dataleggel=0xff;procISUPBaseOption(16);}
//No.19-21 field:MCINFO,P37,may repeat
		  if(*recbuf==0x38)//exist MCINFO
		  {dataleggel=0xff;procISUPBaseOption(19);}
//No.108-112:GD,P64,may repeat
		  while(*recbuf==0xc1)//exist GD
		  {dataleggel=0xff;
//No.22 field:GD para name,8bits
		   bytedisp(22)
//No.23 field:GDLI,8bits
		   *dispbuf++=23;
		   *dispbuf++=1;
		   LI=*dispbuf++=*recbuf++;
		   *dispbuf++=8;
		   *dispbuf++=LI;
		   *dispbuf++=0xcc;
		   displen+=6;
//No.24-26 field:GD
		   if(LI!=0)	  procISUPGDdisp(LI,24);
		  }//while GD
//No.27-29 field:CINFOI,3bytes,P66,may repeat
		  while(*recbuf==0x2c)//exist CINFOI
		  {dataleggel=0xff;
		   bytedisp(27)
		   bytedisp(28)
		   bytedisp(29)
		  }//WHILE
//No.30-39 field:GN,P67,may repeat
		  while(*recbuf==0xc0)//exist GN
		  {dataleggel=0xff;
//No.30 field:GN para name,8bits
		   bytedisp(30)
//No.31-39 field:GNLI and GN content,8bits
		   procISUPGNdisp(31);
		  }//while GN
		 }//option over
		 break;

//table 50/6
		case 0xfc:/*CCL*/
		case 0xfe:/*OPR*/
//No.12 field:ptr1
		 bytedisp(12)
//No.13-15 field:MCINFO
		if(*recbuf==0x38)//exist MCINFO
		 procISUPBaseOption(13);
		 break;

//table 51/6
		case 0xfd:/*MPM*/
//No.12 field:CINF,2bytes,F
		 proc2byte(12)
//No.13 field:ptr1
		 bytedisp(13)
//No.14-16 field:MCINFO
		if(*recbuf==0x38)//exist MCINFO
		 procISUPBaseOption(14);

		 break;

		default:
		 if(slen>0) procmoredatadisp(slen);
		 break;
	  }/*MT*/
	}/*if slen!=0,message isn't end*/
}


void procISUPRangeStatusdisp(BYTE dfldno)
{ BYTE i,LI;
  LI=*recbuf;    //get RG&STLI
  bytedisp(dfldno)
//No.15 field:range of RG&STLI,1byte ,P88
  bytedisp(dfldno+1)
//No.16 field:status of RG&STLI ,P88
  if(LI>1)//exist status
  {LI--;
   if(LI>=32)
   {*dispbuf++=dfldno+2;
	*dispbuf++=LI;
	for(i=0;i<LI;i++) *dispbuf++=*(recbuf+i);
	*dispbuf++=0;
	*dispbuf++=LI;
	for(i=0;i<LI;i++) *dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
	displen+=LI*2+5;
   }
   else
   {*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;
   }
  }//exist status
}

void procISUPCAUSE(BYTE dfldno)
{   BYTE i,li;
//CAUSELI,8bits
	 *dispbuf++=dfldno;
	 *dispbuf++=1;
	 li=*dispbuf++=*recbuf++;
	 *dispbuf++=8;
	 *dispbuf++=li;
	 *dispbuf++=0xcc;
	 displen+=6;
//position:D3-D0
	 *dispbuf++=dfldno+1;
	 *dispbuf++=1;
	 *dispbuf++=*recbuf;
	 *dispbuf++=4;
	 *dispbuf++=*recbuf<<4;
	 *dispbuf++=0xcc;
//code standard:D6-D5
	 *dispbuf++=dfldno+2;
	 *dispbuf++=0;
	 *dispbuf++=2;
	 *dispbuf++=(*recbuf&0x60)<<1;
	 *dispbuf++=0xcc;
	 recbuf++;
//cause value:D6-D0
	 *dispbuf++=dfldno+3;
	 *dispbuf++=1;
	 *dispbuf++=*recbuf;
	 *dispbuf++=7;
	 *dispbuf++=*recbuf<<1;
	 *dispbuf++=0xcc;
	 recbuf++;
	 displen+=17;
//diagnostic
	 if(li>2)//exist dialog
	  {li-=2;
		*dispbuf++=dfldno+4;
		*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 procISUPCLDPC(BYTE dfldno)
{ BYTE oddeven,i,li;
//No.18 field:CALNOLI,8bits
		*dispbuf++=dfldno;
		*dispbuf++=1;
		li=*dispbuf++=*recbuf++;
		*dispbuf++=8;
		*dispbuf++=li;
		*dispbuf++=0xcc;
		displen+=6;

//ADDRIN,7bits:D6-D0
		*dispbuf++=dfldno+1;
		*dispbuf++=1;
		*dispbuf++=*recbuf;
		*dispbuf++=7;
		*dispbuf++=(*recbuf)<<1;
		*dispbuf++=0xcc;
//odd/even,1bit:d7
		*dispbuf++=dfldno+2;
		*dispbuf++=0;
		*dispbuf++=1;
		oddeven=*dispbuf++=(*recbuf)&0x80;
		*dispbuf++=0xcc;
		displen+=11;
		recbuf++;
//codesech,3bits:D6-D4
		*dispbuf++=dfldno+3;
		*dispbuf++=1;
		*dispbuf++=*recbuf;
		*dispbuf++=3;
		*dispbuf++=(*recbuf&0x70)<<1;
		*dispbuf++=0xcc;
//INNIN,1bit:d7
		*dispbuf++=dfldno+4;
		*dispbuf++=0;
		*dispbuf++=1;
		*dispbuf++=(*recbuf)&0x80;
		*dispbuf++=0xcc;
		displen+=11;
		recbuf++;
//ADDR
		if(li>2)
		 {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)>>4)|((*recbuf)<<4);recbuf++;}
		  }
		  else
		  {*dispbuf++=li*8-4;
		   for(i=0;i<li-1;i++) {*dispbuf++=((*recbuf)>>4)|((*recbuf)<<4);recbuf++;}
		   *dispbuf++=(*recbuf)<<4;recbuf++;
		  }
		  *dispbuf++=0xcc;
		  displen+=li*2+4;
		 }//exist ADDR
}



void procISUPCONNOdisp(BYTE dfldno)//update by 2000.07.19
{ BYTE oddeven,i,li;
//No.18 field:CONNOLI,8bits
		*dispbuf++=dfldno;  //update by 2000.07.19
		*dispbuf++=1;
		li=*dispbuf++=*recbuf++;
		*dispbuf++=8;
		*dispbuf++=li;
		*dispbuf++=0xcc;
		displen+=6;
//ADDRIN,7bits:D6-D0
		*dispbuf++=dfldno+1;
		*dispbuf++=1;
		*dispbuf++=*recbuf;
		*dispbuf++=7;
		*dispbuf++=(*recbuf)<<1;
		*dispbuf++=0xcc;
//odd/even,1bit:d7
		*dispbuf++=dfldno+2;
		*dispbuf++=0;
		*dispbuf++=1;
		oddeven=*dispbuf++=(*recbuf)&0x80;
		*dispbuf++=0xcc;
		displen+=11;
		recbuf++;
//2bits:D1-D0
		*dispbuf++=dfldno+3;
		*dispbuf++=1;
		*dispbuf++=*recbuf;
		*dispbuf++=2;
		*dispbuf++=*recbuf<<6;
		*dispbuf++=0xcc;
//2bit:D3-D2
		*dispbuf++=dfldno+4;
		*dispbuf++=0;
		*dispbuf++=2;
		*dispbuf++=(*recbuf&0x0c)<<4;
		*dispbuf++=0xcc;
//3bit:D6-D4
		*dispbuf++=dfldno+5;
		*dispbuf++=0;
		*dispbuf++=3;
		*dispbuf++=(*recbuf&0x70)<<1;
		*dispbuf++=0xcc;

		displen+=16;
		recbuf++;
//ADDR
		if(li>2)
		 {li-=2;
		  *dispbuf++=dfldno+6;
		  *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
}




⌨️ 快捷键说明

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