Beispiel #1
0
/*
 * initialize alarm management information
 */
LOCAL ER initAlmStat( AlarmState *alm, TimeoutKind kind )
{
	ER	ercd;
	int	i;
	T_CALM	calm;

        /* obtain alarm handler number */
	calm.exinf  = alm;
	calm.almatr = TA_HLNG;
	calm.almhdr = alarmHandler;
	ercd = tk_cre_alm(&calm);
	if ( ercd < E_OK ) {
		DEBUG_PRINT(("initAlmStat, tk_cre_alm err = %d\n", ercd));
		return ercd;
	}
	alm->almno = (ID)ercd;

	for ( i = 0; i < NumOfAlmMsgBuf; ++i ) {
		alm->msg[i].stat.read = 1;
		alm->msg[i].stat.cmd = PIC_TIMEOUT;
		alm->msg[i].stat.kind = kind;
	}

	return E_OK;
}
/* |------------------+-----------------------------------------------------------------| */
StatusType SetRelAlarm ( AlarmType xAlarmID , TickType xIncrement ,TickType xCycle )
{
	StatusType ercd = E_OK;
	if(xAlarmID >= cfgOSEK_ALARM_NUM)
	{
		ercd = E_OS_ID;
		goto Error_Exit;
	}
	if(OsekAlarmIdTable[xAlarmID] != ALARM_NOT_IN_USE)
	{
		ercd = E_OS_STATE;
		goto Error_Exit;
	}
	if(xCycle > 0)
	{
		T_CCYC ccyc;
		ccyc.exinf=NULL;
		ccyc.cycatr=TA_HLNG|TA_STA;
		ccyc.cychdr=OsekAlarmHandlerTable[xAlarmID];
		ccyc.cycphs=xIncrement;
		ccyc.cyctim=xCycle;
		ercd=tk_cre_cyc(&ccyc);
		if(ercd>E_OK)
		{
			OsekAlarmIdTable[xAlarmID]=ercd;
			OsekAlarmTypeTable[xAlarmID]=ALARM_CYC;
		}
	}
	else
	{
		T_CALM calm;
		calm.exinf=NULL;
		calm.almatr=TA_HLNG;
		calm.almhdr=OsekAlarmHandlerTable[xAlarmID];
		ercd=tk_cre_alm(&calm);
		if(ercd>E_OK) {
			OsekAlarmIdTable[xAlarmID]=ercd;
			OsekAlarmTypeTable[xAlarmID]=ALARM_ALM;
			(void)tk_sta_alm(ercd,xIncrement);
		}
	}
Error_Exit:
	return ercd;
}