示例#1
0
文件: LinSM.c 项目: uincore/OpenSAR
void LinSM_TimerTick()
{
	uint8 channel;
	for(channel=0;channel<LINIF_CONTROLLER_CNT;channel++){
		// Check timers
		if(ScheduleRequestTimer[channel] > 0){
			ScheduleRequestTimer[channel]--;
			if(ScheduleRequestTimer[channel]==0){
				Det_ReportError(MODULE_ID_LINSM,0,LINSM_REQUEST_COM_MODE_SERVICE_ID,LINSM_E_CONFIRMATION_TIMEOUT);
				LinSMChannelStatus[channel] = LINSM_NO_COM;
			}
		}
		if(GoToSleepTimer[channel] > 0){
			GoToSleepTimer[channel]--;
			if(GoToSleepTimer[channel]==0){
				Det_ReportError(MODULE_ID_LINSM,0,LINSM_REQUEST_COM_MODE_SERVICE_ID,LINSM_E_CONFIRMATION_TIMEOUT);
				LinSMChannelStatus[channel] = LINSM_NO_COM;
			}
		}
		if(WakeUpTimer[channel] > 0){
			WakeUpTimer[channel]--;
			if(WakeUpTimer[channel]==0){
				Det_ReportError(MODULE_ID_LINSM,0,LINSM_REQUEST_COM_MODE_SERVICE_ID,LINSM_E_CONFIRMATION_TIMEOUT);
				LinSMChannelStatus[channel] = LINSM_NO_COM;
			}
		}
	}
}
/**
 * Function that finds the Hoh( HardwareObjectHandle ) from a Hth
 * A HTH may connect to one or several HOH's. Just find the first one.
 *
 * @param hth The transmit handle
 * @returns Ptr to the Hoh
 */
LOCAL const Can_HardwareObjectType * Can_FindHoh( Can_Arc_HTHType hth , uint32* controller)
{
    const Can_HardwareObjectType *hohObj;
    const Can_ObjectHOHMapType *map;
    const Can_ControllerConfigType *canHwConfig;

    map = &Can_Global.CanHTHMap[hth];
#if(CAN_DEV_ERROR_DETECT == STD_ON)
    // Verify that this is the correct map
    if (map->CanHOHRef->CanObjectId != hth)
    {
        Det_ReportError(MODULE_ID_CAN, 0, CAN_WRITE_SERVICE_ID, CAN_E_PARAM_HANDLE);
    }
#endif
    canHwConfig= CAN_GET_CONTROLLER_CONFIG(Can_Global.channelMap[map->CanControllerRef]);

    hohObj = map->CanHOHRef;

    // Verify that this is the correct Hoh type
    if ( hohObj->CanObjectType == CAN_OBJECT_TYPE_TRANSMIT)
    {
        *controller = map->CanControllerRef;
        return hohObj;
    }
#if(CAN_DEV_ERROR_DETECT == STD_ON)
    Det_ReportError(MODULE_ID_CAN, 0, CAN_WRITE_SERVICE_ID, CAN_E_PARAM_HANDLE);
#endif
    return NULL;
}
示例#3
0
文件: Can.c 项目: paduc77/gainos
EXPORT Can_ReturnType Can_Write(Can_HwHandleType Hth,const Can_PduType* PduInfo)
{
#if(CAN_DEV_ERROR_DETECT == STD_ON)
	if(CAN_UNINIT == Can_Global.driverState)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_WRITE_SERVICE_ID,CAN_E_UNINIT);
		return CAN_NOT_OK;
	}
	if(NULL == PduInfo)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_WRITE_SERVICE_ID,CAN_E_PARAM_POINTER);
		return CAN_NOT_OK;
	}	  
  	if(PduInfo->length > 8)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_WRITE_SERVICE_ID,CAN_E_PARAM_DLC);
		return CAN_NOT_OK;
	}
    if(Hth >= NUM_OF_HTHS)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_WRITE_SERVICE_ID,CAN_E_PARAM_HANDLE);
		return CAN_NOT_OK;
	}
#endif
    return Can_Hw_Write(Hth,PduInfo);
}
示例#4
0
文件: Can.c 项目: paduc77/gainos
EXPORT void Can_InitController(uint8 Controller,const Can_ControllerConfigType* Config)
{
	Can_UnitType *canUnit;
	StatusType ercd;
	canUnit = CAN_GET_PRIVATE_DATA(Controller);
#if(CAN_DEV_ERROR_DETECT == STD_ON)
	if(CAN_UNINIT == Can_Global.driverState)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_INITCONTROLLER_SERVICE_ID,CAN_E_UNINIT);
		return;
	}
	if(NULL == Config)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_INITCONTROLLER_SERVICE_ID,CAN_E_PARAM_POINTER);
		return;
	}
	if(Controller >= CAN_CONTROLLER_CNT)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_INITCONTROLLER_SERVICE_ID,CAN_E_PARAM_CONTROLLER);
		return;
	}
	if(canUnit->state!=CANIF_CS_STOPPED)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_INITCONTROLLER_SERVICE_ID,CAN_E_TRANSITION);
		return;
	}
#endif
	ercd = Can_Hw_InitController(Controller,Config);
	if(ercd != E_OK)
	{
		return;
	}
	canUnit->state = CANIF_CS_STOPPED;
	Can_EnableControllerInterrupts(Controller);
}
示例#5
0
文件: Can.c 项目: paduc77/gainos
/* ####################### FUNCTIONs ########################### */
EXPORT void Can_Init(const Can_ConfigType* Config)
{
	  Can_UnitType *canUnit;
	  const Can_ControllerConfigType *canHwConfig;
	  const Can_HardwareObjectType* hoh;
	  uint8 ctlrId;
	  int configId;
#if(CAN_DEV_ERROR_DETECT == STD_ON)
	if(CAN_UNINIT != Can_Global.driverState)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_INIT_SERVICE_ID,CAN_E_TRANSITION);
		return;
	}
	if(NULL == Config)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_INIT_SERVICE_ID,CAN_E_PARAM_POINTER);
		return;
	}
#endif
	/* save config */
	Can_Global.config = Config;
	Can_Global.driverState = CAN_READY;

	Can_Hw_Init(Config);

	for (configId=0; configId < CAN_CTRL_CONFIG_CNT; configId++)
	{
		canHwConfig = CAN_GET_CONTROLLER_CONFIG(configId);
		ctlrId = canHwConfig->CanControllerId;

		// Assign the configuration channel used later..
		Can_Global.channelMap[ctlrId] = configId;
		Can_Global.configured |= (1<<ctlrId);

		canUnit = CAN_GET_PRIVATE_DATA(ctlrId);
		canUnit->state = CANIF_CS_STOPPED;

		canUnit->lock_cnt = 0;

		// Clear stats
		memset(&canUnit->stats, 0, sizeof(Can_StatisticsType));
		//This can be done by CanIf
	    //Can_InitController(ctlrId, canHwConfig);

	    // Loop through all Hohs and map them into the HTHMap
	    hoh = canHwConfig->Can_Hoh;
	    hoh--;
		do
		{
		    hoh++;
			if (hoh->CanObjectType == CAN_OBJECT_TYPE_TRANSMIT)
			{
				Can_Global.CanHTHMap[hoh->CanObjectId].CanControllerRef = canHwConfig->CanControllerId;
				Can_Global.CanHTHMap[hoh->CanObjectId].CanHOHRef = hoh;
			}
		} while (!hoh->Can_EOL);
	}
}
示例#6
0
RamTst_TestResultType RamTst_GetTestResultPerBlock( RamTst_NumberOfBlocksType BlockID )
{
    /* @req SWS_RamTst_00089 */
    VALIDATE_W_RV( ( RamTst_Internal.InitStatus != RAMTST_UNINIT ), RAMTST_GETRESULTPERBLOCK_SERVICE_ID, RAMTST_E_UNINIT, RAMTST_RESULT_NOT_TESTED);

    /* Find the block */
    const RamTst_BlockParamsType *blockParamPtr = NULL;
    const RamTst_AlgParamsType *algParams = NULL;
    for(RamTst_AlgParamsIdType i = 0; (i < RamTst_ConfigParams.RamTstNumberOfAlgParamSets) && (NULL == blockParamPtr); i++) {
        algParams = &RamTst_ConfigParams.RamTstAlgParams[i];
        /* Run for all blocks */
        for(RamTst_NumberOfBlocksType block = 0; (block < algParams->RamTstNumberOfBlocks) && (NULL == blockParamPtr); block++) {
            if(algParams->RamTstBlockParams[block].RamTstBlockId == BlockID) {
                blockParamPtr = &algParams->RamTstBlockParams[block];
            }
        }
    }

    if(NULL != blockParamPtr) {
        /* @req SWS_RamTst_00038 */
        return RamTst_Internal.RamTst_BlockResultBuffer[blockParamPtr->RamTstBlockIndex];
    } else {
        /* Invalid block id */
#if ( RAMTST_DEV_ERROR_DETECT == STD_ON )
        /* @req SWS_RamTst_00039 */
        (void)Det_ReportError(MODULE_ID_RAMTST, 0, RAMTST_GETRESULTPERBLOCK_SERVICE_ID, RAMTST_E_OUT_OF_RANGE);
#endif
        return RAMTST_RESULT_UNDEFINED;
    }
}
示例#7
0
文件: Can.c 项目: paduc77/gainos
EXPORT void Can_DisableControllerInterrupts(uint8 Controller)
{
#if(CAN_DEV_ERROR_DETECT == STD_ON)
	if(CAN_UNINIT == Can_Global.driverState)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_DISABLECONTROLLERINTERRUPTS_SERVICE_ID,CAN_E_UNINIT);
		return;
	}
	if(Controller >= CAN_CONTROLLER_CNT)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_DISABLECONTROLLERINTERRUPTS_SERVICE_ID,CAN_E_PARAM_CONTROLLER);
		return;
	}
