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

📄 manageprocess.c

📁 CBS(小区广播)程序实现手稿
💻 C
📖 第 1 页 / 共 4 页
字号:
	s_RuntimeInfo.iMaxRelativeTime=RelativeTime;
	
	return SUCCESS;
}

/* 开启小区负荷控制 */
int Process_CellLoadingControl_Open(CBEMESSAGE_t *s_CBEMessage)
{
	int     iReturnValue;
	PID_t   s_Pid;

	memset(&s_Pid,0,sizeof(PID_t));
	/* 小区负荷控制标志 开*/
	s_RuntimeInfo.bCellLoadingControl=1;
	/* 对系统所有可用小区进行负荷查询 */
    Process_Query_All_StatusCBCH();

    iReturnValue=create_timer((SCHEDULED_STATUS_CBCH_QUERY_TIME),SCHEDULED_STATUS_CBCH_QUERY,(char *)&s_Pid,NULL);
	if (iReturnValue<0)
	{
		printf("Create SCHEDULED_STATUS_CBCH_QUERY timer Error!\n");
		return FAILURE;
	}
	return SUCCESS;
}

/* 关闭小区负荷控制 */
int Process_CellLoadingControl_Close(CBEMESSAGE_t *s_CBEMessage)
{
	/* 小区负荷控制标志 关*/
	s_RuntimeInfo.bCellLoadingControl=0;
	
	return SUCCESS;
}

/*  负荷控制是否开启
 *  0:关闭
 *  1:开启
 */
void Process_CellLoadingControl_Status(CBEMESSAGE_t *LpCBEMessage)
{
	SENDING_MESSAGE_ERROR_i  s_SendingMessageError;
	MESSAGE_HEAD_t           *LPs_MessageHead;
	CBEMESSAGE_t             s_CBEMessage;


	memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));

	LPs_MessageHead=(MESSAGE_HEAD_t *)&LpCBEMessage->s_MessageHead;


	s_SendingMessageError.s_MessageHead.iMessageAreaId=C;
	s_SendingMessageError.s_MessageHead.iMessageType=LPs_MessageHead->iMessageType;
	
	/* 填写接受Pid */
	memcpy(&s_SendingMessageError.s_MessageHead.s_ReceiverPid.iProcessId,&LPs_MessageHead->s_SenderPid.iProcessId,sizeof(PID_t));
	
	/* 填写发送者Pid */
	memcpy(&s_SendingMessageError.s_MessageHead.s_SenderPid.iProcessId,&LPs_MessageHead->s_ReceiverPid.iProcessId,sizeof(PID_t));
	s_SendingMessageError.s_MessageHead.s_SenderPid.cModuleId=MODULEID;     
	s_SendingMessageError.s_MessageHead.s_SenderPid.cFunctionId=FUNCTIONID;
		
	s_SendingMessageError.s_MessageHead.iMessageLength=sizeof(int);

	s_SendingMessageError.iErrorCode=s_RuntimeInfo.bCellLoadingControl;

	s_SendingMessageError.ilen=sizeof(MESSAGE_HEAD_t)+s_SendingMessageError.s_MessageHead.iMessageLength;

	//
	memcpy(&s_CBEMessage.iLen,&s_SendingMessageError.ilen,sizeof(SENDING_MESSAGE_ERROR_i));

	/* 发送给CBCproxy */
    AppendCBESendMessage(&s_CBEMessage);

}

/* 加一个小区 */
int Process_ADD_Cell(CBEMESSAGE_t *s_CBEMessage)
{
	char CellId[4];
	char BscId[BSC_INDENTIFIER_LEN];
	int  iReturnValue;
	int  i;
	int  iPosi;
	
	memcpy(BscId,&s_CBEMessage->cMessage[0],BSC_INDENTIFIER_LEN);

	memcpy(CellId,&s_CBEMessage->cMessage[BSC_INDENTIFIER_LEN],4);

	iReturnValue=Process_Search_BscId_AccordingTo_CellId(&CellId[0],&BscId[0]);

	/* 如果小区存在 */
	if(iReturnValue>=0)
	{
		return FAILURE;
	}

	iPosi=FindOffsetAccordingBSC(&BscId[0]);
	if (iPosi<0)
	{
		return UNRECOGNIZED_BSC;
	}

	if ((s_BSCCellInfo[iPosi].cNumberOfBTS==MAXBTSOFBSC)&&
		(s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].cNumberOfCell==MAXCELLOFBTS))
	{
		return FAILURE;
	}

	if(s_BSCCellInfo[iPosi].cNumberOfBTS==0)
	{
		s_BSCCellInfo[iPosi].cNumberOfBTS++;
	}

	if (s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].cNumberOfCell==MAXCELLOFBTS)
	{
		s_BSCCellInfo[iPosi].cNumberOfBTS++;
	}

	i=s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].cNumberOfCell;

	memcpy(&s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].s_CellId[i].cCellId[0],&CellId[0],4);

	s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].cNumberOfCell++;


	return SUCCESS;
}

/* 删除一个小区 */
/*
    删除一个系统中的小区,如果不是最后一个,
	将最后一个小区移到删除的小区空位
*/
int Process_DEL_Cell(CBEMESSAGE_t *s_CBEMessage)
{
	char CellId[4];
	char BscId[BSC_INDENTIFIER_LEN];
	int  iReturnValue;
	int  i,m,n;
	int  iPosi;

	
	memcpy(BscId,&s_CBEMessage->cMessage[0],BSC_INDENTIFIER_LEN);

	memcpy(CellId,&s_CBEMessage->cMessage[BSC_INDENTIFIER_LEN],4);

	iReturnValue=Process_Search_BscId_AccordingTo_CellId(&CellId[0],&BscId[0]);

	/* 如果小区不存在 */
	if(iReturnValue<0)
	{
		return NO_RECOGNIZEABLE_CELL;
	}

	iPosi=FindOffsetAccordingBSC(&BscId[0]);
	if (iPosi<0)
	{
		return UNRECOGNIZED_BSC;
	}



	/* 比较小区列表的Lac部分 */
	if (memcmp(CellId,s_BSCCellInfo[iPosi].cLacId,2)==0)
	{
		/* 遍历BTS的小区 */
		for(m=0;m<s_BSCCellInfo[iPosi].cNumberOfBTS;m++) 
		{
			/*比较BTS的小区 */
			for (n=0;n<s_BSCCellInfo[iPosi].s_BTSCellInfo[m].cNumberOfCell;n++)
			{
				/* 比较2字节小区识别号 */
				if (memcmp((CellId+2),&s_BSCCellInfo[iPosi].s_BTSCellInfo[m].s_CellId[n].cCellId[2],2)==0)
				{
					goto L1;
				}
			}
		}
	}

L1:
    /* 最后一个BTS包含小区个数 */
	i=s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].cNumberOfCell;
	
	/* 将最后一个小区移到删除小区的位置 */
	if((((i-1)==n)&&((s_BSCCellInfo[iPosi].cNumberOfBTS-1)==m)))
	{
    	/* 如果要删除的小区是最后一个 */
	}
	else
	{
		memcpy(&s_BSCCellInfo[iPosi].s_BTSCellInfo[m].s_CellId[n],
			&s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].s_CellId[i-1],
			sizeof(CELLID_INFO_t));
	}

	/* 删除最后一个小区 */
	if(i>1)
	{
		s_BSCCellInfo[iPosi].s_BTSCellInfo[s_BSCCellInfo[iPosi].cNumberOfBTS-1].cNumberOfCell--;				
	}
	else
	{
		s_BSCCellInfo[iPosi].cNumberOfBTS--;				
	}
	
	return SUCCESS;
}

/* 查询BSC连接状态 */
int Process_Bsc_Connect_Status(CBEMESSAGE_t *LPs_CBEMessage)
{
	unsigned char            BscId[BSC_INDENTIFIER_LEN];
	int                      Tid;
	MESSAGE_HEAD_t           *s_MessageHead;
	CBEMESSAGE_t             s_CBEMessage;
	BSC_LINK_STATUS_t        s_BscLinkStatus;
	int                      iReturnValue;

	memset(&s_BscLinkStatus,0,sizeof(BSC_LINK_STATUS_t));
	memcpy(BscId,&LPs_CBEMessage->cMessage[0],BSC_INDENTIFIER_LEN);

    Tid=GetTid(BscId);
	if(Tid<0)
	{
		return UNRECOGNIZED_BSC;
	}	

	memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));

	s_MessageHead=(MESSAGE_HEAD_t *)&LPs_CBEMessage->s_MessageHead;
	s_CBEMessage.s_MessageHead.iMessageAreaId=C;
	s_CBEMessage.s_MessageHead.iMessageType=s_MessageHead->iMessageType;
	/* 填写接受Pid */
	memcpy(&s_CBEMessage.s_MessageHead.s_ReceiverPid.iProcessId,&s_MessageHead->s_SenderPid.iProcessId,sizeof(PID_t));
	/* 填写发送者Pid */
	s_CBEMessage.s_MessageHead.s_SenderPid.cModuleId=MODULEID;     
	s_CBEMessage.s_MessageHead.s_SenderPid.cFunctionId=FUNCTIONID;
	/* 内容长度 */
	s_CBEMessage.s_MessageHead.iMessageLength=sizeof(int)+sizeof(BSC_LINK_STATUS_t)+BSC_INDENTIFIER_LEN;
	s_CBEMessage.iLen=s_CBEMessage.s_MessageHead.iMessageLength+sizeof(MESSAGE_HEAD_t);

	iReturnValue=SUCCESS;
	memcpy(&s_CBEMessage.cMessage[0],&iReturnValue,sizeof(int));
	memcpy(&s_CBEMessage.cMessage[sizeof(int)],BscId,BSC_INDENTIFIER_LEN);

	s_BscLinkStatus.cBscCallremoteThread=s_BscConnectInfo[Tid].DownlinkThreadOpen ;
	s_BscLinkStatus.cBscdownlinkStatus=s_BscConnectInfo[Tid].DownlinkStatus;
	s_BscLinkStatus.cBscListenThread=s_BscConnectInfo[Tid].UplinkThreadOpen;
	s_BscLinkStatus.cBscUplinkStatus=s_BscConnectInfo[Tid].UplinkStatus;
	memcpy(&s_CBEMessage.cMessage[sizeof(int)+BSC_INDENTIFIER_LEN],&s_BscLinkStatus,sizeof(BSC_LINK_STATUS_t));


	/* 发送给CBCproxy */
    AppendCBESendMessage(&s_CBEMessage);
	
	return SUCCESS;
}

