📄 svgsmadisp.cpp
字号:
*dispbuf++=(*recbuf>>4)|(*recbuf<<4);
recbuf++;
*dispbuf++=0xcc;
//小区识别之LAC
*dispbuf++=dfldno+5;
*dispbuf++=2;
*(WORD *)dispbuf=*(WORD *)recbuf;
recbuf+=2;
dispbuf+=2;
*dispbuf++=0xcc;
displen+=15;
li-=5;
}
break;
case 5:
//小区识别之LAC
while(li>=2)//update 2000.07.24 by LHG
{*dispbuf++=dfldno+5;
*dispbuf++=2;
*(WORD *)dispbuf=*(WORD *)recbuf;
recbuf+=2;
dispbuf+=2;
*dispbuf++=0xcc;
displen+=5;
li-=2;
}
break;
default:break;
}//switch
}
void procselectchannel(u8 dfldno) //选择的信道
{
//单元识别
*dispbuf++=dfldno;
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//“信道”(1字节:D3-D0)
*dispbuf++=dfldno+1;
*dispbuf++=0;
*dispbuf++=4;
*dispbuf++=(*recbuf++)<<4;
*dispbuf++=0xcc;
displen+=9;
}
void procPaswdInfo(BYTE dfldno) //加密信息
{ BYTE li,i;
//单元识别
*dispbuf++=dfldno;
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//“加密信息”长度
*dispbuf++=dfldno+1;
*dispbuf++=1;
li=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//允许的算法(1字节)
*dispbuf++=dfldno+2;
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=12;
//update by 2000.10.30 by LHG
//密钥
if(li>1)
{ li--;
*dispbuf++=dfldno+3;
*dispbuf++=li;
for(i=0;i<li;i++) *dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=li+3;
}
}
void procGSMAdisp()
{
if((*recbuf&0x01)==0)//BSSMAP
{
*dispbuf++=0x01; //鉴别参数
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
*dispbuf++=0x03; //长度指示
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=8;
procBSSMAPdisp();
}//BSSMAP
else//DTAP
{
*dispbuf++=0x01; //鉴别参数
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
*dispbuf++=0x02; //DLCI
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
*dispbuf++=0x03; //长度指示
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=12;
procDTAPdisp();
}//DTAP
}
void procPDandSI(u8 dfldno)
{
*dispbuf++=dfldno;
*dispbuf++=0;
*dispbuf++=4;
*dispbuf++=(*recbuf)<<4;
*dispbuf++=0xcc;
*dispbuf++=dfldno+1;
*dispbuf++=0;
*dispbuf++=4;
*dispbuf++=(*recbuf++)&0xf0;
*dispbuf++=0xcc;
displen+=10;
}
void procChanDescription(u8 dfldno)
{
*dispbuf++=dfldno; //Channel type and TDMA offset
*dispbuf++=0;
*dispbuf++=5;
*dispbuf++=(*recbuf)&0xf8;
*dispbuf++=0xcc;
*dispbuf++=dfldno+1;//TN
*dispbuf++=0;
*dispbuf++=3;
*dispbuf++=(*recbuf++)<<5;
*dispbuf++=0xcc;
*dispbuf++=dfldno+2; //TSC
*dispbuf++=0;
*dispbuf++=3;
*dispbuf++=(*recbuf)&0xe0;
*dispbuf++=0xcc;
if((*recbuf&0x10)==0x10)
{*dispbuf++=dfldno+2; //MAIO
*dispbuf++=0;
*dispbuf++=6;
*dispbuf++=((*recbuf)<<4)|((*(recbuf+1))>>4);
*dispbuf++=0xcc;
*dispbuf++=dfldno+3; //HSN
*dispbuf++=0;
*dispbuf++=6;
*dispbuf++=(*(recbuf+1))<<2;
*dispbuf++=0xcc;
displen+=25;
recbuf+=2;
}
else
{*dispbuf++=dfldno+2; //MAIO
*dispbuf++=0;
*dispbuf++=10;
*(unsigned short *)dispbuf=(*(unsigned short *)recbuf)<<6;
dispbuf+=2;
*dispbuf++=0xcc;
displen+=21;
recbuf+=2;
}
}
void procMSID(u8 dfldno) //移动标识
{ u8 li,code,i;
li=*recbuf;
bytedisp(dfldno) //li
*dispbuf++=dfldno+1;//标识类型
*dispbuf++=0;
*dispbuf++=3;
code=*recbuf&0x07;
*dispbuf++=code<<5;
*dispbuf++=0xcc;
displen+=5;
if(code==4) //TMSI
{*dispbuf++=dfldno+2;//移动标识
*dispbuf++=4;
*dispbuf++=*(recbuf+1);
*dispbuf++=*(recbuf+2);
*dispbuf++=*(recbuf+3);
*dispbuf++=*(recbuf+4);
*dispbuf++=0xcc;
displen+=7;
recbuf+=li;
}//TMSI
else if(code==1||code==2||code==3)
{code=li;
li*=8;
if((*recbuf&0x08)==0) li-=8;
else li-=4;
*dispbuf++=dfldno+2;//移动标识
*dispbuf++=0;
*dispbuf++=li;
for(i=0;i<(li+8)/8;i++) *dispbuf++=(*(recbuf+i)&0xf0)|(*(recbuf+i+1)&0x0f);
*dispbuf++=0xcc;
recbuf+=code;
displen+=(li+8)/8+4;
}
else recbuf+=li;
}
void procTMSI(u8 dfldno)
{
*dispbuf++=dfldno; //Lower ARFCN
*dispbuf++=4;
*dispbuf++=*recbuf++;
*dispbuf++=*recbuf++;
*dispbuf++=*recbuf++;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=7;
}
void procFCSeq(u8 dfldno)//频率信道序列
{ u8 i;
*dispbuf++=dfldno; //Lower ARFCN
*dispbuf++=0;
*dispbuf++=6;
*dispbuf++=(*recbuf)<<2;
*dispbuf++=0xcc;
recbuf++;
*dispbuf++=dfldno+1; //inc skip of ARFCN
*dispbuf++=8;
for(i=0;i<8;i++) *dispbuf++=*(recbuf+i);
*dispbuf++=0xcc;
displen+=16;
}
//update by 2000.09.25,LHG
void procLAI(BYTE dfldno)
{
*dispbuf++=dfldno; //MCC
*dispbuf++=0;
*dispbuf++=12;
*dispbuf++=(((*recbuf)&0x0f)<<4)|(((*recbuf)&0xf0)>>4);
*dispbuf++=(*(recbuf+1)&0x0f)<<4;
recbuf+=2;
*dispbuf++=0xcc;
*dispbuf++=dfldno+1; //MNC
*dispbuf++=1;
*dispbuf++=((*recbuf&0x0f)<<4)|((*recbuf&0xf0)>>4);
recbuf++;
*dispbuf++=0xcc;
*dispbuf++=dfldno+2; //LAC
*dispbuf++=2;
*dispbuf++=*recbuf++;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=15;
}
void procReqRef(u8 dfldno)
{
*dispbuf++=dfldno; //RA
*dispbuf++=1;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
*dispbuf++=dfldno+1; //T1'
*dispbuf++=0;
*dispbuf++=5;
*dispbuf++=*recbuf&0xf8;
*dispbuf++=0xcc;
*dispbuf++=dfldno+2; //T3
*dispbuf++=0;
*dispbuf++=6;
*dispbuf++=(*recbuf<<5)|(*(recbuf+1)>>3);
*dispbuf++=0xcc;
recbuf++;
*dispbuf++=dfldno+4; //T2
*dispbuf++=0;
*dispbuf++=5;
*dispbuf++=*recbuf<<3;
*dispbuf++=0xcc;
recbuf++;
displen+=19;
}
void procDTAPCCCause(u8 dfldno)
{ u8 i,li;
li=*recbuf;
bytedisp(dfldno) //LI
*dispbuf++=dfldno+1;//location
*dispbuf++=0;
*dispbuf++=4;
*dispbuf++=*recbuf<<4;
*dispbuf++=0xcc;
*dispbuf++=dfldno+2;//coding standard
*dispbuf++=0;
*dispbuf++=2;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
displen+=10;
li--;
if((*recbuf&0x60)==0x60)//exist recommendation
{*dispbuf++=dfldno+3;//recommendation
*dispbuf++=0;
*dispbuf++=7;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
displen+=5;
li--;
}//exist recommendation
if(li>0)
{*dispbuf++=dfldno+4;//cause value
*dispbuf++=0;
*dispbuf++=7;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
displen+=5;
li--;
}
if(li>0)//diagnostic
{*dispbuf++=dfldno+5;//cause value
*dispbuf++=li;
for(i=0;i<li;i++) *dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=li+3;
}//diagnostic
}
void procPROGRESSIN(u8 dfldno)
{
*dispbuf++=dfldno;//location
*dispbuf++=0;
*dispbuf++=4;
*dispbuf++=*recbuf<<4;
*dispbuf++=0xcc;
*dispbuf++=dfldno+1;//coding standard
*dispbuf++=0;
*dispbuf++=2;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
recbuf++;
*dispbuf++=dfldno+2;//Progress description
*dispbuf++=0;
*dispbuf++=7;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
recbuf++;
displen+=15;
}
void procHighLayerComp(u8 dfldno)
{ u8 li;
li=*recbuf;
bytedisp(dfldno) //LI
*dispbuf++=dfldno+1; //编码标准
*dispbuf++=0;
*dispbuf++=2;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
*dispbuf++=dfldno+2; //解释
*dispbuf++=0;
*dispbuf++=3;
*dispbuf++=*recbuf<<3;
*dispbuf++=0xcc;
*dispbuf++=dfldno+3; //协议记录的表示方法
*dispbuf++=0;
*dispbuf++=2;
*dispbuf++=*recbuf<<6;
*dispbuf++=0xcc;
recbuf++;
displen+=15;
if((*recbuf&0x80)==0) //exist 扩展的高层特性标识
{*dispbuf++=dfldno+4; //高层特性标识
*dispbuf++=0;
*dispbuf++=7;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
recbuf++;
*dispbuf++=dfldno+5; //扩展的高层特性标识
*dispbuf++=0;
*dispbuf++=7;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
recbuf++;
displen+=10;
}//exist 扩展的高层特性标识
else
{*dispbuf++=dfldno+4; //高层特性标识
*dispbuf++=0;
*dispbuf++=7;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
recbuf++;
displen+=5;
}
}
void procUSERtoUSER(u8 dfldno)
{u8 i,li;
li=*recbuf;
bytedisp(dfldno) //LI
bytedisp(dfldno+1) //User-user protocol discriminator
*dispbuf++=dfldno+2;//User-user information
*dispbuf++=li;
for(i=0;i<li;i++) *dispbuf++=*recbuf++;
*dispbuf++=0xcc;
displen+=li+3;
}
void procDTAPsubaddr(u8 dfldno)
{ u8 li,i,oddeven;
li=*recbuf;
bytedisp(dfldno); //主叫子地址 li
oddeven=*recbuf&0x08;
bytedisp(dfldno+1) //type of subaddr and odd/even indicator
li--;
if(oddeven==0)//even
{*dispbuf++=dfldno+2; //subaddr information
*dispbuf++=0;
*dispbuf++=li*8;
for(i=0;i<li;i++)
{*dispbuf++=(*recbuf>>4)|(*recbuf<<4);recbuf++;}
*dispbuf++=0xcc;
displen+=li+3;
}//even
else//odd
{*dispbuf++=dfldno+2; //subaddr information
*dispbuf++=0;
*dispbuf++=li*8-4;
for(i=0;i<li;i++)
{*dispbuf++=(*recbuf>>4)|(*recbuf<<4);recbuf++;}
*dispbuf++=0xcc;
displen+=li+3;
}//odd
}
void procDTAPcalledNO(u8 dfldno)
{ u8 i,li;
li=*recbuf; //get LI
bytedisp(dfldno) //主叫号码 li
*dispbuf++=dfldno+1; //Number plan identification
*dispbuf++=0;
*dispbuf++=4;
*dispbuf++=*recbuf<<4;
*dispbuf++=0xcc;
*dispbuf++=dfldno+2; //type of Number
*dispbuf++=0;
*dispbuf++=3;
*dispbuf++=*recbuf<<1;
*dispbuf++=0xcc;
displen+=10;
recbuf++; li--;
if((*(recbuf+li-1)&0xf0)==0xf0) //odd
{*dispbuf++=dfldno+3; //被叫号码 Number digit
*dispbuf++=0;
*dispbuf++=li*8-4;
for(i=0;i<li;i++)
{*dispbuf++=(*recbuf>>4)|(*recbuf<<4);recbuf++;}
*dispbuf++=0xcc;
displen+=li+3;
}//odd
else //even
{*dispbuf++=dfldno+3; //被叫号码 Number digit
*dispbuf++=0;
*dispbuf++=li*8;
for(i=0;i<li;i++)
{*dispbuf++=(*recbuf>>4)|(*recbuf<<4);recbuf++;}
*dispbuf++=0xcc;
displen+=li+3;
}//even
}
void procDTAPdisp()
{ unsigned char i,mt,oddeven,li;
if((*recbuf&0x0f)==0x03) //call control message
{procPDandSI(4);//协议鉴别器&事务标识
mt=*recbuf;
bytedisp(6)
switch(mt)
{
case 0x01://Alerting(network to MS)
if((*recbuf&0x7f)==0x1c) procVARInfoUnit(0x07);//Facility
if((*recbuf&0x7f)==0x1e)//Progress indicator
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -