Esempio n. 1
0
/*
 * set alarm
 */
EXPORT ER kpSetAlarm( AlarmState *alm, MSEC offsetTime )
{
	SYSTIM		time;
	ER		ercd;

        /* stop alarm (necessary) */
	ercd = tk_stp_alm(alm->almno);
	if ( ercd != E_OK ) {
		DEBUG_PRINT(("kpSetAlarm, tk_stp_alm err = %d\n", ercd));
		return ercd;
	}

        /* current time */
	ercd = tk_get_tim(&time);
	if ( ercd != E_OK ) {
		DEBUG_PRINT(("kpSetAlarm, tk_get_tim err = %d\n", ercd));
		return ercd;
	}
	alm->setTime = time.lo;

        /* start alarm handler */
	ercd = tk_sta_alm(alm->almno, offsetTime);
	if ( ercd != E_OK ) {
		DEBUG_PRINT(("kpSetAlarm, tk_sta_alm err = %d\n", ercd));
		return ercd;
	}

	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;
}