📄 ge_eventstatistic.c
字号:
/**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-
* GE_EventStatistic.c - Ethernet 1000M code. .
*
* Copyright 2001-12 by GDT, Inc
*
* modification history
* --------------------
* 2001-12-14,yxy created.
*
*/
#include <stdio.h>
#include <msgQlib.h>
#include <taskLib.h>
#include <errno.h>
#include <string.h>
#include "GE_EventStatistic.h"
#include "GE_Utility.h"
#include "GE_Global.h"
#include "GE_GlobalP.h"
#include "SBSL_Monitor.h"
#include "SBSL_Timer.h"
#include "SBSL_MemManage.h"
#include "bdcom_860.h"
unsigned int GE_STAT_DEBUG=0;
int GE_ES_TIMER_ID;
MSG_Q_ID GE_EventStatisticMsgQId;
unsigned short STATISTIC_INTERVAL=1;
GE_PORT_STAT_STRUCTURE StatPMsg;
GE_UNIT_STAT_STRUCTURE StatUMsg[2];
/********************************************************************************************
* EventStatisticInit: initlize the EventStatistic
*/
STATUS GE_EventStatisticInit(void)
{
if (SBSL_TaskFlagGet(GE_EVENTSTATIC_TASK_CODE)!=SBSL_TASK_UNREGISTER)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticInit:the task has REGISTERD!\n");
return ERROR;
}
GE_EventStatisticMsgQId=msgQCreate(MAX_MSG_NUM,sizeof(TASK_MSG),MSG_Q_FIFO);
if(GE_EventStatisticMsgQId == NULL)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticInit:Creating GE_EventStatisticMsgQ failed!\n");
return ERROR;
}
if(SBSL_TaskRegister( GE_EVENTSTATIC_TASK_CODE,
GE_EventStatisticMsgQId,
GE_EventStatisticReinit,
GE_EventStatisticDel)==ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticInit: register failed!\n");
return ERROR;
}
GE_ES_TIMER_ID =SBSL_TimerRequest ( GE_EVENTSTATIC_TASK_CODE,
SBSL_TaskMsgIdGet(GE_EVENTSTATIC_TASK_CODE),
STATISTIC_INTERVAL);
if(GE_ES_TIMER_ID == -1)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticInit: timer request failed!\n");
return ERROR;
}
if(taskSpawn ( TASK_NAME[GE_EVENTSTATIC_TASK_CODE],
GE_EVENTSTATISTIC_TASK_PRI,
0,
2048,
(FUNCPTR)GE_EventStatistic,
0,0,0,0,0,0,0,0,0,0)==ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticInit: Creating Task failed!\n");
return ERROR;
}
if(GE_STAT_DEBUG)
GE_printf(GE_EVENT,"GE_EventStatisticInit: init SUCCEED!\n");
return OK;
}
/********************************************************************************************
* EventStatistic_DEL: DEL the EventStatisticTask
*/
STATUS GE_EventStatisticDel (void)
{
if (SBSL_TaskFlagGet(GE_EVENTSTATIC_TASK_CODE) != SBSL_TASK_STARTED)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticDel:task not start!\n");
return ERROR;
}
if (taskDelete(SBSL_TaskIdGet(GE_EVENTSTATIC_TASK_CODE))==ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticDel:task delete FAILED!\n");
return ERROR;
}
if (SBSL_TaskMemClear(GE_EVENTSTATIC_TASK_CODE) == ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticDel:mem clear failed!\n");
}/*continue run and may cause mem block lost*/
SBSL_TimerDelete(GE_ES_TIMER_ID);
if (SBSL_TaskStop(GE_EVENTSTATIC_TASK_CODE) == ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticDel:ALARM!");
}
if(GE_STAT_DEBUG)
GE_printf(GE_EVENT,"GE_EventStatisticDel: task delete success!\n");
return OK;
}
/********************************************************************************************
* EventStatistic_reinit: reinit the EventStatisticTask
*/
STATUS GE_EventStatisticReinit (void)
{
if (SBSL_TaskFlagGet(GE_EVENTSTATIC_TASK_CODE)== SBSL_TASK_STARTED)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticReinit:the task has started!\n");
return ERROR;
}
GE_ES_TIMER_ID =SBSL_TimerRequest ( GE_EVENTSTATIC_TASK_CODE,
SBSL_TaskMsgIdGet(GE_EVENTSTATIC_TASK_CODE),
STATISTIC_INTERVAL);
if(GE_ES_TIMER_ID == -1)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticReinit: timer request failed!\n");
return ERROR;
}
if(taskSpawn ( TASK_NAME[GE_EVENTSTATIC_TASK_CODE],
GE_EVENTSTATISTIC_TASK_PRI,
0,
2048,
(FUNCPTR)GE_EventStatistic,
0,0,0,0,0,0,0,0,0,0)==ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatisticReinit:Creating task FAILED!\n");
return ERROR;
}
if(GE_STAT_DEBUG)
GE_printf(GE_EVENT,"GE_EventStatisticReinit:Creating Task SUCCESS!\n");
return OK;
}
/********************************************************************************************
* EventStatistic: Implement EventStatisticTask
*/
STATUS GE_EventStatistic()
{
TASK_MSG EventStatisticMsg;
ULONG COUNT=0;
unsigned char STATE;
while(BOARD_STATE!= BOARD_STATE_NORMAL)
{
taskDelay(30);
}
if(SBSL_TaskStart(GE_EVENTSTATIC_TASK_CODE,taskIdSelf())==ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatistic:task start failed!\n");
return ERROR;
}
SBSL_TimerStart (GE_ES_TIMER_ID);
while(1)
{
if(SBSL_TaskMsgIdGet(GE_EVENTSTATIC_TASK_CODE)==NULL)
{
return ERROR;
}
if (msgQReceive( SBSL_TaskMsgIdGet(GE_EVENTSTATIC_TASK_CODE),
(char *)&EventStatisticMsg,
sizeof(TASK_MSG),
WAIT_FOREVER) == ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatistic: cannot receive message!\n");
return ERROR;
}
else
{
switch (EventStatisticMsg.type)
{
case MONITOR_MSG:
if(GE_STAT_DEBUG)
GE_printf(GE_EVENT,"GE_EventStatistic:tEventStat receive MONITOR_MSG from tMonitor\n");
EventStatisticMsg.taskCode = GE_EVENTSTATIC_TASK_CODE;
EventStatisticMsg.type = MONITOR_MSG_ACK;
EventStatisticMsg.length = 0;
memset(EventStatisticMsg.msgBuf, 0, 128);
if (msgQSend(SBSL_TaskMsgIdGet( MONITOR_TASK_CODE),
(char *)&EventStatisticMsg,
MSG_LENGTH,
NO_WAIT,
MSG_PRI_URGENT) == ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatistic:send MONITOR_MSG_ACK to tBoardMonitor failed!\n");
break;
}
else
{
if(GE_STAT_DEBUG)
GE_printf(GE_EVENT,"GE_EventStatistic:send MONITOR_MSG_ACK to tBoardMonitor succeed.\n");
}
break;
case TIMER_OVERFLOW_MSG:
if(EventStatisticMsg.msgBuf[0]!=GE_ES_TIMER_ID)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatistic:TIMER_OVERFLOW_MSG is not belong to EventStatistic!\n");
break;
}
if(GE_STAT_DEBUG)
GE_printf(GE_EVENT,"GE_EventStatistic: receive TIMER_OVERFLOW_MSG.\n");
COUNT=COUNT+1;
if (SBSL_TimerMsgAck( GE_ES_TIMER_ID) == ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatistic: send TIMER_OVERFLOW_MSG_ACK to tTIMER failed!\n");
}
else
{
if(GE_STAT_DEBUG)
GE_printf(GE_EVENT,"GE_EventStatistic: send TIMER_OVEEFLOW_MSG_ACK to tTIMER succeed.\n");
}
if(SBSL_TimerStart (GE_ES_TIMER_ID)==ERROR)
{
if(GE_STAT_DEBUG)
GE_printf(GE_ALARM,"GE_EventStatistic:timer start failed!\n");
}
if(COUNT==netIf[0].statFreq)
{
GE_UnitStatRead(0);
GE_UnitStatRead(1);
if(GE_UnitStatReport(0)==ERROR)
{
break;
}
if(GE_UnitStatReport(1)==ERROR)
{
break;
}
COUNT=0;
GE_StatisticZero();
}
STATE=(unsigned char)(PM3386Read(0x6) & 0x3);
if(STATE==0x1)
{
if(netIf[0].adminStatus==NET_PORT_UP)
{
GE_EventReport( 4, 0,REPORT_LINE_STATE,NET_PORT_DOWN);
netIf[0].adminStatus=NET_PORT_DOWN;
}
if(netIf[1].adminStatus==NET_PORT_DOWN)
{
GE_EventReport( 4, 1,REPORT_LINE_STATE,NET_PORT_UP);
netIf[1].adminStatus=NET_PORT_UP;
}
}
if(STATE==0x2)
{
if(netIf[0].adminStatus==NET_PORT_DOWN)
{
GE_EventReport( 4, 0,REPORT_LINE_STATE,NET_PORT_UP);
netIf[0].adminStatus=NET_PORT_UP;
}
if(netIf[1].adminStatus==NET_PORT_UP)
{
GE_EventReport( 4, 1,REPORT_LINE_STATE,NET_PORT_DOWN);
netIf[1].adminStatus=NET_PORT_DOWN;
}
}
if(STATE==0x3)
{
if(netIf[0].adminStatus==NET_PORT_UP)
{
GE_EventReport( 4, 0,REPORT_LINE_STATE,NET_PORT_DOWN);
netIf[0].adminStatus=NET_PORT_DOWN;
}
if(netIf[1].adminStatus==NET_PORT_UP)
{
GE_EventReport( 4, 1,REPORT_LINE_STATE,NET_PORT_DOWN);
netIf[1].adminStatus=NET_PORT_DOWN;
}
}
if(STATE==0x0)
{
if(netIf[0].adminStatus==NET_PORT_DOWN)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -