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

📄 manageprocess.c

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

/*
  分配一个BSC信息下标
  -1:不可分配
*/
int AllotBSCCellInfo();

/* 根据BSCIdentifier找到BSCCellInfo的下标 
 * -1:不存在
 */
int FindOffsetAccordingBSC(unsigned char *LpBSC);

/* 配置一个小区列表 */
int Process_Configure_BSC_Cell(CBEMESSAGE_t *s_CBEMessage)
{
	BSC_CELL_INFO_i  *LPs_BSCCellInfo;
	int              posi;
	int              i,j;

	posi=AllotBSCCellInfo();
	if (posi<0)
	{
		return FULL_CONFIGURE_BSC;
	}

	LPs_BSCCellInfo=(BSC_CELL_INFO_i  *)&s_CBEMessage->cMessage[0];
	

	if (LPs_BSCCellInfo->cNumberOfCell>MAX_BSC_CELL_COUNT)
	{
		return NUMBEROFCELL_ERROR;
	}
	
	memset(&s_BSCCellInfo[posi],0,sizeof(BSC_CELL_INFO_t));

	s_BSCCellInfo[posi].bFlag=1;

	/*BSCID  */
	memcpy(&s_BSCCellInfo[posi].cBSCIdentifer[0],&LPs_BSCCellInfo->cBSCIdentifer[0],BSC_INDENTIFIER_LEN);
	memcpy(&s_BscConnectInfo[posi].BscIdentifier[0],&LPs_BSCCellInfo->cBSCIdentifer[0],BSC_INDENTIFIER_LEN);

	/*LACID  */
	memcpy(&s_BSCCellInfo[posi].cLacId[0],&LPs_BSCCellInfo->cLacId[0],LAC_INDENTIFIER_LEN);

	/* Bsc的地址 */
	LPs_BSCCellInfo->BSCAddress[BSC_ADDR_LEN]=0;
	memcpy(&s_BscConnectInfo[posi].BscAddr[0],&LPs_BSCCellInfo->BSCAddress[0],BSC_ADDR_LEN+1);
	
    /* 下行连接用户名 */
	LPs_BSCCellInfo->CBCOperator[MAX_OPERATOR_LEN]=0;
	memcpy(&s_BscConnectInfo[posi].CBCOperator[0],&LPs_BSCCellInfo->CBCOperator[0],MAX_OPERATOR_LEN+1);

	/* 上行连接用户名 */
	LPs_BSCCellInfo->BSCOperator[MAX_OPERATOR_LEN]=0;
	memcpy(&s_BscConnectInfo[posi].BSCOperator[0],&LPs_BSCCellInfo->BSCOperator[0],MAX_OPERATOR_LEN+1);

	for(i=0;i<LPs_BSCCellInfo->cNumberOfCell;i++)
	{

		j=s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].cNumberOfCell;
		memcpy(&s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellId[0],
			&LPs_BSCCellInfo->s_Cell[i],sizeof(CELLID_t));
		//for test
		s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_ERROR;
//		s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_OK;
		s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].cNumberOfCell++;		
		if(s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].cNumberOfCell==MAXCELLOFBTS)
		{
			s_BSCCellInfo[posi].cNumberOfBTS++;
		}
		
		if(i==(LPs_BSCCellInfo->cNumberOfCell-1))
		{
			s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_ERROR;
//			s_BSCCellInfo[posi].s_BTSCellInfo[s_BSCCellInfo[posi].cNumberOfBTS].s_CellId[j].cCellStatus=CELL_OK;
			s_BSCCellInfo[posi].cNumberOfBTS++;
		}
		
	}

	if (s_BscConnectInfo[posi].ConnectOpen==ON)
	{
		s_BscConnectInfo[posi].ConnectOpen=OFF;
		/* 延迟10秒保证链路断开,资源释放 */
		Sleep(RELEASE_X25CONNECT_WAIT);
	}

    /* 连接BSC */
	s_BscConnectInfo[posi].ConnectOpen=ON;
	/* 创建X25接口连接和监听线程 */
	s_BscConnectInfo[posi].DownlinkThreadOpen=ON;
	s_BscConnectInfo[posi].DownlinkConnectThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25DownlinkConnect,&posi,0,NULL);

	s_BscConnectInfo[posi].UplinkThreadOpen=ON;
	s_BscConnectInfo[posi].UplinkListenThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25UplinkListen,&posi,0,NULL);
			
	/* 延迟保证线程参数传递 */
	Sleep(1000);

	return SUCCESS;
}

/* 分配一个BSC信息下标 */
int AllotBSCCellInfo()
{
	int    i;

	for(i=0;i<MAX_BSC_CONNECT;i++)
	{
		if (s_BSCCellInfo[i].bFlag==0)
		{
			return i;
		}
	}
	return FAILURE;
}

//根据BSCIdentifier找到BSCCellInfo的下标
int FindOffsetAccordingBSC(unsigned char *LpBSC)
{
	int i;
	for(i=0;i<MAX_BSC_CONNECT;i++)
	{
		if (memcmp(&s_BSCCellInfo[i].cBSCIdentifer[0],LpBSC,BSC_INDENTIFIER_LEN)==0)
		{
			return i;
		}
	}
	return FAILURE;
}

/*---------------------------------------
//出错返回给CBC_proxy
//正确返回给CBC_proxy,ErrorCode=SUCCESS;
//用于C区消息
//---------------------------------------*/
void Process_Manage_Message_Return(CBEMESSAGE_t *LpCBEMessage,int ErrorCode)
{
	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=ErrorCode;

	s_SendingMessageError.ilen=sizeof(MESSAGE_HEAD_t)+sizeof(int);

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

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

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

}

/*---------------------------------------
//统计请求确认
//正确返回给CBC_proxy,ErrorCode=SUCCESS;
//用于C区消息
//---------------------------------------*/
void Process_Stat_Req_Conf(CBEMESSAGE_t *LpCBEMessage,int ErrorCode)
{
	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=STATISTIC_CONFIRM;
	
	/* 填写接受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=ErrorCode;

	s_SendingMessageError.ilen=sizeof(MESSAGE_HEAD_t)+sizeof(int);

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

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

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

}

/*---------------------------------------
//观察确认
//正确返回给CBC_proxy,ErrorCode=SUCCESS;
//用于C区消息
//---------------------------------------*/
void Process_Watch_Req_Confirm(CBEMESSAGE_t *LpCBEMessage,int ErrorCode)
{
	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=WATCH_CONFIRM;
	
	/* 填写接受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=ErrorCode;

	s_SendingMessageError.ilen=sizeof(MESSAGE_HEAD_t)+sizeof(int);

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

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

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

}

/* 删除一个BSC小区列表 */
int Process_DELETE_BSC_Cell(CBEMESSAGE_t *s_CBEMessage)
{
	unsigned char   *LPBSC;
	int             posi;

	LPBSC=&s_CBEMessage->cMessage[0];

	posi=FindOffsetAccordingBSC(LPBSC);
	if (posi<0)
	{
		return UNRECOGNIZED_BSC;
	}

	
	memset(&s_BSCCellInfo[posi],0,sizeof(BSC_CELL_INFO_t));
//	memset(&s_BscConnectInfo[posi],0,sizeof(BSC_CONNECT_INFO_t));
	s_BscConnectInfo[posi].ConnectOpen=OFF;

	if ((s_BscConnectInfo[posi].UplinkThreadOpen==ON)
		||(s_BscConnectInfo[posi].DownlinkThreadOpen==ON))
	{
		/* 延迟保证连接线程退出 */
		Sleep(RELEASE_X25CONNECT_WAIT);
	}
	return SUCCESS;

}

/* 删除所有小区 */
int Process_DELETE_ALL_Cell(CBEMESSAGE_t *s_CBEMessage)
{
	memset(&s_BSCCellInfo,0,sizeof(BSC_CELL_INFO_t)*MAX_BSC_CONNECT);
	return SUCCESS;
}

/* 设置BSC地址,上下行操作者 */
int Process_SetBSCAddr(CBEMESSAGE_t *s_CBEMessage)
{
	SETBSC_ADDR_t  *LPSetBSCAddr;
	int            posi;

	LPSetBSCAddr=(SETBSC_ADDR_t *)&s_CBEMessage->cMessage[0];
	posi=FindOffsetAccordingBSC(&LPSetBSCAddr->BSCIdentifier[0]);
	if (posi<0)
	{
		return UNRECOGNIZED_BSC;
	}

	if(s_BscConnectInfo[posi].ConnectOpen==ON)
	{
		return ADDRESS_IS_INUSED;
	}

	/* BSCIdentifier */
	memcpy(&s_BscConnectInfo[posi].BscIdentifier[0], &LPSetBSCAddr->BSCIdentifier[0],BSC_INDENTIFIER_LEN);
	/* BSCAddress */
	memcpy(&s_BscConnectInfo[posi].BscAddr[0],&LPSetBSCAddr->BSCAddress[0],BSC_ADDR_LEN);
	s_BscConnectInfo[posi].BscAddr[BSC_ADDR_LEN]=0;

	/* 上行操作者 */
	memcpy(&s_BscConnectInfo[posi].BSCOperator[0],&LPSetBSCAddr->BSCOperator[0], MAX_OPERATOR_LEN);
	s_BscConnectInfo[posi].BSCOperator[MAX_OPERATOR_LEN]=0;

    /* 下行操作者 */
	memcpy(&s_BscConnectInfo[posi].CBCOperator[0],&LPSetBSCAddr->CBCOperator[0], MAX_OPERATOR_LEN);
	s_BscConnectInfo[posi].CBCOperator[MAX_OPERATOR_LEN]=0;


	/* 创建X25接口连接和监听线程 */
//	s_BscConnectInfo[posi].UplinkListenThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25UplinkListen,&posi,0,NULL);
//	s_BscConnectInfo[posi].DownlinkConnectThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25DownlinkConnect,&posi,0,NULL);
   
	return SUCCESS;
}

/* 开启BSC的连接 */
int Process_Bsc_Connect_Open(CBEMESSAGE_t *LPs_CBEMessage)
{
	unsigned char  cBscId[BSC_INDENTIFIER_LEN];
	int            Tid;

	memcpy(cBscId,&LPs_CBEMessage->cMessage[0],BSC_INDENTIFIER_LEN);
	
    Tid=GetTid(cBscId);
	if(Tid<0)
	{
		return UNRECOGNIZED_BSC;
	}	
	

	if (s_BscConnectInfo[Tid].ConnectOpen==OFF)
	{
		if(s_BscConnectInfo[Tid].DownlinkThreadOpen==OFF&&
			s_BscConnectInfo[Tid].UplinkThreadOpen==OFF)
		{
			s_BscConnectInfo[Tid].ConnectOpen=ON;
			/* 创建X25接口连接和监听线程 */
			s_BscConnectInfo[Tid].DownlinkThreadOpen=ON;
			s_BscConnectInfo[Tid].DownlinkConnectThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25DownlinkConnect,&Tid,0,NULL);

			s_BscConnectInfo[Tid].UplinkThreadOpen=ON;
			s_BscConnectInfo[Tid].UplinkListenThread=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)X25UplinkListen,&Tid,0,NULL);
			
			/* 延迟保证线程参数传递 */
			Sleep(1000);
		}
		else
		{
			/* 请等5秒钟再试 */
			return WAIT_5_SECONDS_TRY_AGAIN;
		}
	}
	else
	{
		/* 已经开启 */
		return ALREADY_OPEN;
	}

	return SUCCESS;
}

/* 关闭BSC的连接 */
int Process_Bsc_Connect_Close(CBEMESSAGE_t *LPs_CBEMessage)
{
	unsigned char  cBscId[BSC_INDENTIFIER_LEN];
	int            Tid;

	memcpy(cBscId,&LPs_CBEMessage->cMessage[0],BSC_INDENTIFIER_LEN);
	
    Tid=GetTid(cBscId);
	if(Tid<0)
	{
		return UNRECOGNIZED_BSC;
	}	


	if (s_BscConnectInfo[Tid].ConnectOpen==ON)
	{
		s_BscConnectInfo[Tid].ConnectOpen=OFF;
	}
	else
	{
		/* 已经关闭 */
		return ALREADY_CLOSE;
	}

	return SUCCESS;

}

/* 设置最大相对时间 */
int Process_SetMaxRelativeTime(CBEMESSAGE_t *s_CBEMessage)
{
	int *LPRelativeTime;
	int RelativeTime;

	LPRelativeTime=(int *)&s_CBEMessage->cMessage[0];

	RelativeTime=(*LPRelativeTime)*86400;
	
	if((RelativeTime<0)||(RelativeTime>MAX_RELATIVE_TIME))
	{
		return FAILURE;
	}

⌨️ 快捷键说明

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