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

📄 sccpdispgsm.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	 *dispbuf++ = 1; 				/*source data byte */
	 temp1 = *recbuf++;
	 *dispbuf++ = temp1;       /*source data*/
	 *dispbuf++ =4;				/*display bit len:24*/
	 *dispbuf++ = temp1<<4;
	 *dispbuf++ = 0xcc;			/*end flag*/
	 displen += 6;

	 slen -= 7;
	 is24bits=1;
	}/*DPC/OPC is 14bits*/
  else /*illegal data*/
	{procmoredatadisp(slen);  return;}
/*proc MT,10th field*/
  temp1 = *recbuf;  /*get MT*/
  //proc8bitsdisp(10); /*display fld:10*/
  bytedisp(10)
  slen--;

  if(slen!=0)/*message isn't end*/
	{switch(temp1)/*MT*/
	  {
		case 0x01:/*CR*/
/*No.11 field(SLR:24Bits,Fixed)*/
		 proc24bitsdisp(11);  /*display fld:11*/
/*No.12(PCLSS)& 13(OPT) field(Protocol class:8bits,Fixed)*/
		 *dispbuf++=12;
		 *dispbuf++=1;
		 *dispbuf++=*recbuf;
		 *dispbuf++=4;
		 *dispbuf++=(*recbuf)<<4;
		 *dispbuf++=0xcc;
		 *dispbuf++=13;
		 *dispbuf++=0;
		 *dispbuf++=4;
		 *dispbuf++=(*recbuf++)&0xf0;  /*recbuf-->CLDPA's pointer*/
		 *dispbuf++=0xcc;
		 displen+=11;
/*No.14 field(CLDPA's pointer,8bits)*/
		 bufbak=recbuf;
		 proc8bitsdisp(14); /*display fld:14*/
/*No.15 field(Option's start pointer,8bits)*/
		 proc8bitsdisp(15); /*display fld:15*/
/*No.16-24 field(CLDPA,V)*/
		 temp1=*bufbak++;   /*get CLDPA's pointer & -->Option's pointer*/
		 recbuf=bufbak+temp1-1;
		 procSCCPADDRDisp(16,is24bits);/*display fld:16*/

		 temp1=*bufbak; /*get Option's pointer */
		 recbuf=bufbak+temp1;/*recbuf-->1st Option's name*/

		 if(*recbuf==0x09)/*exist CREDIT option(total 3 bytes,3 fields)*/
		  {
/*NO.25 field(credit name:8bits,O)*/
			proc8bitsdisp(25); /*display fld:25*/
/*NO.26 field(credit length:8bits:O)*/
			proc8bitsdisp(26); /*display fld:26*/
/*NO.27 field(credit:8bits,O)*/
			proc8bitsdisp(27); /*display fld:27*/
		  }/*exist CREDIT option(total 3 bytes,3 fields)*/
		 if (*recbuf==0x04)/*exist Calling Address*/
		  {
/*NO.28 field(CLGPA name:8bits,O)*/
			proc8bitsdisp(28); /*display fld:28*/
/*NO.29-37 field(CLGPA content,O)*/
			temp1=*recbuf+1;  /*get CLGPA length*/
			bufbak=recbuf;
			procSCCPADDRDisp(29,is24bits);/*display fld:29*/
			recbuf=bufbak+temp1;
		  }/*exist Calling Address*/

		 if(*recbuf==0x0f)/*exist data option*/
		  {
/*NO.38 field(DATA name:8bits,O)*/
			proc8bitsdisp(38); /*display fld:38*/
/*NO.39,80h field(DATA,O)*/
			bufbak=recbuf;
			procSCCPDATADisp(39);/*display fld:39*/

			recbuf=bufbak+1;
#if MultiTS
			procGSMAdisp();
#endif
		 }/*exist data option*/
/*No.40:option over*/
//		 procOPTIONoverDisp(40) /*display fld:40*/
		 break;

		case 0x02:/*CC*/
/*No.11 field(DLR:24Bits,Fixed)*/
		 proc24bitsdisp(11);  /*display fld:11*/
/*No.12 field(SLR:24Bits,Fixed)*/
		 proc24bitsdisp(12);  /*display fld:12*/
/*No.13(PCLSS)& 14(OPT) field(Protocol class:8bits,Fixed)*/
			*dispbuf++=13;
			*dispbuf++=1;
			*dispbuf++=*recbuf;
			*dispbuf++=4;
			*dispbuf++=(*recbuf)<<4;
			*dispbuf++=0xcc;
			*dispbuf++=14;
			*dispbuf++=0;
			*dispbuf++=4;
			*dispbuf++=(*recbuf++)&0xf0;
			*dispbuf++=0xcc;
			displen+=11;
			dfldno=12;
/*No.15 field(Option's start pointer:8bits,Fixed)*/
		 proc8bitsdisp(15);   /*display fld:15*/

		 if(*recbuf==0x09)/*exist credit option(total 3 bytes)*/
		  {
/*No.16 field(credit name:8bits,O)*/
			proc8bitsdisp(16);   /*display fld:16*/
/*No.17 field(credit length:8bits,O)*/
			proc8bitsdisp(17);   /*display fld:17*/
/*No.18 field(credit:8bits,O)*/
			proc8bitsdisp(18);   /*display fld:18*/
		  }/*exist credit option*/
		 if(*recbuf==0x04)/*exist Calling Address*/
		  {
/*No.19 field(CLGPA name:8bits,O)*/
			proc8bitsdisp(19);   /*display fld:19*/
/*No.20-28 field(CLGPA content,O)*/
			procSCCPADDRDisp(20,is24bits); /*display fld:20*/
		  }/*exist Calling Address*/
		 if(*recbuf==0x0f)/*exist data option*/
		  {
/*No.29 field(DATA name:8bits,O)*/
			proc8bitsdisp(29);  /*display fld:29*/
/*No.30 field(DATA length:8bits,O) & 80H field(DATA content,O)*/
			bufbak=recbuf;
			procSCCPDATADisp(30);  /*display fld:30*/

			recbuf=bufbak+1;
#if MultiTS
			procGSMAdisp();  //GSMA
#endif
		  }/*exist data option*/
/*No.31:option over*/
//		 procOPTIONoverDisp(31) /*display fld:31*/
		 break;

		case 0x03:/*CREF*/
/*No.11 field(SLR:24Bits,Fixed)*/
		 proc3byte(11)          /*display fld:11*/
/*No.12 field(Reject Case:8bits,Fixed)*/
		 bytedisp(12)           /*display fld:12*/
/*No.13 field(Option's start pointer,8bits)*/
		 bytedisp(13)           /*display fld:13*/

		 if(*recbuf==0x04)/*exist Calling Address*/
		  {
/*No.14 field(CLGPA name:8bits,O)*/
			bytedisp(14)         /*display fld:14*/
/*No.15-23 field(CLGPA content,O)*/
			procSCCPADDRDisp(15,is24bits);
		  }/*exist Calling Address*/
		 if(*recbuf==0x0f)/*exist data option*/
		  {
/*No.24 field(DATA name:8bits,O)*/
			bytedisp(24)         /*display fld:24*/
/*No.25 field(DATA length:8bits,O) & 80H field(DATA,O)*/
			procSCCPDATADisp(25);
		  }/*exist data option*/
/*No.26:option over*/
		 procOPTIONoverDisp(26) /*display fld:26*/
		 break;

		case 0x04:/*RLSD*/
		case 0x05:/*RLC*/
/*No.11 field(DLR:24bits,Fixed)*/
		 proc3byte(11)          /*display fld:11*/
/*No.12 field(SLR:24bits,Fixed)*/
		 proc3byte(12)          /*display fld:12*/
		 if (temp1==0x05) break;
/*No.13 field(Release case:8bits,Fixed)*/
		 bytedisp(13)           /*display fld:13*/
/*No.14 field(Option's start pointer:8bits,Fixed)*/
		 bytedisp(14)           /*display fld:14*/
		 if(*recbuf==0x0f)/*exist data option*/
		  {
/*No.15 field(DATA name:8bits,O)*/
			bytedisp(15)         /*display fld:24*/
/*No.16 field(DATA length:8bits,O) & 80H field(DATA,O)*/
			procSCCPDATADisp(16);
		  }/*exist data option*/
/*No.17:option over*/
		 procOPTIONoverDisp(17) /*display fld:17*/
		 break;

		case 0x06:/*DT1*/
/*No.11 field(DLR:24bits,Fixed)*/
		 proc3byte(11)          /*display fld:11*/
/*No.12 field(Segment/Reload:1bit,D0,Fixed)*/
		 *dispbuf++=12;
		 *dispbuf++=1;
		 *dispbuf++=*recbuf;
		 *dispbuf++=1;
		 *dispbuf++=(*recbuf<<7);
		 *dispbuf++=0xcc;
		 displen+=6;
		 recbuf++;
/*No.13 field(data field pointer:8bits,F)*/
		 bytedisp(13)           /*display fld:13*/
/*No.14 field(DATA length:8bits,V) & 80H field(DATA content,V)*/
		 bufbak=recbuf;
		 procSCCPDATADisp(14);

		 recbuf=bufbak+1;
#if MultiTS
		 procGSMAdisp();  //GSMA
#endif

		 break;

		case 0x07:/*DT2*/
/*No.11 field(DLR:24bits,Fixed)*/
		 proc3byte(11)          /*display fld:11*/
//Sort/Segment:2bytes,Fixed)
//No.12( P(S):D7-D1 of byte1 )
		 *dispbuf++=12;
		 *dispbuf++=2;
		 *(WORD *)dispbuf=*(WORD *)recbuf; dispbuf+=2;
		 *dispbuf++=7;
		 *dispbuf++=*recbuf&0xfe;
		 *dispbuf++=0xcc;
//No.13(M:D0 of byte2)
		 *dispbuf++=13;
		 *dispbuf++=0;
		 *dispbuf++=1;
		 *dispbuf++=(*(recbuf+1))<<7;
		 *dispbuf++=0xcc;
//No.14( P(S):D7-D1 of byte2 )
		 *dispbuf++=14;
		 *dispbuf++=0;
		 *dispbuf++=7;
		 *dispbuf++=*(recbuf+1)&0xfe;
		 *dispbuf++=0xcc;
		 displen+=17;
		 recbuf+=2;
//No.15 field(data field pointer:8bits,F)
		 bytedisp(15)          /*display fld:15*/
/*No.16 field(DATA length:8bits,V) & 80H field(DATA content,V)*/
		 procSCCPDATADisp(16);
		 break;

		case 0x08:/*AK*/
/*No.11 field(DLR:24bits,Fixed)*/
		 proc3byte(11)          /*display fld:11*/
//NO.12 field(Receive Number:7bits,D7-D1,Fixed)
		 *dispbuf++=12;
		 *dispbuf++=1;
		 *dispbuf++=*recbuf;
		 *dispbuf++=7;
		 *dispbuf++=(*recbuf++)&0xfe;
		 *dispbuf++=0xcc;
		 displen+=6;
//NO.13 field(credit,8bits,F)
		 bytedisp(13)          /*display fld:13*/
		 break;

		case 0x09:/*UDT*/
		case 0x0a:/*UDTS*/
		 if (temp1==0x09)/*UDT*/
		  {
/*No.11(PCLSS)&12(OPT) field(Protocol class:8bits,Fixed)*/
			*dispbuf++=11;
			*dispbuf++=1;
			*dispbuf++=*recbuf;
			*dispbuf++=4;
			*dispbuf++=(*recbuf)<<4;
			*dispbuf++=0xcc;
			*dispbuf++=12;
			*dispbuf++=0;
			*dispbuf++=4;
			*dispbuf++=(*recbuf++)&0xf0;
			*dispbuf++=0xcc;
			displen+=11;
			dfldno=12;
		  }
		 else/*UDTS*/
		  {
//No.11field(return case:8bits,Fixed)
			bytedisp(11)  //display fld:11
			dfldno=11;
		  }
//NO.13(UDT)\12(UDTS) field(CLDPA's pointer:8bits,F)
		 bufbak=recbuf;   //bufbak-->CLDPA pointer
		 dfldno++;
		 bytedisp(dfldno)
//NO.14(UDT)\13(UDTS) field(CLGPA's pointer:8bits,F)
		 dfldno++;
		 bytedisp(dfldno)
//NO.15(UDT)\14(UDTS) field(DATA's pointer:8bits,F)
		 dfldno++;
		 bytedisp(dfldno)
//CLDPA
		 code=*bufbak++;        //bufbak-->CLGPA's pointer
		 recbuf=bufbak+code-1;    //recbuf-->CLDPA length
//NO.16-24(UDT)\15-23(UDTS) field(CLDPA,V)
		 dfldno++;
		 procSCCPADDRDisp(dfldno,is24bits);
		 ssn=SCCPSSN;
//CLGPA
		 code=*bufbak++;        //bufbak-->DATA's pointer
		 recbuf=bufbak+code-1;    //recbuf-->CLGPA length
//NO.25-33(UDT)\24-32(UDTS) field(CLGPA,V)
		 dfldno+=9;
		 procSCCPADDRDisp(dfldno,is24bits);
//DATA
		 code=*bufbak;
		 recbuf=bufbak+code;    //recbuf-->DATA length
//NO.34(UDT)\33(UDTS) field(DATA length:8bits,V) & 80H field(DATA content,V)
		 dfldno+=9;
		 if (temp1==0x09) procUDTdata(dfldno,ssn,is24bits); //UDT
		 else procSCCPDATADisp(dfldno);  //UDTS

		 break;

		case 0x0b://ED
//No.11 field(DLR:24bits,Fixed)
		 proc3byte(11)   //display fld:11
//NO.12 field(DATA pointer:8bits,Fixed)
		 bytedisp(12)    //display fld:12
//NO.13 field(DATA length:8bits,V) & 80 field(DATA content,V)
		 procSCCPADDRDisp(13,is24bits);
		 break;

		case 0x0c://EA
//No.11 field(DLR:24bits,Fixed)
		 proc3byte(11)   //display fld:11
		 break;

		case 0x0d:/*RSR*/
//No.11 field(DLR:24bits,Fixed)
		 proc3byte(11)   /*display fld:11*/
//No.12 field(SLR:24bits,Fixed)
		 proc3byte(12)   /*display fld:12*/
//NO.13 field(RESET CASE:8Bits,F)
		 bytedisp(13)    /*display fld:13*/
		 break;

		case 0x0e:/*RSC*/
//No.11 field(DLR:24bits,Fixed)
		 proc3byte(11)   /*display fld:11*/
//No.12 field(SLR:24bits,Fixed)
		 proc3byte(12)   /*display fld:12*/
		 break;

		case 0x0f:/*ERR*/
//No.11 field(DLR:24bits,Fixed)
		 proc3byte(11)   /*display fld:11*/
//No.12 field(ERROR CASE:8Bits,Fixed)
		 bytedisp(12)   /*display fld:12*/
		 break;

		case 0x10:/*IT*/
//No.11 field(DLR:24bits,Fixed)
		 proc3byte(11)   /*display fld:11*/
//No.12 field(SLR:24bits,Fixed)
		 proc3byte(12)   /*display fld:12*/
//No.13(PCLSS)&14(OPT) field(Protocol class:8bits,Fixed)
		 *dispbuf++=13;
		 *dispbuf++=1;
		 *dispbuf++=*recbuf;
		 *dispbuf++=4;
		 *dispbuf++=(*recbuf)<<4;
		 *dispbuf++=0xcc;
		 *dispbuf++=14;
		 *dispbuf++=0;
		 *dispbuf++=4;
		 *dispbuf++=(*recbuf++)&0xf0;
		 *dispbuf++=0xcc;
		 displen+=11;
//Sort/Segment:2bytes,Fixed)
//No.15( P(S):D7-D1 of byte1 )
		 *dispbuf++=15;
		 *dispbuf++=2;
		 *(WORD *)dispbuf=*(WORD *)recbuf;
		 dispbuf+=2;
		 *dispbuf++=7;
		 *dispbuf++=*recbuf&0xfe;
		 *dispbuf++=0xcc;
//No.16(M:D0 of byte2)
		 *dispbuf++=16;
		 *dispbuf++=0;
		 *dispbuf++=1;
		 *dispbuf++=(*(recbuf+1))<<7;
		 *dispbuf++=0xcc;
//No.17( P(S):D7-D1 of byte2 )
		 *dispbuf++=17;
		 *dispbuf++=0;
		 *dispbuf++=7;
		 *dispbuf++=*(recbuf+1)&0xfe;
		 *dispbuf++=0xcc;
		 displen+=17;
		 recbuf+=2;
//NO.18 field(credit:8bits,F)
		 bytedisp(18)     /*display fld:18*/
		 break;

		case 0x11:/*XUDT*/
		case 0x12:/*XUDTS*/
		 if (temp1==0x11)/*XUDT*/
		  {
/*No.11(PCLSS)&12(OPT) field(Protocol class:8bits,Fixed)*/
			*dispbuf++=11;
			*dispbuf++=1;
			*dispbuf++=*recbuf;
			*dispbuf++=4;
			*dispbuf++=(*recbuf)<<4;
			*dispbuf++=0xcc;
			*dispbuf++=12;
			*dispbuf++=0;
			*dispbuf++=4;
			*dispbuf++=(*recbuf++)&0xf0;
			*dispbuf++=0xcc;
			displen+=11;
			dfldno=12;
		  }
		 else/*XUDTS*/
		  {
//No.11field(return case:8bits,Fixed)
			bytedisp(11)  /*display fld:11*/
			dfldno=11;
		  }
//NO.13(XUDT)\12(XUDTS) field(JUMP counter:8bits,F)
		 dfldno++;
		 bytedisp(dfldno)
//NO.14(XUDT)\13(XUDTS) field(CLDPA's pointer:8bits,F)
		 bufbak=recbuf;   //bufbak-->CLDPA pointer
		 dfldno++;
		 bytedisp(dfldno)
//NO.15(XUDT)\14(XUDTS) field(CLGPA's pointer:8bits,F)
		 dfldno++;
		 bytedisp(dfldno)
//NO.16(XUDT)\15(XUDTS) field(DATA's pointer:8bits,F)
		 dfldno++;
		 bytedisp(dfldno)
//NO.17(XUDT)\16(XUDTS) field(SEGMENT's pointer,F)
		 dfldno++;
		 bytedisp(dfldno)
//CLDPA
		 code=*bufbak++;        //bufbak-->CLGPA's pointer
		 recbuf=bufbak+code-1;    //recbuf-->CLDPA length
//NO.18-26(XUDT)\17-25(XUDTS) field(CLDPA,V)
		 dfldno++;
		 procSCCPADDRDisp(dfldno,is24bits);
		 ssn=SCCPSSN;
//CLGPA
		 code=*bufbak++;        //bufbak-->DATA's pointer
		 recbuf=bufbak+code-1;    //recbuf-->CLGPA length
//NO.27-35(XUDT)\26-34(XUDTS) field(CLGPA,V)
		 dfldno+=9;
		 procSCCPADDRDisp(dfldno,is24bits);
//DATA
		 code=*bufbak++;        //bufbak-->SEGMENT's pointer
		 recbuf=bufbak+code-1;    //recbuf-->DATA length
//NO.36(XUDT)\34(XUDTS) field(DATA length:8bits,V) & 80H field(DATA content,V)
		 dfldno+=9;
		 if (temp1==0x11)  procUDTdata(dfldno,ssn,is24bits); ////XUDT
		 else procSCCPDATADisp(dfldno); //XUDTS
//SEGMENT(O)
		 code=*bufbak;
		 recbuf=bufbak+code-1;    //recbuf-->SEGMENT name(if exist)
		 if(*recbuf==0x10)//exist SEGMENT
		  {
//NO.37(XUDT)\36(XUDTS) field(SEGMENT name:8bits,O)
			dfldno++;
			bytedisp(dfldno)
//NO.38(XUDT)\37(XUDTS) field(SEGMENT length:8bits,O)
			dfldno++;
			bytedisp(dfldno)
//NO.39(XUDT)\38(XUDTS) field(REST SEGMENT:8bits,O)
			dfldno++;
			bytedisp(dfldno)
//NO.40(XUDT)\39(XUDTS) field(Local Reference:24 Bits,O)
			dfldno++;
			proc3byte(dfldno)
		  }
		 break;

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

⌨️ 快捷键说明

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