📄 layer3infoptl.hpp
字号:
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 + -