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

📄 p_ce_cesriop.cxx

📁 Cwenjian,zhongxing tongxindaimazhong de yige wenjian
💻 CXX
📖 第 1 页 / 共 2 页
字号:
#ifndef _SDL2C_VER_
#define _SDL2C_VER_
#endif
#ifdef HIRS_PLAT
#pragma pack(0)

#include "CE_CESRIOP.h"




extern bool bStopAllReport;

#ifdef __cplusplus
extern "C" {
#endif
void P_CE_CESRIOPEntry(WORD State, WORD Signal, VOID *pSignalPara, VOID *pVarP);
#ifdef __cplusplus
	}
#endif

/**************************************/
/*   define process state             */
/**************************************/
#define S_Idle	(S_StartUp + 1)

/**************************************/
/*   define process Timer             */
/**************************************/
#define TimerShakehand	(E_R_B_TimerBase + 1)
#define TimerFlowBlock	(E_R_B_TimerBase + 2)

/**************************************/
/*   internal procedure prototype     */
/**************************************/
static VOID RIOPStopAllReportItem (VOID);
static Boolean FillProcessTable (T_RIOPSetDyn RIOPSetDynVar);
static Boolean IsObserveEnable (T_SIGNAL);
static VOID TransferToRIOReport (T_SIGNAL *, T_RIOReport *);
static VOID RIOPInitialProcessTable (VOID);

/***********************************************************
 *                      进程结构                           *
 ***********************************************************/
typedef struct tagT_P_CE_CESRIOPVars {
	T_RIOPSetDyn	RIOPSetDynVar;
	T_RIOPSetStatic	RIOPSetStaticVar;
	T_RIOPSetAck	RIOPSetAckVar;
	T_RIOReport	RIOReportVar;
	T_RIOPChangedPriority	RIOPChangedPriorityVar;
	T_RIOPAutoAdjust	RIOPSetAutoAdjustVar;
	T_RIOPProcessConfigTableArray	RIOPProcessConfigTableArrayVar;
	VPID	VPID_R_RSP_Config;
	Boolean	bEnableAutoAdjust;
	Integer	B_A_LinkStatus;
	Integer	FrameCount;
	Boolean	bFlowBlockFlag;
	T_SIGNAL	CESignal;
	Integer	FRAME_THRESH_UP;
	Integer	FRAME_THRESH_DOWN;
	BYTE	byCESRIOPPriority;
	ULONG	VitualPNO;
	BYTE	byInstNO;
} T_P_CE_CESRIOPVars;

/***********************************************************
 *                      进程入口函数                       *
 ***********************************************************/
