📄 cbcmain.c
字号:
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 + -