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

📄 statistic.c

📁 CBS(小区广播)程序实现手稿
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "..\sys\Include.h"

int Process_Statistic_Cbse(CBEMESSAGE_t *LpCBEMessage);
/* 处理小区广播失败和重新复位的次数的统计 
 * <0:返回错误, >=0:返回Pid
 */
int Process_Statistic_FailAndReset(CBEMESSAGE_t *LpCBEMessage);

/* 处理告警的统计 
 * <0:返回错误, >=0:返回Pid
 */
int Process_Statistic_Warning(CBEMESSAGE_t *LpCBEMessage);

/* 处理X25链路统计
 * <0:返回错误, >=0:返回Pid
 */
int Process_Statistic_X25(CBEMESSAGE_t *LpCBEMessage);

/* 处理Cbse统计定时器到时
 * 返回
 *   END         统计结束
 *   CONTINUANCE 统计继续
 */
int Process_Statistic_Cbse_TimeExpired(PID_t s_Pid);

/* 处理Statistic_FailAndReset统计定时器到时
 * 返回
 *   END         统计结束
 *   CONTINUANCE 统计继续
 */
int Process_Statistic_FailAndReset_TimeExpired(PID_t s_Pid);

/* 处理Statistic_X25统计定时器到时
 * 返回
 *   END         统计结束
 *   CONTINUANCE 统计继续
 */
int Process_Statistic_X25_TimeExpired(PID_t s_Pid);

/* 
 * 修改小区统计次数 
 * in: 
 *     LPCellId         小区识别号
 *     iBscPosi         BSC小区信息数组下标
 *     StatisticType    统计类型:1.write, 2.replace,3.Kill,4.Query 5.CBCH,
 *     mode             0.增加发送次数,1.增加成功次数,2增加失败次数
 *     Errortype        如果mode=2,FailureReason为失败原因,其余情况忽略.        
 */
