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

📄 statistic.c

📁 CBS(小区广播)程序实现手稿
💻 C
📖 第 1 页 / 共 5 页
字号:
	LpMessageStatistic=(MESSAGE_STATISTIC_t *)LpCBEMessage;

	s_Pid.cFunctionId=MODULEID;
    s_Pid.cFunctionId=FUNCTIONID;

	switch(LpMessageStatistic->ParaId)
	{
	case ALL_CELLOFCBC_RESETANDFAIL_CNT:/* CBC支持的所有小区 */
		{
			/* 分配一个统计进程 */
			s_Pid.cFunctionId=FUNCTIONID;
			s_Pid.cModuleId=MODULEID;
			s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
			if ( s_Pid.iProcessId < 0 )
			{
				printf("Creat Process Error\n");
				return FAILURE;
			}

			memcpy(&LpMessageStatistic->s_StatMessageHead.s_ReceiverPid,
				&s_Pid,sizeof(PID_t));

			memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);

			memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
			LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];			

//			memset(&s_CellResetAndFailStatResult,0,sizeof(CELL_RESET_AND_FAIL_STAT_RESULT_t));

			memset(&s_Cell_ResetFail_Count,0,sizeof(CELL_RESETFAIL_COUNT_t));
			for(i=0;i<MAX_BSC_CONNECT;i++)
			{
				if (s_BSCCellInfo[i].bFlag==1)
				{
  					for(j=0;j<s_BSCCellInfo[i].cNumberOfBTS;j++)
					{
						for(k=0;k<s_BSCCellInfo[i].s_BTSCellInfo[j].cNumberOfCell;k++)
						{
							s_Cell_ResetFail_Count.iFailureCount=s_Cell_ResetFail_Count.iFailureCount+
								s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].iFailureCount;

							s_Cell_ResetFail_Count.icResetCount=s_Cell_ResetFail_Count.icResetCount+
								s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].icResetCount;
						}
					}
				}
			}

			memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
				&s_Cell_ResetFail_Count,sizeof(CELL_RESETFAIL_COUNT_t));


			/* 创建统计定时器 */
			iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
				STATISTIC_TIMER,(char *)&s_Pid,NULL);
			/* 创建定时器失败 */
			if (iReturnValue<0)
			{
				printf("Create timer Error!\n");
				/* 结束统计进程 */
				free_pid((char *)&s_Pid);
				return iReturnValue;
			}

			/* 保存统计定时器在进程区尾部 */
			memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-sizeof(int)],&iReturnValue,sizeof(int));

		}
		break;
	case ALL_CELLOFBSC_RESETANDFAIL_CNT:/* BSC的小区 */
		{
			/* 分配一个统计进程 */
			s_Pid.cFunctionId=FUNCTIONID;
			s_Pid.cModuleId=MODULEID;
			s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
			if ( s_Pid.iProcessId < 0 )
			{
				printf("Creat Process Error\n");
				return FAILURE;
			}

			memcpy(&LpMessageStatistic->s_StatMessageHead.s_ReceiverPid,
				&s_Pid,sizeof(PID_t));

			memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);

			memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
			LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];			

			Tid=GetTid(&LpMessageStatistic->BSCIdentifier[0]);
			if (Tid<0)
			{
				return UNRECOGNIZED_BSC;
			}

			memset(&s_Cell_ResetFail_Count,0,sizeof(CELL_RESETFAIL_COUNT_t));

			for(i=0;i<s_BSCCellInfo[Tid].cNumberOfBTS;i++)
			{
				for(j=0;j<s_BSCCellInfo[Tid].s_BTSCellInfo[i].cNumberOfCell;j++)
				{
					s_Cell_ResetFail_Count.icResetCount=
						s_Cell_ResetFail_Count.icResetCount+
						s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].icResetCount;
					s_Cell_ResetFail_Count.iFailureCount=
						s_Cell_ResetFail_Count.iFailureCount+
						s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].iFailureCount;
				}
			}
			
			memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],&s_Cell_ResetFail_Count,sizeof(CELL_RESETFAIL_COUNT_t));

