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