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

📄 ge_eventstatistic.c

📁 程序是一个vxworks下对PMC公司3386千兆MAC芯片的驱动和配置
💻 C
📖 第 1 页 / 共 2 页
字号:
/**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-
*	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 + -