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

📄 cbcmain.c

📁 CBS(小区广播)程序实现手稿
💻 C
📖 第 1 页 / 共 2 页
字号:
	if ((s_Pid.iProcessId<0)||(s_Pid.iProcessId>LPROCESS))
	{
		printf("Pid Error!Pid=%d\n",s_Pid.iProcessId);
		//sys error
		return FAILURE;
	}

	switch (LPTimerExpireMessage->message_type)
	{
	case SCHEDULED_NEW_MESSAGE:
		{

#ifdef DEBUG_PRINT
            printf("Receive SCHEDULED_NEW_MESSAGE Message in B Area.\n\n"); 
#endif

			iReturnValue=Process_Scheduled_Write(s_Pid);
			/* 释放进程 */
			if (iReturnValue<=0)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}
		}
		break;

    case SCHEDULED_RESEND: /* 定时重发 */
		{

#ifdef DEBUG_PRINT
            printf("Receive SCHEDULED_RESEND Message in B Area.\n\n"); 
#endif

			Process_Scheduled_Resend(s_Pid,&LPTimerExpireMessage->para[0]);
		}
		break;

	case WRITE_RETURN_TO_CBC_PROXY:/* 到时返回CBCProxy */
		{

#ifdef DEBUG_PRINT
            printf("Receive WRITE_RETURN_TO_CBC_PROXY Message in B Area.\n\n"); 
#endif


			/* 处理WRITE回复定时器到时 */
			iReturnValue=Process_Write_Response_timer_Expired(s_Pid);
			if (iReturnValue==END)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}

		
		}
		break;

	case LIFE_PERIOD: /* 生命定时器 */
		{

#ifdef DEBUG_PRINT
            printf("Receive LIFE_PERIOD Message in B Area.\n\n"); 
#endif


			iReturnValue=Process_lifeEnd(&s_Pid);
			if (iReturnValue==END)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}

		}
		break;

	case REPLACE_RETURN_TO_CBC_PROXY: /* 到时返回Replace的响应 */
		{

#ifdef DEBUG_PRINT
            printf("Receive REPLACE_RETURN_TO_CBC_PROXY in B Area.\n\n"); 
#endif

			/* 处理REPLACE回复定时器到时 */
			iReturnValue=Process_Replace_Response_timer_Expired(s_Pid);
			if (iReturnValue==END)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}
		}
		break;

	case KILL_RETURN_TO_CBC_PROXY: /* 到时返回KillMessage的响应 */
		{

#ifdef DEBUG_PRINT
            printf("Receive KILL_RETURN_TO_CBC_PROXY in B Area.\n\n"); 
#endif

			/* 处理KillMessage回复定时器到时 */
			iReturnValue=Process_Kill_Response_timer_Expired(s_Pid);
			if (iReturnValue==END)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}
		}
		break;

	case STATUS_MSG_QUERY_RETURN: /* 到时返回StatusMessageQuery的响应 */
		{
#ifdef DEBUG_PRINT
            printf("Receive STATUS_MSG_QUERY_RETURN in B Area.\n\n"); 
#endif

			/* 处理StatusMessageQuery回复定时器到时 */
			iReturnValue=Process_StatusMessageQuery_Response_timer_Expired(s_Pid);
			if (iReturnValue==END)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}
		}
		break;

	case STATUS_CBCH_QUERY_RETURN: /* 到时返回StatusCBCHQuery的响应	*/
		{
#ifdef DEBUG_PRINT
            printf("Receive STATUS_CBCH_QUERY_RETURN in B Area.\n\n"); 
#endif

			/* 处理StatusCBCHQuery回复定时器到时 */
			/* 全部回复StatusCBCHQuery的响应 */
            Process_StatusCBCHQuery_Return_To_CBCProxy(s_Pid);

			if (free_pid((char *)&s_Pid)<0)
			{
				//sys error
				printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
			}
		}
		break;

	case SCHEDULED_STATUS_CBCH_QUERY:/* 定时查询信道负荷 */
		{
#ifdef DEBUG_PRINT
            printf("Receive STATUS_CBCH_QUERY_REQ in B Area.\n\n"); 
#endif
			/* 处理StatusCBCHQuery定时器到时 */
			Process_StatusCBCHQuery_Timer_Expired();
		}
		break;

	case SET_DRX_REPORT_RETURN:/* 到时返回SET_DRX_REPORT的响应 */ 
		{
#ifdef DEBUG_PRINT
            printf("Receive SET_DRX_REPORT_RETURN in B Area.\n\n"); 
#endif
			/* 处理SET_DRX_REPORT回复定时器到时 */
			Process_SET_DRX_Response_timer_Expired(s_Pid);

			if (free_pid((char *)&s_Pid)<0)
			{
				//sys error
				printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
			}

		}
		break;

	case RESET_RETURN: /* 到时返回RESET的响应 */
		{
#ifdef DEBUG_PRINT
            printf("Receive RESET_RETURN in B Area.\n\n"); 
#endif
			/* 处理SET_DRX_REPORT回复定时器到时 */
			Process_RESET_timer_Expired(s_Pid);

			if (free_pid((char *)&s_Pid)<0)
			{
				//sys error
				printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
			}

		}
		break;

	case STATISTIC_TIMER:/* 统计定时器 */
		{
#ifdef DEBUG_PRINT
            printf("Receive STATISTIC_TIMER in B Area.\n\n"); 
#endif
			iReturnValue=Process_Statistic_timer_Expired(s_Pid);
			/* 结束释放统计进程 */
			if (iReturnValue==END)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}
		
		}
		break;

	case WATCH_TIME: /* 观察定时器 */
		{
#ifdef DEBUG_PRINT
            printf("Receive WATCH_TIME in B Area.\n\n"); 
#endif
			iReturnValue=Process_Watch_timer_Expired(s_Pid);
			/* 结束释放观察进程 */
			if (iReturnValue==END)
			{
				if (free_pid((char *)&s_Pid)<0)
				{
					//sys error
					printf("Warning! Free Pid Error.pid=%d\n",s_Pid.iProcessId);
				}
			}

		}
		break;

	default:
		printf("Unrecognized message_type in timer_Expired process!\n");
		break;
	}

	return SUCCESS;
}

/* 处理C区消息 */
int Process_C_Message(CBEMESSAGE_t *LPs_CBEMessage)
{
	int           iReturnValue;
	CBEMESSAGE_t  *Lps_PidMessage;

#ifdef  OPEN_WARNING
	/* 告警描述字串 */
	unsigned char cWarningDescription[WARNING_DESC_LEN];
#endif

	switch (LPs_CBEMessage->s_MessageHead.iMessageType)
	{
/*	case CBCPROXY_VBIND://CBSE_VBIND://连接BSC
		{
#ifdef DEBUG_PRINT
            printf("Receive CBCPROXY_VBIND Message in C Area.\n"); 
#endif
			iReturnValue=ConnectToBsc(LPs_CBEMessage);
			//处理BSC连接失败
			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;
*/
	/* 配置一个BSC小区列表 */
    case CONFIGURE_BSC_CELL://    
		{

#ifdef DEBUG_PRINT
            printf("Receive CONFIGURE_BSC_CELL Message in C Area.\n"); 
#endif
			iReturnValue=Process_Configure_BSC_Cell(LPs_CBEMessage);

			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;

    /* 删除一个BSC小区列表 */
	case DELETE_BSC_CELL://       
		{
#ifdef DEBUG_PRINT
            printf("Receive DELETE_BSC_CELL Message in C Area.\n"); 
#endif

			iReturnValue=Process_DELETE_BSC_Cell(LPs_CBEMessage);

			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;
	/* 删除所有小区 */
	case DELETE_ALL_CELL:
		{
#ifdef DEBUG_PRINT
            printf("Receive DELETE_ALL_CELL Message in C Area.\n"); 
#endif
			iReturnValue=Process_DELETE_ALL_Cell(LPs_CBEMessage);
			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;
    /* 加一个小区 */
	case ADD_CELL://              
		{
#ifdef DEBUG_PRINT
            printf("Receive ADD_CELL Message in C Area.\n"); 
#endif

    		iReturnValue=Process_ADD_Cell(LPs_CBEMessage);

	    	Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);
		}
		break;
	/* 删除一个小区 */
	case DEL_CELL://   
		{
#ifdef DEBUG_PRINT
            printf("Receive DEL_CELL Message in C Area.\n"); 
#endif
			iReturnValue=Process_DEL_Cell(LPs_CBEMessage);
		
	    	Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);
		}
		break;


	/* 设置BSC地址,上下行操作者 */
	case SET_BSC_ADDR://  
		{
#ifdef DEBUG_PRINT
            printf("Receive SET_BSC_ADDR Message in C Area.\n"); 
#endif
			/* 设置BSC地址,上下行操作者 */
			iReturnValue=Process_SetBSCAddr(LPs_CBEMessage);
			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;

	/* 设置最大相对时间 */
   	case SET_MAX_RELATIVETIME://  
		{
#ifdef DEBUG_PRINT
            printf("Receive SET_MAX_RELATIVETIME in C Area.\n"); 
#endif

			iReturnValue=Process_SetMaxRelativeTime(LPs_CBEMessage);
			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;
	/* 开启小区负荷控制 */
	case LOAD_MONITOR_OPEN:
		{
#ifdef DEBUG_PRINT
            printf("Receive LOAD_MONITOR_OPEN in C Area.\n"); 
#endif
		    iReturnValue=Process_CellLoadingControl_Open(LPs_CBEMessage);
			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);
		}
		break;
	/* 关闭小区负荷控制 */
    case LOAD_MONITOR_CLOSE:
		{
#ifdef DEBUG_PRINT
            printf("Receive LOAD_MONITOR_CLOSE in C Area.\n"); 
#endif
		    iReturnValue=Process_CellLoadingControl_Close(LPs_CBEMessage);
			/* 返回确认 */
			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;

	/* 小区负荷控制状态 */
    case LOAD_MONITOR_STATUS:
		{
#ifdef DEBUG_PRINT
            printf("Receive LOAD_MONITOR_STATUS in C Area.\n"); 
#endif
		    Process_CellLoadingControl_Status(LPs_CBEMessage);
		}
		break;

	/* 统计 */
	case STATISTIC_REQUEST: 
		{
#ifdef DEBUG_PRINT
            printf("Receive STATISTIC_REQUEST in C Area.\n"); 
#endif

			iReturnValue=Process_Statistic_request(LPs_CBEMessage);
			/* 为了返回进程号 */
			if (iReturnValue>=0)
			{
    			Lps_PidMessage=(CBEMESSAGE_t  *)&ProcessData[iReturnValue][0];
				/* 返回确认 */
    			Process_Stat_Req_Conf(Lps_PidMessage,iReturnValue);
			}
			else
			{
				/* 返回确认 */
    			Process_Stat_Req_Conf(LPs_CBEMessage,iReturnValue);
			}

		}
		break;
    /* 取消统计 */
	case STATISTIC_CANCEL:
		{
#ifdef DEBUG_PRINT
            printf("Receive STATISTIC_CANCEL in C Area.\n"); 
#endif
			iReturnValue=Process_Statistic_cancel(LPs_CBEMessage);
			/* 返回确认 */
  			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);
		}
		break;

    /* 开启对BSC的连接 */
	case BSC_CONNECT_OPEN:
		{
#ifdef DEBUG_PRINT
            printf("Receive BSC_CONNECT_OPEN in C Area.\n"); 
#endif
			iReturnValue=Process_Bsc_Connect_Open(LPs_CBEMessage);
			/* 返回确认 */
  			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);
		}
		break;

	/* 关闭对BSC的连接 */
	case BSC_CONNECT_CLOSE:
		{
#ifdef DEBUG_PRINT
            printf("Receive BSC_CONNECT_CLOSE in C Area.\n"); 
#endif
			iReturnValue=Process_Bsc_Connect_Close(LPs_CBEMessage);
			/* 返回确认 */
  			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);
		}
		break;

	/* 查询BSC连接状态 */
	case QUERY_BSC_CONNECT_STATUS:
		{
#ifdef DEBUG_PRINT
            printf("Receive QUERY_BSC_CONNECT_STATUS in C Area.\n"); 
#endif
			iReturnValue=Process_Bsc_Connect_Status(LPs_CBEMessage);
			if (iReturnValue<0)
			{
				/* 返回错误 */
  				Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);
			}
		}
		break;

	/* 观察系统资源 */
	case WATCH_SYSRSC:     
		{
#ifdef DEBUG_PRINT
            printf("Receive WATCH_SYSRSC in C Area.\n"); 
#endif
			iReturnValue=Process_Watch_Sysrsc(LPs_CBEMessage);

			Process_Watch_Req_Confirm(LPs_CBEMessage,iReturnValue);

		}
		break;

	/* 停止观察 */
	case STOP_WATCH_SYSRSC:
		{
#ifdef DEBUG_PRINT
            printf("Receive STOP_WATCH_SYSRSC in C Area.\n"); 
#endif
			iReturnValue=Process_Stop_Watch_Sysrsc(LPs_CBEMessage);
			/* 返回 */
			Process_Manage_Message_Return(LPs_CBEMessage,iReturnValue);

		}
		break;
	/* 显示系统参数 */
    case DISPLAY_SYSPARA:
		{
#ifdef DEBUG_PRINT
            printf("Receive DISPLAY_SYSPARA in C Area.\n"); 
#endif
			Process_display_sysparameter(LPs_CBEMessage);

		}
		break;

	default:
		{
#ifdef  OPEN_WARNING
			/* 发送告警给OMP */
			memset(cWarningDescription,0,WARNING_DESC_LEN);
			sprintf(cWarningDescription,"不识别的消息类型");
			SendWarningToOmp(LINK_WARNING,ERROR_PACK,cWarningDescription);
#endif

			printf("Unrecognized Message in C area.\n");
		}
		break;
	}

	return SUCCESS;
}

int Initialize()
{
	int            i;  
  	struct _timeb  timebuffer;
	unsigned int   iRand;         

	_ftime( &timebuffer );

	TimeZone=timebuffer.timezone*60;

	Init_TimerQueue();/*清空TCB,创建定时器扫描线程*/
	init_pid();
	
	memset(&s_BSCCellInfo,0,sizeof(BSC_CELL_INFO_t)*MAX_BSC_CONNECT);
	memset(&s_RuntimeInfo,0,sizeof(RUNTIMEINFO_t));
	
	s_RuntimeInfo.CBCProxyConnectStatus=SOCKET_DISCONNECTED;

	/* 逻辑进程数据区初始化 */
	memset(&ProcessData,0,LPROCESS*LPCB_DATA_SIZE);

	/* 初始最大预约相对时间 */
	s_RuntimeInfo.iMaxRelativeTime=259200;//3天

	/* 初始序列号 */
//	srand( (unsigned)time( NULL ) );
//	iRand=rand();
    iRand=0;
	for(i=0;i<65536;i++)
	{
		memcpy(&s_RuntimeInfo.ChannelCount[i],&iRand,sizeof(unsigned short));
	}

	/* 初始本地地址 */
	strcpy(g_X25LocalAddr,"123");
	
	/* 初始连接时信息 */
	initBscConnectInfo();


	return SUCCESS;
}

⌨️ 快捷键说明

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