/**
* @brief implements function add of event_queue_t
*/
-static status_t add(private_event_queue_t *this, job_t *job, timeval_t time)
+static status_t add_absolute(private_event_queue_t *this, job_t *job, timeval_t time)
{
event_t *event = event_create(time,job);
linked_list_element_t * current_list_element;
return status;
}
+/**
+ * @brief implements function add of event_queue_t
+ */
+static status_t add_relative(event_queue_t *this, job_t *job, u_int32_t ms)
+{
+ timeval_t current_time;
+ timeval_t time;
+ int micros = ms * 1000;
+
+ gettimeofday(¤t_time, NULL);
+
+ time.tv_usec = ((current_time.tv_usec + micros) % 1000000);
+ time.tv_sec = current_time.tv_sec + ((current_time.tv_usec + micros)/ 1000000);
+
+ return this->add_absolute(this, job, time);
+}
+
/**
* @brief implements function destroy of event_queue_t
this->public.get_count = (status_t (*) (event_queue_t *event_queue, int *count)) get_count;
this->public.get = (status_t (*) (event_queue_t *event_queue, job_t **job)) get;
- this->public.add = (status_t (*) (event_queue_t *event_queue, job_t *job, timeval_t time)) add;
+ this->public.add_absolute = (status_t (*) (event_queue_t *event_queue, job_t *job, timeval_t time)) add_absolute;
+ this->public.add_relative = (status_t (*) (event_queue_t *event_queue, job_t *job, u_int32_t ms)) add_relative;
this->public.destroy = (status_t (*) (event_queue_t *event_queue)) event_queue_destroy;
this->list = linked_list;
status_t (*get) (event_queue_t *event_queue, job_t **job);
/**
- * @brief adds a event to the queue
+ * @brief adds a event to the queue, using a relative time
*
* This function is non blocking and adds a job_t at a specific time to the list.
* The specific job-object has to get destroyed by the thread which
* @param[in] time time, when the event has to get fired
* @returns SUCCESS if succeeded, FAILED otherwise
*/
- status_t (*add) (event_queue_t *event_queue, job_t *job, timeval_t time);
+ status_t (*add_relative) (event_queue_t *event_queue, job_t *job, u_int32_t ms);
+
+ /**
+ * @brief adds a event to the queue, using an absolute time
+ *
+ * This function is non blocking and adds a job_t at a specific time to the list.
+ * The specific job-object has to get destroyed by the thread which
+ * removes the job.
+ *
+ * @param event_queue calling object
+ * @param[in] job job to add to the queue (job is not copied)
+ * @param[in] time time, when the event has to get fired
+ * @returns SUCCESS if succeeded, FAILED otherwise
+ */
+ status_t (*add_absolute) (event_queue_t *event_queue, job_t *job, timeval_t time);
/**
* @brief destroys a event_queue object
time.tv_usec = 0;
time.tv_sec = current_time.tv_sec + i;
- tester->assert_true(tester,(testinfos->event_queue->add(testinfos->event_queue,job,time) == SUCCESS), "add call check");
+ tester->assert_true(tester,(testinfos->event_queue->add_absolute(testinfos->event_queue,job,time) == SUCCESS), "add call check");
}
}
}