📄 p_ce_cesriop.cxx
字号:
#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 + -