Implement repeats with a periodic second timer to allow for greater range than what is possible with Contiki ctimers. Use RTIMER_NOW() instead of rtimer_arch_now().
This commit is contained in:
parent
f4e6758b22
commit
f50b8db53b
1 changed files with 16 additions and 6 deletions
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: shell-time.c,v 1.7 2009/02/11 11:08:55 adamdunkels Exp $
|
* $Id: shell-time.c,v 1.8 2009/12/09 18:12:23 adamdunkels Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,6 +50,12 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define MAX_COMMANDLENGTH 64
|
#define MAX_COMMANDLENGTH 64
|
||||||
|
#define PERIOD_INTERVAL 60
|
||||||
|
|
||||||
|
#ifndef MIN
|
||||||
|
#define MIN(a, b) ((a) < (b)? (a) : (b))
|
||||||
|
#endif /* MIN */
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
PROCESS(shell_time_process, "time");
|
PROCESS(shell_time_process, "time");
|
||||||
|
@ -97,7 +103,7 @@ PROCESS_THREAD(shell_time_process, ev, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.clock = (uint16_t)clock_time();
|
msg.clock = (uint16_t)clock_time();
|
||||||
msg.rtimer = (uint16_t)rtimer_arch_now();
|
msg.rtimer = (uint16_t)RTIMER_NOW();
|
||||||
#if TIMESYNCH_CONF_ENABLED
|
#if TIMESYNCH_CONF_ENABLED
|
||||||
msg.timesynch = timesynch_time();
|
msg.timesynch = timesynch_time();
|
||||||
msg.timesynch_authority = timesynch_authority_level();
|
msg.timesynch_authority = timesynch_authority_level();
|
||||||
|
@ -195,7 +201,7 @@ PROCESS_THREAD(shell_repeat_server_process, ev, data)
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
PROCESS_THREAD(shell_repeat_process, ev, data)
|
PROCESS_THREAD(shell_repeat_process, ev, data)
|
||||||
{
|
{
|
||||||
static int reps, period;
|
static int reps, period, period_left;
|
||||||
static char command[MAX_COMMANDLENGTH];
|
static char command[MAX_COMMANDLENGTH];
|
||||||
static struct etimer etimer;
|
static struct etimer etimer;
|
||||||
static int i;
|
static int i;
|
||||||
|
@ -250,7 +256,6 @@ PROCESS_THREAD(shell_repeat_process, ev, data)
|
||||||
/* printf("repeats %d period %d command '%s'\n",
|
/* printf("repeats %d period %d command '%s'\n",
|
||||||
reps, period, command);*/
|
reps, period, command);*/
|
||||||
|
|
||||||
etimer_set(&etimer, CLOCK_SECOND * period);
|
|
||||||
for(i = 0; reps == 0 || i < reps; ++i) {
|
for(i = 0; reps == 0 || i < reps; ++i) {
|
||||||
|
|
||||||
process_start(&shell_repeat_server_process, command);
|
process_start(&shell_repeat_server_process, command);
|
||||||
|
@ -261,8 +266,13 @@ PROCESS_THREAD(shell_repeat_process, ev, data)
|
||||||
data == &shell_repeat_server_process);
|
data == &shell_repeat_server_process);
|
||||||
|
|
||||||
PROCESS_PAUSE();
|
PROCESS_PAUSE();
|
||||||
|
|
||||||
|
for(period_left = period;
|
||||||
|
period_left > 0;
|
||||||
|
period_left -= MIN(PERIOD_INTERVAL, period_left)) {
|
||||||
|
etimer_set(&etimer, CLOCK_SECOND * MIN(PERIOD_INTERVAL, period_left));
|
||||||
PROCESS_WAIT_UNTIL(etimer_expired(&etimer));
|
PROCESS_WAIT_UNTIL(etimer_expired(&etimer));
|
||||||
etimer_reset(&etimer);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue