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

📄 layer3infoptl.hpp

📁 ABis无线接口全套资料
💻 HPP
📖 第 1 页 / 共 2 页
字号:
	unsigned char spare:2;
};

struct SFrequencyShortList
{
	unsigned char value[9];
};

struct SMobileTimeDifference
{
	unsigned char mobile_time_differ_value_h;
	unsigned char mobile_time_differ_value_cont;
	unsigned char spare:3;
	unsigned char mobile_time_differ_value_l:5;
};

struct SRequestReference
{
	unsigned char ra;
	unsigned char t3_h:3;
	unsigned char t1:5;

	unsigned char t2:5;
	unsigned char t3_l:3;
};

struct SWaitIndication
{
	unsigned char t3122_timeout;
};

struct SMeasurementResult
{
	unsigned char rxllev_full_serving_cell:6;
	unsigned char dtx_used:1;
	unsigned char ba_used:1;

	unsigned char rxlev_sub_serving_cell:6;
	unsigned char meas_valid:1;
	unsigned char spare1:1;

	unsigned char no_ncellm_h:1;
	unsigned char rxqual_sub_serving_cell:3;
	unsigned char rxqual_full_serving_cell:3;
	unsigned char spare2:1;

	unsigned char rxlev_ncell1:6;
	unsigned char no_ncellm_l:2;

	unsigned char bsic_ncell1_h:3;
	unsigned char bcch_freq_ncell1:5;

	unsigned char rxlev_ncell2_h:5;
	unsigned char bsic_ncell1_l:3;

	unsigned char bsic_ncell2_h:2;
	unsigned char bcch_freq_ncell2:5;
	unsigned char rxlev_ncell2_l:1;

	unsigned char rxlev_ncell3_h:4;
	unsigned char bsic_ncell2_l:4;

	unsigned char bsic_ncell3_h:1;
	unsigned char bcch_freq_ncell3:5;
	unsigned char rxlev_ncell3_l:2;

	unsigned char rxlev_ncell4_h:3;
	unsigned char bsic_ncell3_l:5;

	unsigned char bcch_freq_ncell4:5;
	unsigned char rxlev_ncell4_l:3;

	unsigned char rxlev_ncell5_h:2;
	unsigned char bsic_ncell4:6;

	unsigned char bcch_freq_ncell5_h:4;
	unsigned char rxlev_ncell5_l:4;

	unsigned char rxlev_ncell6_h:1;
	unsigned char bsic_ncell5:6;
	unsigned char bcch_freq_ncell5_l:1;

	unsigned char bcch_freq_ncell6_h:3;
	unsigned char rxlev_ncell6_l:5;

	unsigned char bsic_ncell6:6;
	unsigned char bcch_freq_ncell6_l:2;
};

struct SRachControlParameters
{
	unsigned char re:1;
	unsigned char cell_barr_access:1;
	unsigned char tx_integer:4;
	unsigned char max_retrans:2;

	unsigned short ac;
};

struct SSl1RestOctets
{
	unsigned char spare1:1;
	unsigned char spare2:1;
	unsigned char ncp_spare:5;
	unsigned char np:1;
};

struct SNccPermitted
{
	unsigned ncc_permitted;
};

struct SCellIdentity
{
	unsigned char ci_value[2];
};

struct SLocationAreaIdentification
{
	unsigned char mcc[3];
	unsigned char mnc[2];
	unsigned char lac[2];
};

struct SControlChannelDescription
{
	unsigned char ccch_conf:3;
	unsigned char bs_ag_blks_res:3;
	unsigned char att:1;
	unsigned char spare1:1;

	unsigned char bs_pa_mfrms:3;
	unsigned char spare2:5;

	unsigned char t3212_timeout;
};

struct SCellOptions
{
	unsigned char radio_link_timeout:4;
	unsigned char dtx:2;
	unsigned char pwrc:1;
	unsigned char spare:1;
};

struct SCellSelectionParameters
{
	unsigned char ms_txpwr_max_cch:5;
	unsigned char cell_reselect_hysteresis:3;

	unsigned char rxlev_access_min:6;
	unsigned char neci:1;
	unsigned char acs:1;
};

struct SMsgCnt
{
	int mr;
	int system_type2;
	int system_type2bis;
	int system_type2ter;
	int system_type3;
	int system_type4;
	int system_type5;
	int system_type6;
	int system_type5bis;
	int system_type5ter;
};

struct link_header
{
	UINT8	time_slot	: 5;
	UINT8	E1_num	: 3;
	UINT8	board_num : 	8;
};
struct link_info
{
	short linknum;
	short address_TEI;
	short address_SAPI;
	bool operator <(link_info const& _A) const
	{
		if(linknum<_A.linknum)  
		return true;
		if(linknum==_A.linknum)
		{
			if(address_TEI<_A.address_TEI)
			return true;
		}
		if((linknum==_A.linknum) && (address_TEI==_A.address_TEI))
		{
			if(address_SAPI<_A.address_SAPI)
			return true;
		}
		return false;
	}
};

