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 + -
显示快捷键?