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