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

📄 msgtext.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
									break;
								default:
									strcpy(Str1,"?");
									strcpy(Str,": ?");
									break;
							}
					}				//if(bshow)
					else I+=Len3;
				}//else !=0xfe
			}
			else if(DataKind==11) {//Cap msg
				if(FieldNo==0xfe) {     //len 2 byte
					Len2=BUFDISPLAY[I]; //data 16h len
					I++;
					Len2+=BUFDISPLAY[I]*256;
					I++;
					if(DetailType==0)	//overview :not main field
						bDrawOK=FALSE;
					if(bDrawOK) {
						nDrawX+=20;K=0;
						ShowType=2;
						strcpy(Str2,"");
						for(J=0;J<Len2;++J) {
							K++;
							bData=BUFDISPLAY[I];
							I++;
							Num=8;
							bEnd=GetDataStr(bData,Num,ShowType);  //No Err
							strcat(Str2," ");
							strcat(Str2,DataStr);
							if(K>=20) {
								K=0;
									sprintf(Str,"%sh",Str2);
									AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
								strcpy(Str2,"");
								nDrawY+=DltY;
							}
						}
						if(K!=0) {
								sprintf(Str,"%sh",Str2);
								AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							strcpy(Str2,"");
							nDrawY+=DltY;
						}
						nDrawX=X0;
					}//IF
					else I+=Len2;
				}
				else {
					//no use to getmsgfkind filedno-1=msgfkind
					GetCapMsgFKind();//MsgFKind=FieldNo-1;
					if(DetailType==0)	{//overview
						bShowDetail=ShowCapField();
						if(!bShowDetail)
							bDrawOK=FALSE;
					}
					if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
					}
					//data fields	zxw 2000-08-18
					Len2=BUFDISPLAY[I];
					I++;
					if(Len2==0) {
						Len3=BUFDISPLAY[I];	//bytenum
						I++;
					}
					else {
						if((Len2%8)==0)
							Len3=Len2/8;
						else Len3=Len2/8+1;
					}
					if(bDrawOK) {
						nDrawY=DrawCapVeiw(*this,I,Len2,Len3,nDrawX,nDrawY,DltY,PtRate);
						nDrawX=X0;
					}				//if(bshow)
					I+=Len3;
				}//else !=0xfe
			}
			else if(DataKind==12) {//Cap err msg
				if(FieldNo==0xfe) {     //len 2 byte
					Len2=BUFDISPLAY[I]; //data 16h len
					I++;
					Len2+=BUFDISPLAY[I]*256;
					I++;
					if(DetailType==0)	//overview :not main field
						bDrawOK=FALSE;
					if(bDrawOK) {
						nDrawX+=20;K=0;
						ShowType=2;
						strcpy(Str2,"");
						for(J=0;J<Len2;++J) {
							K++;
							bData=BUFDISPLAY[I];
							I++;
							Num=8;
							bEnd=GetDataStr(bData,Num,ShowType);  //No Err
							strcat(Str2," ");
							strcat(Str2,DataStr);
							if(K>=20) {
								K=0;
									sprintf(Str,"%sh",Str2);
									AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
								strcpy(Str2,"");
								nDrawY+=DltY;
							}
						}
						if(K!=0) {
								sprintf(Str,"%sh",Str2);
								AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							strcpy(Str2,"");
							nDrawY+=DltY;
						}
						nDrawX=X0;
					}//IF
					else I+=Len2;
				}
				else {
					//no use to getmsgfkind filedno-1=msgfkind
					MsgFKind=FieldNo-1;
					if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
					}
					//data fields	zxw 2000-08-18
					Len2=BUFDISPLAY[I];
					I++;
					if(Len2==0) {
						Len3=BUFDISPLAY[I];	//bytenum
						I++;
					}
					else {
						if((Len2%8)==0)
							Len3=Len2/8;
						else Len3=Len2/8+1;
					}
					I+=Len3;
				}//else !=0xfe
			}
			else if(DataKind==7) {//bssmap msg
				if(FieldNo==0xfe) {     //len 2 byte
					Len2=BUFDISPLAY[I]; //data 16h len
					I++;
					Len2+=BUFDISPLAY[I]*256;
					I++;
					if(DetailType==0)	//overview :not main field
						bDrawOK=FALSE;
					if(bDrawOK) {
						nDrawX+=20;K=0;
						ShowType=2;
						strcpy(Str2,"");
						for(J=0;J<Len2;++J) {
							K++;
							bData=BUFDISPLAY[I];
							I++;
							Num=8;
							bEnd=GetDataStr(bData,Num,ShowType);  //No Err
							strcat(Str2," ");
							strcat(Str2,DataStr);
							if(K>=20) {
								K=0;
									sprintf(Str,"%sh",Str2);
									AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
								strcpy(Str2,"");
								nDrawY+=DltY;
							}
						}
						if(K!=0) {
							sprintf(Str,"%sh",Str2);
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							strcpy(Str2,"");
							nDrawY+=DltY;
						}
						nDrawX=X0;
					}//IF
					else I+=Len2;
				}
				else {
					//judge if bssmap or dtap
					switch(FieldNo) 
					{
					case 1:
						bDrawOK=TRUE;			//show  DiscriminatePara
						if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
						}
						//data fields
						Len2=BUFDISPLAY[I];
						I++;
						Len3=0;
						if(Len2==0) {
							Len2=BUFDISPLAY[I];	//bitnum
							I++;
							if((Len2%8)==0)
								Len3=Len2/8;
							else Len3=Len2/8+1;
						}
						else {
							Len3=Len2;
						}
						bData=BUFDISPLAY[I];
						I++;
						if((bData&0x01)!=0)
							DataKind=8;				//RADIORES
						if(bDrawOK) {
							ShowType=BSSMAPHead_Crit[FieldNo-1][3];
							strcpy(Str2,"");
							Num=8;
							 bEnd=GetDataStr(bData,Num,ShowType);  //2 is show type
							 if(!bEnd) {
								sprintf(Str2,"?: %02Xh",bData);
								I+=(Len3-1-J);
								break;
							 }
							 strcat(Str2,DataStr);
							strcpy(Str,BSSMAPHead[FieldNo-1]);
							nDrawX+=DeltaXL;
							AddString(nDrawX*PtRate ,nDrawY*PtRate,Str,strlen(Str));
							if(ShowType==1)
								sprintf(Str,": %sb",Str2);
							else {
								if(ShowType==2)
									sprintf(Str,": %sh",Str2);
								else  sprintf(Str,": %s",Str2);
							}
							strcat(Str,"   ");
							strcat(Str,"鉴别参数: ");
							if(DataKind==8)
								strcat(Str,"直接传输应用部分(DTAP)");
							else strcat(Str,"基站子系统管理应用部分(BSSMAP)");
							nDrawX+=DeltaX;
							AddString(nDrawX*PtRate ,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
							nDrawY+=DltY;
						}				//if(bshow)
						break;
					case 4:			//MT
						bDrawOK=TRUE;			//show  MT
						if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
						}
						//data fields
						Len2=BUFDISPLAY[I];
						I++;
						Len3=0;
						if(Len2==0) {
							Len2=BUFDISPLAY[I];	//bitnum
							I++;
							if((Len2%8)==0)
								Len3=Len2/8;
							else Len3=Len2/8+1;
						}
						else {
							Len3=Len2;
						}
						if(Len3!=1) {//--- Err Handle
							if(bDrawOK) {
								sprintf(Str,"BSSMAP ?");
								nDrawX+=DeltaXL;
								AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
								nDrawX=X0;

								I--;
								while(1) {
									if(BUFDISPLAY[I]==0xcc && BUFDISPLAY[I+1]==0xee) {
										I++;
										break;
									}
									I++;
									if(I>Len+4) {
										
										
										 return;
									}
								}
								break;
							}
						}
						bData=BUFDISPLAY[I];
						I++;
						SelOcKind=7;		//BSSmap
						BssMapKind=SelChildKind=GetBssMapKind(bData);
						if(BssMapKind==0xff) {
							if(bDrawOK) {
								sprintf(Str,"BSSMAP ?");
								nDrawX+=DeltaXL;
								AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
								nDrawX=X0;
								I--;
								while(1) {
									if(BUFDISPLAY[I]==0xcc && BUFDISPLAY[I+1]==0xee) {
										I++;
										break;
									}
									I++;
									if(I>Len+4) {
										
										
										 return;
									}
								}
								break;
							}
						}    //==0xff
						if(bDrawOK) {
							ShowType=BSSMAPHead_Crit[FieldNo-1][3];
							strcpy(Str2,"");
							Num=8;
							bEnd=GetDataStr(bData,Num,ShowType);  
							if(!bEnd) {
								sprintf(Str2,"?: %02Xh",bData);
								I+=(Len3-1-J);
								break;
							}
							strcat(Str2,DataStr);
							strcpy(Str1,BSSMAPHead[FieldNo-1]);
							nDrawX+=DeltaXL;
							AddString(nDrawX*PtRate ,nDrawY*PtRate,Str1,strlen(Str1));
							GetBssMapStr(BssMapKind);
							sprintf(Str,": %sh   BSSMAP: %s %s",Str2,BSSMAPMsg[BssMapKind],DataStr);
							nDrawX+=DeltaX;
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
							nDrawY+=DltY;
						}				//if(bshow)
						break;

					case 2:			//no 2 field
					case 3:
						if(DetailType==0)	//overview :not main field
							bDrawOK=FALSE;
						else bDrawOK=TRUE;
						if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
						}
						//data fields
						Len2=BUFDISPLAY[I];
						I++;
						Len3=0;
						if(Len2==0) {
							Len2=BUFDISPLAY[I];	//bitnum
							I++;
							if((Len2%8)==0)
								Len3=Len2/8;
							else Len3=Len2/8+1;
						}
						else {
							Len3=Len2;
						}
						if(bDrawOK) {
							ShowType=BSSMAPHead_Crit[FieldNo-1][3];
							strcpy(Str2,"");
							for(J=0;J<Len3;++J) {
								bData=BUFDISPLAY[I];
								I++;
								Num=8;
								if(Len2!=Len3 && J==(Len2/8))
									Num=Len2%8;
								bEnd=GetDataStr(bData,Num,ShowType);  
								if(!bEnd) {
									sprintf(Str2,"?: %02Xh",bData);
									I+=(Len3-1-J);
									break;
								}
								strcat(Str2,DataStr);
							}
							strcpy(Str1,BSSMAPHead[FieldNo-1]);
							if(ShowType==1)
								sprintf(Str,": %sb",Str2);
							else {
								if(ShowType==2)
									sprintf(Str,": %sh",Str2);
								else  sprintf(Str,": %s",Str2);
							}
							nDrawX+=DeltaXL;
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str1,strlen(Str1));
							strcat(Str,"   ");
							strcat(Str,"长度指示");
							nDrawX+=DeltaX;
							AddString(nDrawX*PtRate ,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
							nDrawY+=DltY;
						}				//if(bshow)
						else I+=Len3;
						break;

					default:			//	FieldNo>=5
						//no use to getmsgfkind filedno-5=msgfkind
						MsgFKind=FieldNo-5;
						if(DetailType==0)	{//overview
							bShowDetail=ShowBssMapField();
							if(!bShowDetail)
								bDrawOK=FALSE;
						}
						if(bDrawOK) {
								sprintf(Str,"xxh");
							AddString(nDrawX*PtRate,nDrawY*PtRate,Str,strlen(Str));
							nDrawX=X0;
						}
						//data fields
						Len2=BUFDISPLAY[I];
						I++;
						Len3=0;
						if(Len2==0) {
							Len2=BUFDISPLAY[I];	//bitnum
							I++;
							if((Len2%8)==0)
								Len3=Len2/8;
							else Len3=Len2/8+1;
						}
						else {
							Len3=Len2;
						}
						if(bDrawOK) {
							nDrawY=DrawBssMapVeiw(*this,I,Len2,Len3,wCIC,nDrawX,nDrawY,DltY,PtRate);
							nDrawX=X0;
						}				//if(bshow)
						I+=Len3;
						break;
					}//switch
				}//else !=0xfe
			}
			else if(DataKind==8) {//RADIORES msg
				if(FieldNo==0xfe) {     //len 2 byte
					Len2=BUFDISPLAY[I]; //data 16h len
					I++;
					Len2+=BUFDISPLAY[I]*256;
					I++;
					if(DetailType==0)	//overview :not main field
						bDrawOK=FALSE;
					if(bDrawOK) {
						nDrawX+=20;K=0;
						ShowType=2;
						strcpy(Str2,"");
						for(J=0;J<Len2;++J) {
							K++;
							bData=BUFDISPLAY[I];
							I++;
							Num=8;
							bEnd=GetDataStr(bData,Num,ShowType);  //No Err
							strcat(Str2," ");
							strcat(Str2,DataStr);
							if(K>=20) {
								K=0;

⌨️ 快捷键说明

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