/* 显示系统参数
 * 返回成功
 */
int Process_display_sysparameter(CBEMESSAGE_t *LPs_CBEMessage)
{
	DISPLAY_SYSPARA_RETURN_i s_DisplaySysParaReturn;
	MESSAGE_HEAD_t           *LPs_MessageHead;
	CBEMESSAGE_t             s_CBEMessage;


	memset(&s_CBEMessage,0,sizeof(CBEMESSAGE_t));

	LPs_MessageHead=(MESSAGE_HEAD_t *)&LPs_CBEMessage->s_MessageHead;


	s_DisplaySysParaReturn.s_MessageHead.iMessageAreaId=C;
	s_DisplaySysParaReturn.s_MessageHead.iMessageType=LPs_MessageHead->iMessageType;
	
	/* 填写接受Pid */
	memcpy(&s_DisplaySysParaReturn.s_MessageHead.s_ReceiverPid.iProcessId,&LPs_MessageHead->s_SenderPid.iProcessId,sizeof(PID_t));
	
	/* 填写发送者Pid */
	memcpy(&s_DisplaySysParaReturn.s_MessageHead.s_SenderPid.iProcessId,&LPs_MessageHead->s_ReceiverPid.iProcessId,sizeof(PID_t));
	s_DisplaySysParaReturn.s_MessageHead.s_SenderPid.cModuleId=MODULEID;     
	s_DisplaySysParaReturn.s_MessageHead.s_SenderPid.cFunctionId=FUNCTIONID;
		
	s_DisplaySysParaReturn.s_MessageHead.iMessageLength=sizeof(DISPLAY_SYSPARA_RETURN_i)-sizeof(MESSAGE_HEAD_t)-sizeof(short);

	s_DisplaySysParaReturn.iReturnCode=SUCCESS;

	s_DisplaySysParaReturn.ilen=sizeof(DISPLAY_SYSPARA_RETURN_i)-sizeof(short);

	s_DisplaySysParaReturn.iMaxRelativeTime=s_RuntimeInfo.iMaxRelativeTime/86400;
	//传递SocketHandle
//	LpCBEMessage=(CBEMESSAGE_t *)&ProcessData[s_Pid.iProcessId][0];
//	s_CBEMessage.SocketHandle=LpCBEMessage->SocketHandle;

	//
	memcpy(&s_CBEMessage.iLen,&s_DisplaySysParaReturn,sizeof(DISPLAY_SYSPARA_RETURN_i));

	/* 发送给CBCproxy */
    AppendCBESendMessage(&s_CBEMessage);

	return SUCCESS;
}