extern "C" void P_CE_CESRIOPEntry(WORD State, WORD Signal, VOID *pSignalPara, VOID *pVarP)
{
    T_P_CE_CESRIOPVars	* pVar;
    Integer	iLoop;
    /*
    if (NULL == pVarP)
	{
    	#ifdef CEC_FUNC_DEBUG
            CECOutputDebugMsg("SetCECVPID error : Invalid Parameter pVarP = NULL!\n\r");
        #endif
        CES_RLSA_ExceptionReport(CEMERROR_RIOP_PARAM_POINTER_IS_NULL,0, FILE_CES_CEM_RIOP);	
	}
	*/

    pVar	= (T_P_CE_CESRIOPVars *)pVarP;
    switch (State)
    {
    case S_StartUp:
        V_TestVarSpace(sizeof(T_P_CE_CESRIOPVars));
        //R_TestVarSpace(sizeof(T_P_CE_CESRIOPVars));
        RIOPInitialProcessTable();
        pVar->FRAME_THRESH_UP	= 5;
        pVar->FRAME_THRESH_DOWN = 1;
        pVar->FrameCount	= 0;
        pVar->bEnableAutoAdjust	= TRUE;
        pVar->bFlowBlockFlag	= FALSE;
        pVar->byCESRIOPPriority = 0;
        bStopAllReport = TRUE;
        V_ResetTimer(TimerShakehand);
        V_ResetTimer(TimerFlowBlock);
        V_NextState(S_Idle);
    case S_Idle:
        switch (Signal)
        {
        case E_O_R_RIOPNetNormal:
            pVar->VPID_R_RSP_Config=V_Sender();
            V_Output(E_R_O_RIOPNetNormalAck,NULL, 0, COMM_RELIABLE, pVar->VPID_R_RSP_Config);
            //Output(E_R_O_RIOPNetNormalAck, NULL, 0, WITH_ACK,pVar->PID_R_RSP_Config);
            pVar->B_A_LinkStatus = 0;
            V_SetRelTimer(CES_TIMERSHAKEHAND_15SEC, TimerShakehand);
            V_NextState(S_Idle);
        case TimerShakehand:
            ++(pVar->B_A_LinkStatus);
            if (pVar->B_A_LinkStatus <= 4)
            {
                V_SetRelTimer(CES_TIMERSHAKEHAND_15SEC, TimerShakehand);
            }
            else
            {
                RIOPStopAllReportItem();
                pVar->B_A_LinkStatus = 0;
            }
            V_NextState(S_Idle);
        case E_R_RIOPStop:
            RIOPStopAllReportItem();
            V_NextState(S_Idle);            
        case E_O_R_RIOPSetDyn:
        	if (pSignalPara == NULL)
        	{
        		/*CES_RLSA_ExceptionReport(CEMERROR_RIOP_PARAM_POINTER_IS_NULL,
                                         __LINE__,
                                         FILE_CES_CEM_RIOP);*/
                V_NextState(S_Idle);
        	}
            memcpy((VOID *)&(pVar->RIOPSetDynVar), pSignalPara, sizeof(T_RIOPSetDyn));
            
            bStopAllReport = FALSE;
            if( FillProcessTable( pVar->RIOPSetDynVar ) )
            {
                pVar->RIOPSetAckVar.dwRet	= 0;
            }
            else
            {
                pVar->RIOPSetAckVar.dwRet	= 1;
            }
            
            pVar->RIOPSetAckVar.dwSeqId	= pVar->RIOPSetDynVar.dwSeqId;
            pVar->VPID_R_RSP_Config=V_Sender();
            V_SetRelTimer(CES_TIMERFLOWBLOCK_2SEC, TimerFlowBlock);
            V_Output(E_R_O_RIOPSetAck, (BYTE *)&(pVar->RIOPSetAckVar), sizeof(T_RIOPSetAck), COMM_RELIABLE, pVar->VPID_R_RSP_Config);
            //Output(E_R_O_RIOPSetAck, (BYTE *)&(pVar->RIOPSetAckVar), sizeof(T_RIOPSetAck), WITH_ACK,pVar->PID_R_RSP_Config);
            V_NextState(S_Idle);
        case E_O_R_RIOPSetStatic:
        	if (pSignalPara == NULL)
        	{
        		/*CES_RLSA_ExceptionReport(CEMERROR_RIOP_PARAM_POINTER_IS_NULL,
                                         __LINE__,
                                         FILE_CES_CEM_RIOP);*/
                V_NextState(S_Idle);
        	}
            memcpy((VOID *)&(pVar->RIOPSetStaticVar), pSignalPara, sizeof(T_RIOPSetStatic));
            pVar->RIOPSetAckVar.dwRet	= 1;
            pVar->RIOPSetAckVar.dwSeqId	= pVar->RIOPSetStaticVar.dwSeqId;
            pVar->VPID_R_RSP_Config=V_Sender();
            V_Output(E_R_O_RIOPSetAck, (BYTE *)&(pVar->RIOPSetAckVar), sizeof(T_RIOPSetAck), COMM_RELIABLE, pVar->VPID_R_RSP_Config);
            //Output(E_R_O_RIOPSetAck, (BYTE *)&(pVar->RIOPSetAckVar), sizeof(T_RIOPSetAck), WITH_ACK,pVar->PID_R_RSP_Config);
            bStopAllReport = FALSE;
            NextState(S_Idle);
        case E_C_C_Signal:
        	if (pSignalPara == NULL)
        	{
        		/*CES_RLSA_ExceptionReport(CEMERROR_RIOP_PARAM_POINTER_IS_NULL,
                                         __LINE__,
                                         FILE_CES_CEM_RIOP);*/
                V_NextState(S_Idle);
        	}
            memcpy((VOID *)&(pVar->CESignal), pSignalPara, sizeof(T_SIGNAL));

            if (IsObserveEnable(pVar->CESignal))
            {
                pVar->VitualPNO = (pVar->CESignal).wProcName;
                pVar->byInstNO	= (pVar->CESignal).byInstNo;
                TransferToRIOReport(&(pVar->CESignal), &(pVar->RIOReportVar));
                pVar->FrameCount	= pVar->FrameCount + 1;
                V_Output(E_R_O_RIOPReport, (BYTE *)&(pVar->RIOReportVar), sizeof(T_RIOReport), COMM_RELIABLE, pVar->VPID_R_RSP_Config);
                //Output(E_R_O_RIOPReport, (BYTE *)&(pVar->RIOReportVar), sizeof(T_RIOReport), WITH_ACK,pVar->PID_R_RSP_Config);
            }
            NextState(S_Idle);
        case TimerFlowBlock:
            if( (pVar->FrameCount >= pVar->FRAME_THRESH_UP ) &&
            	( bStopAllReport == false ))
            {
                if (pVar->bEnableAutoAdjust == TRUE)
    			{
        			if( pVar->byCESRIOPPriority < RUNINFO_PRI_HIGHEST )
        			{
        				(pVar->byCESRIOPPriority)++;
        				pVar->RIOPChangedPriorityVar.byPriority	= pVar->byCESRIOPPriority;
        				pVar->RIOPChangedPriorityVar.byModuleId	= R_GetLogicAddress().ModuleId;
        				V_Output(E_R_O_RIOPChangedPriority, (BYTE *)&(pVar->RIOPChangedPriorityVar), sizeof(T_RIOPChangedPriority), COMM_RELIABLE, pVar->VPID_R_RSP_Config);
        				//Output(E_R_O_RIOPChangedPriority, (BYTE *)&(pVar->RIOPChangedPriorityVar), 
        				//   sizeof(T_RIOPChangedPriority), WITH_ACK, pVar->PID_R_RSP_Config);
        			}
        			else
        			{
        				bStopAllReport = true;
        			}
    			}
            }
            else if( (pVar->FrameCount <= pVar->FRAME_THRESH_DOWN ) &&
            		 ( bStopAllReport == false ) )
            {
                if (pVar->bEnableAutoAdjust == TRUE)
    			{
        			if( pVar->byCESRIOPPriority >= RUNINFO_PRI_LOW )
        			{
        				(pVar->byCESRIOPPriority)--;
        				pVar->RIOPChangedPriorityVar.byPriority	= pVar->byCESRIOPPriority;
        				pVar->RIOPChangedPriorityVar.byModuleId	= R_GetLogicAddress().ModuleId;
        				V_Output(E_R_O_RIOPChangedPriority, (BYTE *)&(pVar->RIOPChangedPriorityVar), sizeof(T_RIOPChangedPriority), COMM_RELIABLE, pVar->VPID_R_RSP_Config);
        				//Output(E_R_O_RIOPChangedPriority,(BYTE *)&(pVar->RIOPChangedPriorityVar), 
        				//   sizeof(T_RIOPChangedPriority), WITH_ACK, pVar->PID_R_RSP_Config);
        			}
    			}            	
            }
        	
            pVar->FrameCount = 0;
            V_SetRelTimer(CES_TIMERFLOWBLOCK_2SEC, TimerFlowBlock);
            V_NextState(S_Idle);
        case E_R_O_RIOPChangedPriority:

⌨️ 快捷键说明

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