void Update_Cell_Statistic_Count(char *LPCellId,int iBscPosi,int StatisticType ,int mode ,int FailureReason)
{
	int i,j;

	switch(StatisticType)
	{
    case WRITE_STATISTIC:     /* 写入 */
		{
			for(i=0;i<s_BSCCellInfo[iBscPosi].cNumberOfBTS;i++)
			{
				for(j=0;j<s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].cNumberOfCell;j++)
				{
					if(memcmp((LPCellId+2),&s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].cCellId[2],2)==0)
					{
						if(mode==0)
						{
							/* 发送此时加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_WriteCount.iSendCount++;
						}
						if(mode==1)
						{
							/* 成功次数加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_WriteCount.iSuccessCount++;
						}
						if(mode==2)
						{
							switch(FailureReason)
							{
							case  BSS_CAPACITY_EXCEEDED:/* 基站系统负荷超载 */
								{
    								s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_WriteCount.ibsscapErr++;
								}
								break;								
							case CELL_MEMORY_EXCEEDED: /* 小区内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_WriteCount.icellmemErr++;
								}
								break;
							case BSS_MEMORY_EXCEEDED: /*基站系统内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_WriteCount.ibssmemErr++;									
								}
								break;
							}
							
						}
						return;
					}
					
				}
			}
  
		}
		break;
	case REPLACE_STATISTIC:   /* 替换 */ 
		{
			for(i=0;i<s_BSCCellInfo[iBscPosi].cNumberOfBTS;i++)
			{
				for(j=0;j<s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].cNumberOfCell;j++)
				{
					if(memcmp((LPCellId+2),&s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].cCellId[2],2)==0)
					{
						if(mode==0)
						{
							/* 发送此时加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_ReplaceCount.iSendCount++;
						}
						if(mode==1)
						{
							/* 成功次数加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_ReplaceCount.iSuccessCount++;
						}
						if(mode==2)
						{
							switch(FailureReason)
							{
							case  BSS_CAPACITY_EXCEEDED:/* 基站系统负荷超载 */
								{
    								s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_ReplaceCount.ibsscapErr++;
								}
								break;								
							case CELL_MEMORY_EXCEEDED: /* 小区内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_ReplaceCount.icellmemErr++;
								}
								break;
							case BSS_MEMORY_EXCEEDED: /*基站系统内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_ReplaceCount.ibssmemErr++;									
								}
								break;
							}

						}
						return;
					}
					
				}
			}

		}
		break;
	case KILL_STATISTIC: /* 删除 */
		{
			for(i=0;i<s_BSCCellInfo[iBscPosi].cNumberOfBTS;i++)
			{
				for(j=0;j<s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].cNumberOfCell;j++)
				{
					if(memcmp((LPCellId+2),&s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].cCellId[2],2)==0)
					{
						if(mode==0)
						{
							/* 发送此时加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_KillCount.iSendCount++;
						}
						if(mode==1)
						{
							/* 成功次数加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_KillCount.iSuccessCount++;
						}
						if(mode==2)
						{
							switch(FailureReason)
							{
							case  BSS_CAPACITY_EXCEEDED:/* 基站系统负荷超载 */
								{
    								s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_KillCount.ibsscapErr++;
								}
								break;								
							case CELL_MEMORY_EXCEEDED: /* 小区内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_KillCount.icellmemErr++;
								}
								break;
							case BSS_MEMORY_EXCEEDED: /*基站系统内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_KillCount.ibssmemErr++;									
								}
								break;
							}
						}
						return;
					}
					
				}
			}

		}
		break;
	case QUERY_STATISTIC: /* 消息状态查询查询 */
		{
			for(i=0;i<s_BSCCellInfo[iBscPosi].cNumberOfBTS;i++)
			{
				for(j=0;j<s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].cNumberOfCell;j++)
				{
					if(memcmp((LPCellId+2),&s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].cCellId[2],2)==0)
					{
						if(mode==0)
						{
							/* 发送此时加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_QueryCount.iSendCount++;
						}
						if(mode==1)
						{
							/* 成功次数加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_QueryCount.iSuccessCount++;
						}
						if(mode==2)
						{
							switch(FailureReason)
							{
							case  BSS_CAPACITY_EXCEEDED:/* 基站系统负荷超载 */
								{
    								s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_QueryCount.ibsscapErr++;
								}
								break;								
							case CELL_MEMORY_EXCEEDED: /* 小区内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_QueryCount.icellmemErr++;
								}
								break;
							case BSS_MEMORY_EXCEEDED: /*基站系统内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_QueryCount.ibssmemErr++;									
								}
								break;
							}
						}
						return;
					}
					
				}
			}
		}
		break;
	case CBCH_STATISTIC: /* 小区信道负荷查询 */
		{
			for(i=0;i<s_BSCCellInfo[iBscPosi].cNumberOfBTS;i++)
			{
				for(j=0;j<s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].cNumberOfCell;j++)
				{
					if(memcmp((LPCellId+2),&s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].cCellId[2],2)==0)
					{
						if(mode==0)
						{
							/* 发送此时加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_CBCHCount.iSendCount++;
						}
						if(mode==1)
						{
							/* 成功次数加1 */
							s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_CBCHCount.iSuccessCount++;
						}
						if(mode==2)
						{
							switch(FailureReason)
							{
							case  BSS_CAPACITY_EXCEEDED:/* 基站系统负荷超载 */
								{
    								s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_CBCHCount.ibsscapErr++;
								}
								break;								
							case CELL_MEMORY_EXCEEDED: /* 小区内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_CBCHCount.icellmemErr++;
								}
								break;
							case BSS_MEMORY_EXCEEDED: /*基站系统内存溢出 */
								{
									s_BSCCellInfo[iBscPosi].s_BTSCellInfo[i].s_CellId[j].s_CBCHCount.ibssmemErr++;									
								}
								break;
							}

						}
						return;
					}
					
				}
			}
		}
		break;
	default:
		break;
	}
}

/* 处理统计请求 
 * <0:返回错误, >=0:返回Pid
 */
int Process_Statistic_request(CBEMESSAGE_t *LpCBEMessage)
{
	MESSAGE_STATISTIC_t  *LpMessageStatistic;
	int                  iReturnValue;

    if	(s_RuntimeInfo.iStatisticPidCount>=MAX_STATISTIC_PID)
	{
		/* 统计进程超负荷 */
		return TOO_MANY_STATISTIC_TASK;
	}

	LpMessageStatistic=(MESSAGE_STATISTIC_t *)LpCBEMessage;

	switch(LpMessageStatistic->ParaCategory)
	{
	case STATISTIC_CBSE: /* 服务元素的统计 */
		{			
			iReturnValue=Process_Statistic_Cbse(LpCBEMessage);
		}
		break;
	case STATISTIC_RESET_AND_FAIL:  /* 统计小区广播失败和重新复位的次数 */
		{
			iReturnValue=Process_Statistic_FailAndReset(LpCBEMessage);			
		}
		break;
//	case STATISTIC_WARNING: /* 告警的统计 */
//		{
//			iReturnValue=Process_Statistic_Warning(LpCBEMessage);			
//		}
//		break;
	case STATISTIC_X25:  /* X25链路统计 */
		{
			iReturnValue=Process_Statistic_X25(LpCBEMessage);			
		}
		break;
	default:
		{
			/* 无法识别的统计类型 */
			return UNRECOGNIZED_STATISTIC_TYPE;
		}
	}

    if	(iReturnValue>0)
	{
		/* 统计进程计数加一 */
		s_RuntimeInfo.iStatisticPidCount++;
	}

⌨️ 快捷键说明

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