/*! * Modify existing alarm (change its values) * \param alarm Alarm parameters * \return status (0 for success) */ int k_alarm_set ( void *id, alarm_t *alarm ) { kalarm_t *kalarm = id; ASSERT ( kalarm && kalarm->magic == ALARM_MAGIC ); kalarm->alarm.action = alarm->action; kalarm->alarm.param = alarm->param; kalarm->alarm.flags = alarm->flags; kalarm->alarm.period = alarm->period; /* is activation time changed? */ if ( time_cmp ( &kalarm->alarm.exp_time, &alarm->exp_time ) ) { /* remove from active alarms */ if ( kalarm->active ) list_remove ( &kalarms, FIRST, &kalarm->list ); kalarm->alarm.exp_time = alarm->exp_time; k_alarm_add ( kalarm ); } return SUCCESS; }
/*! * Create new alarm * \param alarm Alarm parameters * \return status (0 for success), but also in 'param->alarm.id' is pointer to * newly created alarm (handler) */ int k_alarm_new ( void **id, alarm_t *alarm ) { kalarm_t *kalarm; kalarm = kmalloc ( sizeof (kalarm_t) ); ASSERT ( kalarm ); kalarm->alarm = *alarm; /* copy alarm data */ /* param checking is skipped - assuming all is OK */ #ifdef DEBUG kalarm->magic = ALARM_MAGIC; #endif *id = kalarm; /* return value = handler */ k_alarm_add ( kalarm ); return SUCCESS; }
/*! * Create new alarm * \param alarm Alarm parameters * \returns status (0 for success), but also in 'param->alarm.id' is pointer to * newly created alarm (handler) */ int k_alarm_new ( void **id, alarm_t *alarm ) { kalarm_t *kalarm; kalarm = kmalloc ( sizeof (kalarm_t) ); ASSERT ( kalarm ); kalarm->alarm = *alarm; /* copy alarm data */ /* param checking is skipped - assuming all is OK */ k_threadq_init ( &kalarm->queue ); #ifdef DEBUG kalarm->magic = ALARM_MAGIC; #endif *id = kalarm; /* return value = handler */ kalarm->thread = k_get_active_thread (); k_alarm_add ( kalarm ); RETURN ( SUCCESS ); }