//
/*
//			memset(&s_CellResetAndFailStatResult,0,sizeof(CELL_RESET_AND_FAIL_STAT_RESULT_t));

			for(i=0;i<s_BSCCellInfo[Tid].cNumberOfBTS;i++)
			{
				for(j=0;j<s_BSCCellInfo[Tid].s_BTSCellInfo[i].cNumberOfCell;j++)
				{
//					k=s_CellResetAndFailStatResult.cNumber;
//					memcmp(&s_CellResetAndFailStatResult.s_CellResetAndFailCnt[k].cCell[0],
//						&s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].cCellId[0],4);
//					s_CellResetAndFailStatResult.s_CellResetAndFailCnt[k].icResetCount=
//						s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].icResetCount;
//					s_CellResetAndFailStatResult.s_CellResetAndFailCnt[k].iFailureCount=
//						s_BSCCellInfo[Tid].s_BTSCellInfo[i].s_CellId[j].iFailureCount;

//					s_CellResetAndFailStatResult.cNumber++;										
				}
			}

//			memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
//				&s_CellResetAndFailStatResult,
//				s_CellResetAndFailStatResult.cNumber*sizeof(CELL_RESET_AND_FAIL_COUNT_t)+1);
*/
			/* 创建统计定时器 */
			iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
				STATISTIC_TIMER,(char *)&s_Pid,NULL);
			/* 创建定时器失败 */
			if (iReturnValue<0)
			{
				printf("Create timer Error!\n");
				/* 结束统计进程 */
				free_pid((char *)&s_Pid);
				return iReturnValue;
			}

			/* 保存统计定时器在进程区尾部 */
			memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-sizeof(int)],&iReturnValue,sizeof(int));
									
		}
		break;
	case CELL_RESETANDFAIL_CNT:         /* 小区 */
		{
			/* 分配一个统计进程 */
			s_Pid.cFunctionId=FUNCTIONID;
			s_Pid.cModuleId=MODULEID;
			s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
			s_Pid.cFunctionId=FUNCTIONID;
			s_Pid.cModuleId=MODULEID;
			if ( s_Pid.iProcessId < 0 )
			{
				printf("Creat Process Error\n");
				return FAILURE;
			}

			memcpy(&LpMessageStatistic->s_StatMessageHead.s_ReceiverPid,
				&s_Pid,sizeof(PID_t));

			memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);

			memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
			LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];			

//			memset(&s_CellResetAndFailStatResult,0,sizeof(CELL_RESET_AND_FAIL_STAT_RESULT_t));
			/* 初始为不存在 */
			bIfCellExist=0;

			for(i=0;i<MAX_BSC_CONNECT;i++)
			{
				if (s_BSCCellInfo[i].bFlag==1)
				{
  					for(j=0;j<s_BSCCellInfo[i].cNumberOfBTS;j++)
					{
						for(k=0;k<s_BSCCellInfo[i].s_BTSCellInfo[j].cNumberOfCell;k++)
						{
							if(memcmp(&LpMessageStatistic->cCellId[0],
								&s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].cCellId[0],4)==0)
							{
								/* 记下小区在系统中的位置,记在进程尾部 */
								memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-16],&i,4);
								memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-12],&j,4);
								memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-8],&k,4);
								/* 跳出循环 */
								bIfCellExist=EXIST;
								goto L_out;
							}
						}
					}
				}
			}

L_out:
			if(bIfCellExist==0)
			{
				return NO_RECOGNIZEABLE_CELL;
			}
			s_Cell_ResetFail_Count.iFailureCount=
				s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].iFailureCount;

			s_Cell_ResetFail_Count.icResetCount=
				s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].icResetCount;

			memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
				&s_Cell_ResetFail_Count,sizeof(CELL_RESETFAIL_COUNT_t));

/*
			memcmp(&s_CellResetAndFailStatResult.s_CellResetAndFailCnt[0].cCell[0],
			&s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].cCellId[0],4);
			
			s_CellResetAndFailStatResult.s_CellResetAndFailCnt[0].icResetCount=
				s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].icResetCount;
			s_CellResetAndFailStatResult.s_CellResetAndFailCnt[0].iFailureCount=
				s_BSCCellInfo[i].s_BTSCellInfo[j].s_CellId[k].iFailureCount;
			s_CellResetAndFailStatResult.cNumber++;
			

			memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],
				&s_CellResetAndFailStatResult,
				s_CellResetAndFailStatResult.cNumber*sizeof(CELL_RESET_AND_FAIL_COUNT_t)+1);
*/
			


			/* 创建统计定时器 */
			iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
				STATISTIC_TIMER,(char *)&s_Pid,NULL);
			/* 创建定时器失败 */
			if (iReturnValue<0)
			{
				printf("Create timer Error!\n");
				/* 结束统计进程 */
				free_pid((char *)&s_Pid);
				return iReturnValue;
			}
			/* 保存统计定时器在进程区尾部 */
			memcpy(&ProcessData[s_Pid.iProcessId][LPCB_DATA_SIZE-sizeof(int)],&iReturnValue,sizeof(int));
			
		}
		break;
	}

	return s_Pid.iProcessId;

}

