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

📄 svgsmadisp.cpp

📁 七号信令解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*************************************************
Update History:
2000.05.05,“完全第3层消息”增加显示封装的DTAP内容
2000.05.16:“完全第3层消息”增加“CM重建请求”,“IMSI分离”
2000.07.24:procsmallareaIDtable()
2000.08.29:DeYang MC:“信道类型”长度不为3,by LHG
2000.09.25:procLAI(),by LHG
2000.10.30:procPaswdInfo() & procBSSMAPdisp(),by LHG
**************************************************/

#include "stdafx.h"

#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned long

#define bb(y) *dispbuf++=y
#define bytedisp(x) bb(x);bb(1);bb(*recbuf++);bb(0xcc);displen+=4;
#define proc2byte(x) bb(x);bb(2);bb(*recbuf++);bb(*recbuf++);bb(0xcc);displen+=5;
#define proc3byte(x) bb(x),bb(3);bb(*recbuf++);bb(*recbuf++);bb(*recbuf++);bb(0xcc);displen+=6;


extern unsigned char *dispbuf,*recbuf;
extern unsigned short displen;

void procBSSMAPdisp();
void procDTAPdisp();


void procTraceRef(u8 dfldno) //跟踪参考
{
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//跟踪参考(2字节)
	*dispbuf++=dfldno+1;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=9;
}


void procGSMACIC(u8 dfldno)
{
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//CIC(2字节)
	*dispbuf++=dfldno+1;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=9;
}

void procGSMACICtable(u8 dfldno) //电路识别码表
{  u8 i,li;
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//电路识别码表长度
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//电路识别码表范围
	*dispbuf++=dfldno+2;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//状态
	li--;
	*dispbuf++=dfldno+3;
	*dispbuf++=li;
	for(i=0;i<li;i++) *dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=li+15;
}

void procmix2byte(u8 dfldno)
{
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//1字节
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=8;
}


void procusableresoure(u8 dfldno)//可用资源
{
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带1可用的全速率信道数(2字节)
	*dispbuf++=dfldno+1;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带1可用的半速率信道数(2字节)
	*dispbuf++=dfldno+2;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带2可用的全速率信道数(2字节)
	*dispbuf++=dfldno+3;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带2可用的半速率信道数(2字节)
	*dispbuf++=dfldno+4;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带3可用的全速率信道数(2字节)
	*dispbuf++=dfldno+5;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带3可用的半速率信道数(2字节)
	*dispbuf++=dfldno+6;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带4可用的全速率信道数(2字节)
	*dispbuf++=dfldno+7;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带4可用的半速率信道数(2字节)
	*dispbuf++=dfldno+8;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带5可用的全速率信道数(2字节)
	*dispbuf++=dfldno+9;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//干扰带5可用的半速率信道数(2字节)
	*dispbuf++=dfldno+10;
	*dispbuf++=2;
	*dispbuf++=*recbuf++;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=54;
}


void procVARInfoUnit(u8 dfldno)
{  unsigned char li,i;
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//长度
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	*dispbuf++=dfldno+2;
	*dispbuf++=li;
	for(i=0;i<li;i++) *dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=li+11;
}



void procCHANNELType(u8 dfldno) //信道类型
{	BYTE li;
//单元识别
	*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;
//信道速率和类型(1字节)
	*dispbuf++=dfldno+3;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//语音编码算法/数据速率和透明指示(1字节)
	*dispbuf++=dfldno+4;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	if(li>3) //2000.08.29 by LHG,DeYang MC:“信道类型”长度不为3
	{	li-=3;
		recbuf+=li;
	}

	displen+=20;
}

void procL3firstInfo(u8 dfldno) //第3层首标信息
{
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//长度
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//协议鉴别器
	*dispbuf++=dfldno+2;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//处理识别
	*dispbuf++=dfldno+3;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=16;
}

void procpriority(u8 dfldno) //优先级
{
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//长度
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//优先级
	*dispbuf++=dfldno+2;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=12;
}

void procDTXFlag(u8 dfldno) //下行DTX标志
{
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//下行DTX标志
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;

	displen+=8;
}


void procsmallareaID(u8 dfldno) //“小区识别”
{  u8 code;
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//长度
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//小区识别鉴别器:D3-D0
	*dispbuf++=dfldno+2;
	*dispbuf++=0;
	*dispbuf++=4;
	code=*recbuf++;
	*dispbuf++=code<<4;
	*dispbuf++=0xcc;
	displen+=13;

	code&=0x0f;

	switch(code)
	{
	 case 0:
//小区识别之MCC
		*dispbuf++=dfldno+3;
		*dispbuf++=0;
		*dispbuf++=12;
		*dispbuf++=(*recbuf>>4)|(*recbuf<<4);
		recbuf++;
		*dispbuf++=*recbuf<<4;
		recbuf++;
		*dispbuf++=0xcc;
//小区识别之MNC
		*dispbuf++=dfldno+4;
		*dispbuf++=1;
		*dispbuf++=(*recbuf>>4)|(*recbuf<<4);
		recbuf++;
		*dispbuf++=0xcc;
//小区识别之LAC
		*dispbuf++=dfldno+5;
		*dispbuf++=2;
		*(u16 *)dispbuf=*(u16 *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;
//小区识别之CI
		*dispbuf++=dfldno+6;
		*dispbuf++=2;
		*(u16 *)dispbuf=*(u16 *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;

		displen+=20;
		break;

	 case 1:
//小区识别之LAC
		*dispbuf++=dfldno+5;
		*dispbuf++=2;
		*(u16 *)dispbuf=*(u16 *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;
//小区识别之CI
		*dispbuf++=dfldno+6;
		*dispbuf++=2;
		*(u16 *)dispbuf=*(u16 *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;

		displen+=10;
		break;

	 case 2:
//小区识别之CI
		*dispbuf++=dfldno+6;
		*dispbuf++=2;
		*(u16 *)dispbuf=*(u16 *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;

		displen+=5;
		break;

	 case 3:
		break;

	 default:break;
	}//switch
}



void procsmallareaIDtable(BYTE dfldno) //“小区识别表”
{  BYTE code,li;
//单元识别
	*dispbuf++=dfldno;
	*dispbuf++=1;
	*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//长度
	*dispbuf++=dfldno+1;
	*dispbuf++=1;
	li=*dispbuf++=*recbuf++;
	*dispbuf++=0xcc;
//小区识别鉴别器:D3-D0
	*dispbuf++=dfldno+2;
	*dispbuf++=0;
	*dispbuf++=4;
	code=*recbuf++;
	*dispbuf++=code<<4;
	*dispbuf++=0xcc;
	li--;
	displen+=13;

	code&=0x0f;

	 switch(code)
	 {
	  case 0:
//小区识别之MCC
	   while(li>=7)//update 2000.07.24 by LHG
	   {*dispbuf++=dfldno+3;
		*dispbuf++=0;
		*dispbuf++=12;
		*dispbuf++=(*recbuf>>4)|(*recbuf<<4);
		recbuf++;
		*dispbuf++=*recbuf<<4;
		recbuf++;
		*dispbuf++=0xcc;
//小区识别之MNC
		*dispbuf++=dfldno+4;
		*dispbuf++=1;
		*dispbuf++=(*recbuf>>4)|(*recbuf<<4);
		recbuf++;
		*dispbuf++=0xcc;
//小区识别之LAC
		*dispbuf++=dfldno+5;
		*dispbuf++=2;
		*(WORD *)dispbuf=*(WORD *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;
//小区识别之CI
		*dispbuf++=dfldno+6;
		*dispbuf++=2;
		*(WORD *)dispbuf=*(WORD *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;

		displen+=20;
		li-=7;
	   }
	   break;

	  case 1:
//小区识别之LAC
	   while(li>=4)//update 2000.07.24 by LHG
	   {*dispbuf++=dfldno+5;
		*dispbuf++=2;
		*(WORD *)dispbuf=*(WORD *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;
//小区识别之CI
		*dispbuf++=dfldno+6;
		*dispbuf++=2;
		*(WORD *)dispbuf=*(WORD *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;

		displen+=10;
		li-=4;
	   }
	   break;

	 case 2:
//小区识别之CI
	   while(li>=2)//update 2000.07.24 by LHG
	   {*dispbuf++=dfldno+6;
		*dispbuf++=2;
		*(WORD *)dispbuf=*(WORD *)recbuf;
		recbuf+=2;
		dispbuf+=2;
		*dispbuf++=0xcc;

		displen+=5;
		li-=2;
	   }
	   break;

	  case 4:
//小区识别之MCC
	   while(li>=5)//update 2000.07.24 by LHG
	   {*dispbuf++=dfldno+3;
		*dispbuf++=0;
		*dispbuf++=12;
		*dispbuf++=(*recbuf>>4)|(*recbuf<<4);
		recbuf++;
		*dispbuf++=*recbuf<<4;
		recbuf++;
		*dispbuf++=0xcc;
//小区识别之MNC
		*dispbuf++=dfldno+4;
		*dispbuf++=1;

⌨️ 快捷键说明

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