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