/* 处理告警的统计 (目前没使用)
 * <0:返回错误, >=0:返回Pid
 */
int Process_Statistic_Warning(CBEMESSAGE_t *LpCBEMessage)
{
	MESSAGE_STATISTIC_t            *LpMessageStatistic;
	PID_t                          s_Pid;
	WARNING_STATISTIC_RESULT_t     s_WarningStatiResult;
	int                            iReturnValue;

	s_Pid.cFunctionId=MODULEID;
    s_Pid.cFunctionId=FUNCTIONID;

	/* 分配一个统计进程 */
    s_Pid.cFunctionId=FUNCTIONID;
    s_Pid.cModuleId=MODULEID;
	s_Pid.iProcessId=alloc_pid((char *)&s_Pid);
	if ( s_Pid.iProcessId < 0 )
	{
		printf("Creat Process Error\n");
		return FAILURE;
	}

	memset(&ProcessData[s_Pid.iProcessId][0],0,LPCB_DATA_SIZE);

	memcpy(&ProcessData[s_Pid.iProcessId][0],LpCBEMessage,LpCBEMessage->iLen+2);
	LpMessageStatistic=(MESSAGE_STATISTIC_t *)&ProcessData[s_Pid.iProcessId][0];

	memset(&s_WarningStatiResult,0,sizeof(WARNING_STATISTIC_RESULT_t));

	/* 资源告警 进程不能分配 */
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=SOURCE_SHORTAGE;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=PID_USEUP;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
		s_CBSECount.AlarmType[SOURCE_SHORTAGE-1].s_AlarmCode[PID_USEUP-1];
	s_WarningStatiResult.cNumber++;

	/* 资源告警 定时器不能分配 */
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=SOURCE_SHORTAGE;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=TIMER_USEUP;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
		s_CBSECount.AlarmType[SOURCE_SHORTAGE-1].s_AlarmCode[TIMER_USEUP-1];
	s_WarningStatiResult.cNumber++;

	/* 打解包告警 解包错误告警 */
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=PACK_UNPACK;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=UNRECOGNIZED_PACK;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
		s_CBSECount.AlarmType[PACK_UNPACK-1].s_AlarmCode[UNRECOGNIZED_PACK-1];
	s_WarningStatiResult.cNumber++;

	/* 链路告警 IP输入队列告警 */
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=IP_INPUT_QUEUE;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
		s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[IP_INPUT_QUEUE-1];
	s_WarningStatiResult.cNumber++;

	/* 链路告警 CBC_BSC输出队列告警 */
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=X25_OUTPUT_QUEUE;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
		s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[X25_OUTPUT_QUEUE-1];
	s_WarningStatiResult.cNumber++;

	/* 链路告警 错误包告警 */
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=ERROR_PACK ;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
		s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[ERROR_PACK -1];
	s_WarningStatiResult.cNumber++;

	/* 链路告警 Bsc断连时告警 */
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmCode=LINK_WARNING;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].cAlarmType=BSC_LINK  ;
	s_WarningStatiResult.s_AKindOfWarningStat[s_WarningStatiResult.cNumber].iCount=
		s_CBSECount.AlarmType[LINK_WARNING-1].s_AlarmCode[BSC_LINK-1];
	s_WarningStatiResult.cNumber++;

	memcpy(&ProcessData[s_Pid.iProcessId][sizeof(MESSAGE_STATISTIC_t)],&s_WarningStatiResult,s_WarningStatiResult.cNumber*sizeof(ONETYPE_WARNING_STATISTIC_t)+1);

	/* 创建统计定时器 */
	iReturnValue=create_timer(LpMessageStatistic->StatTimeLength*1000,
		STATISTIC_TIMER,(char *)&s_Pid,NULL);
	/* 创建定时器失败 */
	if (iReturnValue<0)
	{
		printf("Create timer Error!\n");
		return iReturnValue;

⌨️ 快捷键说明

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