Compare commits

..

No commits in common. "5073fc7a0f9b831441dbc322d7565dc6f34dea46" and "b9eaad375a6ed306472bde8115091c3a7cd61d10" have entirely different histories.

2 changed files with 33 additions and 37 deletions

View file

@ -1,7 +1,7 @@
irena pres/inj
irena uart/base=85
irena var uart_size = -1
irena var rtc_drift[3] = 0x20f04
clock_sync 3600
set_clock fudge config
set_clock sleep
set_clock fudge
set_clock

66
irena.c
View file

@ -2407,40 +2407,36 @@ int send_file(const char *fn, const char *cfmt, unsigned int drop)
int set_clock(int do_sleep)
{
struct timespec ts;
if (clock_gettime(CLOCK_REALTIME, &ts)) {
merror("clock_gettime(CLOCK_REALTIME)");
return 0;
}
if (do_sleep & 1) {
time_t t = 0;
if (do_sleep) {
struct timespec ts;
poll_uart(1);
while (ts.tv_nsec < 900000000) {
ts.tv_nsec += 50000000;
if (!clock_gettime(CLOCK_REALTIME, &ts)) {
while (ts.tv_nsec < 900000000) {
ts.tv_nsec += 50000000;
clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &ts, 0);
if (verbose(3))
fprintf(mout, "slept 50ms ns=%lu\n", ts.tv_nsec);
poll_uart(1);
clock_gettime(CLOCK_REALTIME, &ts);
}
ts.tv_sec++;
t = ts.tv_sec;
ts.tv_nsec=0;
clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &ts, 0);
if (verbose(3))
fprintf(mout, "slept 50ms ns=%lu\n", ts.tv_nsec);
poll_uart(1);
clock_gettime(CLOCK_REALTIME, &ts);
}
ts.tv_sec++;
ts.tv_nsec=0;
clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &ts, 0);
}
else
t = time(0);
struct tm gm;
gmtime_r(&t, &gm);
char utc[64];
if (do_sleep == 2) {
unsigned int q = (ts.tv_nsec/(1000000000>>15));
if (q > 0x7fff) q = 0x7fff;
snprintf(utc, sizeof(utc), "cl/fu 0x%08lx 0x%04x", ts.tv_sec, q);
}
else {
char *cmd = "clock %Y-%m-%d %H:%M:%S";
if (do_sleep == 3)
cmd = "cl/dr %Y-%m-%d %H:%M:%S";
struct tm gm;
gmtime_r(&ts.tv_sec, &gm);
strftime(utc, sizeof(utc), cmd, &gm);
}
char *cmd = "clock %Y-%m-%d %H:%M:%S";
if (do_sleep == 2)
cmd = "cl/dr %Y-%m-%d %H:%M:%S";
if (do_sleep == 3)
cmd = "cl/fu %Y-%m-%d %H:%M:%S";
strftime(utc, sizeof(utc), cmd, &gm);
return send_irena_command(utc);
}
@ -2766,7 +2762,7 @@ struct numbers {
{.name="fct_packets", .doc="packets", .i=&fct_packets, .flags=NU_INT},
{.name="clock_sync", .doc="seconds", .u=&clock_cadence, .flags=NU_INT},
{.name="clock_mod", .doc="seconds", .u=&clock_modulus, .flags=NU_INT},
{.name="clock_sleep", .doc="(1:sleep,2:fudge,3:drift)", .i=&clock_sleep, .flags=NU_INT},
{.name="clock_sleep", .doc="(1:sleep,2:drift,3:fudge)", .i=&clock_sleep, .flags=NU_INT},
{.name="reset_cadence", .doc="seconds", .i=&status_reset_cadence, .flags=NU_INT},
{.name="last_reset", .doc="time", .t=&last_status_reset, .flags=NU_TIME},
{.name="init_time", .doc="time", .t=&init_time, .flags=NU_TIME},
@ -2895,7 +2891,7 @@ int process_cmd(char *l)
"\tirena «commandline»\n"
"\tvar «irena variable command»\n"
"\tfct «lines»\n"
"\tset_clock [sleep|fudge|drift] [config]\n"
"\tset_clock [sleep|drift|fudge] [config]\n"
"\tdatafile [«fn» [«rotate» [«rotate-modulus» [«flags»]]]] [close|rotate]\n"
"\tcounterfile [«fn» [«rotate» [«rotate-modulus» [«flags»]]]] [close|rotate]\n"
"\tstatusfile [«fn» [ «rotate» [ «rotate-modulus» [«flags»]]]] [close|rotate]\n"
@ -3089,8 +3085,8 @@ int process_cmd(char *l)
int config = !strcmp(av[na-1], "config");
if ( !strcmp(av[1], "nosleep")) do_sleep = 0;
else if (!strcmp(av[1], "sleep")) do_sleep = 1;
else if (!strcmp(av[1], "fudge")) do_sleep = 2;
else if (!strcmp(av[1], "drift")) do_sleep = 3;
else if (!strcmp(av[1], "drift")) do_sleep = 2;
else if (!strcmp(av[1], "fudge")) do_sleep = 3;
else if (!config || na>2) do_sleep = -1;
if (na>3 || na>2 && !config)
do_sleep = -1;
@ -3100,8 +3096,8 @@ int process_cmd(char *l)
"- set the µC RTC to the current host time.\n"
"option `sleep`: Wait until the end of the current second.\n"
"option `drift`: Sleep, set clock and ask the µC to adjust the clock speed.\n"
"option `fudge`: Ask the µC to adjust the clock speed.\n"
"option `config`: Configure the sleep mode of the periodic clock setting,\n"
"option `fudge`: Sleep, and ask the µC to adjust the clock speed.\n"
"option `config`: configure the sleep mode of the periodic clock setting,\n"
" (does not set the µC clock).\n"
);
return -1;