/* 打印响应小区列表  */
void Printf_file_ResponseList(PID_t s_Pid,int MessageType,CELLLIST_i *LPs_CellList)
{

	FILE *stream;
	char filename[100];
	int  i;
	int  j;

	memset(&filename[0],0,100);

	sprintf(filename, "C:\\CBCdebug\\RespPid=%dType=%d.txt" ,s_Pid.iProcessId,MessageType);
	
	if( (stream = fopen( filename, "w+" )) == NULL )
	{
		return;
	}

    fprintf(stream,"ResponseCellList:\n");

    fprintf(stream,"NumberOfBSC=%d\n",LPs_CellList->cNumberOfBSC);

	for(i=0;i<LPs_CellList->cNumberOfBSC;i++)
	{
		fprintf(stream,"Bscid=%d %d\n",LPs_CellList->s_BSCCellList[i].BSCIdentifier[0],
			LPs_CellList->s_BSCCellList[i].BSCIdentifier[1]);

		fprintf(stream,"    Response=%d\n",LPs_CellList->s_BSCCellList[i].bReceiveRespons);
		for (j=0;j<LPs_CellList->s_BSCCellList[i].ilength;j++)
		{
			fprintf(stream,"        CellId=%d %d %d %d ,status=%d , coml=%d \n",
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[0],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[1],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[2],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[3],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].cCellStatus,
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].iNoOfBroadcastsCompl				
				);
		}		
	}

    /* Close stream */
   fclose( stream ); 
		
}

/* 打印失败小区列表 */
void Printf_file_FailList(PID_t s_Pid,int MessageType,CELLLIST_i *LPs_CellList)
{

	FILE *stream;
	char filename[100];
	int  i;
	int  j;

	memset(&filename[0],0,100);

	sprintf(filename, "C:\\CBCdebug\\FailPid=%dType=%d.txt" ,s_Pid.iProcessId,MessageType);
	
	if( (stream = fopen( filename, "w+" )) == NULL )
	{
		return;
	}

    fprintf(stream,"FailCellList:\n");

    fprintf(stream,"NumberOfBSC=%d\n",LPs_CellList->cNumberOfBSC);

	for(i=0;i<LPs_CellList->cNumberOfBSC;i++)
	{
		fprintf(stream,"Bscid=%d %d\n",LPs_CellList->s_BSCCellList[i].BSCIdentifier[0],
			LPs_CellList->s_BSCCellList[i].BSCIdentifier[1]);

		fprintf(stream,"    Response=%d\n",LPs_CellList->s_BSCCellList[i].bReceiveRespons);
		for (j=0;j<LPs_CellList->s_BSCCellList[i].ilength;j++)
		{
			fprintf(stream,"        CellId=%d %d %d %d ,status=%d , coml=%d \n",
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[0],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[1],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[2],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].s_CellId.cCellId[3],
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].cCellStatus,
				LPs_CellList->s_BSCCellList[i].s_CellReport[j].iNoOfBroadcastsCompl				
				);
		}		
	}

    /* Close stream */
   fclose( stream ); 
		
}

/* 打印完成小区列表  */
void Printf_file_ComlList(PID_t s_Pid,int MessageType,NOOFBROADCASTSCOMLLIST_i  *LPs_NoofBroadcastComlList)
{

	FILE *stream;
	char filename[100];
	int  i;
	int  j;

	memset(&filename[0],0,100);

	sprintf(filename, "C:\\CBCdebug\\ComlPid=%dType=%d.txt" ,s_Pid.iProcessId,MessageType);
	
	if( (stream = fopen( filename, "w+" )) == NULL )
	{
		return;
	}

    fprintf(stream,"ComlCellList:\n");

    fprintf(stream,"NumberOfBSC=%d\n",LPs_NoofBroadcastComlList->cNumberOfBSC);

	for(i=0;i<LPs_NoofBroadcastComlList->cNumberOfBSC;i++)
	{
		fprintf(stream,"Bscid=%d %d\n",LPs_NoofBroadcastComlList->s_BSC_NoOfBroadCastcoml[i].BSCIdentifier[0],
			LPs_NoofBroadcastComlList->s_BSC_NoOfBroadCastcoml[i].BSCIdentifier[1]);

		for (j=0;j<LPs_NoofBroadcastComlList->s_BSC_NoOfBroadCastcoml[i].ilength;j++)
		{
			fprintf(stream,"        CellId=%d %d %d %d ,coml=%d \n",
				LPs_NoofBroadcastComlList->s_BSC_NoOfBroadCastcoml[i].s_NoOfBroadcastComl[j].s_Cellid.cCellId[0],
				LPs_NoofBroadcastComlList->s_BSC_NoOfBroadCastcoml[i].s_NoOfBroadcastComl[j].s_Cellid.cCellId[1],
				LPs_NoofBroadcastComlList->s_BSC_NoOfBroadCastcoml[i].s_NoOfBroadcastComl[j].s_Cellid.cCellId[2],
				LPs_NoofBroadcastComlList->s_BSC_NoOfBroadCastcoml[i].s_NoOfBroadcastComl[j].s_Cellid.cCellId[3],

⌨️ 快捷键说明

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