#endif
	Can_Hw_DisableControllerInterrupts(Controller);
}
示例#8
0
文件: Can.c 项目: paduc77/gainos
EXPORT Can_ReturnType Can_SetControllerMode(uint8 Controller,Can_StateTransitionType Transition)
{
#if(CAN_DEV_ERROR_DETECT == STD_ON)
	if(CAN_UNINIT == Can_Global.driverState)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_SETCONTROLLERMODE_SERVICE_ID,CAN_E_UNINIT);
		return CAN_NOT_OK;
	}
	if(Controller >= CAN_CONTROLLER_CNT)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_SETCONTROLLERMODE_SERVICE_ID,CAN_E_PARAM_CONTROLLER);
		return CAN_NOT_OK;
	}
#endif
	return Can_Hw_SetControllerMode(Controller,Transition);
}
示例#9
0
文件: Can.c 项目: paduc77/gainos
EXPORT void Can_MainFunction_Mode(void)
{
#if(CAN_DEV_ERROR_DETECT == STD_ON)
	if(CAN_UNINIT == Can_Global.driverState)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_MAINFUNCTION_MODE_SERVICE_ID,CAN_E_UNINIT);
		return;
	}
#endif
}
示例#10
0
文件: Can.c 项目: paduc77/gainos
EXPORT Can_ReturnType Can_CheckWakeup(uint8 Controller)
{
#if(CAN_DEV_ERROR_DETECT == STD_ON)
	if(CAN_UNINIT == Can_Global.driverState)
	{
		Det_ReportError(MODULE_ID_CAN,0,CAN_CBK_CHECKWAKEUP_SERVICE_ID,CAN_E_UNINIT);
		return CAN_NOT_OK;
	}
#endif
}
示例#11
0
static void Mcu_Arc_LossOfLock( void  ) {
#if ( MCU_DEV_ERROR_DETECT == STD_ON )
	/* Should report MCU_E_CLOCK_FAILURE with DEM here.... but
	 * we do the next best thing. Report with Det with API = 0
	 */
	Det_ReportError(MCU_MODULE_ID,0,0,MCU_E_PLL_NOT_LOCKED);
#endif

	Mcu_Global.stats.lossOfLockCnt++;
	// Clear interrupt
//	FMPLL.SYNSR.B.LOLF = 1;

}
示例#12
0
文件: EcuM.c 项目: t8534/acore_repo
/**
 *
 * @param sources
 */
void EcuM_SetWakeupEvent(EcuM_WakeupSourceType sources) {

	EcuM_WakeupSourceType wkSource;

	DEBUG_ECUM_CALLIN_W_ARG("EcuM_SetWakeupEvent","0x%lx",(uint32)sources);

	/* @req 3.1.5/EcuM2826 The function exists */
	/* @req 3.1.5/EcuM2171 */

	/* @req 4.0.3|.1.5/ECUM2565 Validate at once for pre-defined sources */
	wkSource = (ECUM_WKSOURCE_POWER | ECUM_WKSOURCE_RESET
					| ECUM_WKSOURCE_INTERNAL_RESET | ECUM_WKSOURCE_INTERNAL_WDG
					| ECUM_WKSOURCE_EXTERNAL_WDG);

	/* Sources that should be validated at once */
	wkSource &= sources;

	if (wkSource != 0) {
		/* Move to validated  */
		EcuM_ValidateWakeupEvent(wkSource);
	}

	/* Don't add pre-defined source to PENDING */
	sources ^= wkSource;

	/* @req 3.1.5/EcuM2867 */
#if  ( ECUM_DEV_ERROR_DETECT == STD_ON )
	/* Get user defined sources */
	wkSource = EcuM_World.config->EcuMSleepModeConfig[EcuM_World.sleep_mode].EcuMWakeupSourceMask;

	/* Add always validated sources */
	wkSource |= (ECUM_WKSOURCE_POWER|ECUM_WKSOURCE_RESET | ECUM_WKSOURCE_INTERNAL_RESET |
			ECUM_WKSOURCE_INTERNAL_WDG | ECUM_WKSOURCE_EXTERNAL_WDG);

	if( !((sources | wkSource) == wkSource))
	{
		Det_ReportError(MODULE_ID_ECUM, 0, ECUM_VALIDATE_WAKEUP_EVENT_ID, ECUM_E_UNKNOWN_WAKEUP_SOURCE );
		return;
	}
#endif

	/* @req 3.1.5/EcuM1117 */
	EcuM_World.wakeupEvents |= sources;

	/* @req 3.1.5/EcuM2707 @req 3.1.5/EcuM2709*/
	EcuM_World.validationTimer = ECUM_VALIDATION_TIMEOUT
					/ ECUM_MAIN_FUNCTION_PERIOD;

}