struct BA_SBA
{
	public:
    	BA_SBA()
    	{
        	memset(this, 0, sizeof(BA_SBA));
    	}
    	UINT8 length;
    	UINT32 isInit;
    	UINT16 BA[32];
};

struct BA_SDBA
{
	int type;
    	struct BA_SBA BA0;
    	struct BA_SBA BA1;
};

class CCellInfo
{
	public:
	char l_cgi[28];

	struct BA_SDBA BA_list;
	
	CCellInfo() {memset(l_cgi,0,sizeof(l_cgi));memset(&BA_list,0,sizeof(BA_list));}
	CCellInfo CCellInfo_cgi(char* cgi) { strcpy(l_cgi,cgi);return *this; }

	CCellInfo CCellInfo_bitmap(int type,char* bitmap) 
	{ 
		BA_SBA* pBa0 = &(BA_list.BA0);
		BA_SBA* pBa1 = &(BA_list.BA1);
		BA_list.type = type;
		switch(type)
		{
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2:
				pBa0->isInit = 1;
				pBa0->length = 0;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2BIS:
				if(pBa0->isInit == 0)
					return *this;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2TER:
				if(pBa0->isInit == 0)
					return *this;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5:
				pBa1->isInit = 1;
				pBa1->length = 0;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5BIS:
				if(pBa1->isInit == 0)
					return *this;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5TER:
				if(pBa1->isInit == 0)
					return *this;
				break;
		}
		switch(type)
		{
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2BIS:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2TER:
			for(int i=0; i<124; ++i)
        		{
            			if(bitmap[i] != 0)
            			{
                			pBa0->BA[pBa0->length] = i+1;//+1 by chris ,very important
					++(pBa0->length);
            			}
        		}
			break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5BIS:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5TER:
			for(int i=0; i<124; ++i)
        		{
            			if(bitmap[i] != 0)
            			{
                			pBa1->BA[pBa1->length] = i+1;//+1 by chris ,very important
					++(pBa1->length);
            			}
        		}
			break;
		}
		return *this; 
	}

	CCellInfo CCellInfo_vbit(int type,struct SVBitFormat* vbit)
	{ 
		BA_SBA* pBa0 = &(BA_list.BA0);
		BA_SBA* pBa1 = &(BA_list.BA1);
		BA_list.type = type;
		switch(type)
		{
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2:
				pBa0->isInit = 1;
				pBa0->length = 0;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2BIS:
				if(pBa0->isInit == 0)
					return *this;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2TER:
				if(pBa0->isInit == 0)
					return *this;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5:
				pBa1->isInit = 1;
				pBa1->length = 0;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5BIS:
				if(pBa1->isInit == 0)
					return *this;
				break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5TER:
				if(pBa1->isInit == 0)
					return *this;
				break;
		}
		switch(type)
		{
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2BIS:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2TER:
			for(int i=0; i<111; ++i)
        		{				
            			if(vbit[i].rrfcn != 0)
            			{
                			pBa0->BA[pBa0->length] = vbit[i].rrfcn;
					++(pBa0->length);
            			}
			}
			break;

			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5BIS:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5TER:
			for(int i=0; i<111; ++i)
        		{				
            			if(vbit[i].rrfcn != 0)
            			{
                			pBa1->BA[pBa1->length] = vbit[i].rrfcn;
					++(pBa1->length);
            			}
			}
			break;
		}
		return *this; 
	}

	void operator = (const CCellInfo& ob) 
	{
		strcpy(l_cgi,ob.l_cgi);
	}
	
	void operator + (const CCellInfo& ob) 
	{
		BA_SBA* pBa0 = &(BA_list.BA0);
		BA_SBA* pBa1 = &(BA_list.BA1);
		BA_SBA* obpBa0 = (BA_SBA*)&(ob.BA_list.BA0);
		BA_SBA* obpBa1 = (BA_SBA*)&(ob.BA_list.BA1);
		
		switch(ob.BA_list.type)
		{
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2BIS:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE2TER:
			pBa0->isInit = obpBa0->isInit;
			if(obpBa0->isInit == 0)
				return;
			pBa0->length = obpBa0->length;
		
			for(int i=0; i<obpBa0->length; ++i)
        		{
				pBa0->BA[i] = obpBa0->BA[i];
        		}
			break;				
		
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5BIS:
			case LAYER3INFO_MSG_SYSTEM_INFORMATION_TYPE5TER:
			pBa1->isInit = obpBa1->isInit;
			if(obpBa1->isInit == 0)
				return;
			pBa1->length = obpBa1->length;
		
			for(int i=0; i<obpBa1->length; ++i)
        		{
				pBa1->BA[i] = obpBa1->BA[i];
        		}
			break;
		}
	}
};

#pragma pack( )

using namespace std;
void show_cellmap(void);
int getCgi(char * linkID, int tei, char * cgi);
//int FindBcch(bool isIdle, UINT16 linkID, UINT8 tei, UINT8 bcch_freq_index);
int FindBcch(bool isIdle, char * linkID, UINT8 tei, UINT8 bcch_freq_index);

⌨️ 快捷键说明

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