/* ================================================== */
static void
-start_initial_timeout(NCR_Instance inst)
+restart_timeout(NCR_Instance inst, double delay)
{
/* Check if we can transmit */
if (inst->tx_suspended) {
SCH_RemoveTimeout(inst->timeout_id);
/* Start new timer for transmission */
- inst->timeout_id = SCH_AddTimeoutInClass(INITIAL_DELAY, SAMPLING_SEPARATION,
+ inst->timeout_id = SCH_AddTimeoutInClass(delay, SAMPLING_SEPARATION,
SAMPLING_RANDOMNESS,
SCH_NtpSamplingClass,
transmit_timeout, (void *)inst);
+ inst->timer_running = 1;
+}
+
+/* ================================================== */
+static void
+start_initial_timeout(NCR_Instance inst)
+{
if (!inst->timer_running) {
/* This will be the first transmission after mode change */
- inst->timer_running = 1;
-
/* Mark source active */
SRC_SetActive(inst->source);
}
+
+ restart_timeout(inst, INITIAL_DELAY);
}
/* ================================================== */
transmit_timeout(void *arg)
{
NCR_Instance inst = (NCR_Instance) arg;
- double timeout_delay;
inst->timer_running = 0;
inst->presend_done = 1;
/* Requeue timeout */
- inst->timer_running = 1;
- inst->timeout_id = SCH_AddTimeoutInClass(WARM_UP_DELAY, SAMPLING_SEPARATION,
- SAMPLING_RANDOMNESS,
- SCH_NtpSamplingClass,
- transmit_timeout, (void *)inst);
+ restart_timeout(inst, WARM_UP_DELAY);
return;
}
}
/* Restart timer for this message */
- timeout_delay = get_transmit_delay(inst, 1, 0.0);
- inst->timer_running = 1;
- inst->timeout_id = SCH_AddTimeoutInClass(timeout_delay, SAMPLING_SEPARATION,
- SAMPLING_RANDOMNESS,
- SCH_NtpSamplingClass,
- transmit_timeout, (void *)inst);
+ restart_timeout(inst, get_transmit_delay(inst, 1, 0.0));
}
/* Get rid of old timeout and start a new one */
assert(inst->timer_running);
- SCH_RemoveTimeout(inst->timeout_id);
- inst->timeout_id = SCH_AddTimeoutInClass(delay_time, SAMPLING_SEPARATION,
- SAMPLING_RANDOMNESS,
- SCH_NtpSamplingClass,
- transmit_timeout, (void *)inst);
+ restart_timeout(inst, delay_time);
}
/* Do measurement logging */