Implement ISO8601 time standard in more places.

Debug time now shows localtime + utc offset
Rigs that can set the clock now can set either local or utc time on the rig
Icom rigs can only display clock#1 right now so users may want either local or utc
So here are IC7300 examples
rigctl -m 3073 -r com3 -s 115200 set_clock local
rigctl -m 3073 -r com3 -s 115200 set_clock utc
pull/891/head
Mike Black W9MDB 2021-12-06 10:23:18 -06:00
rodzic b11f2e4bbf
commit 674a9868d9
5 zmienionych plików z 46 dodań i 12 usunięć

Wyświetl plik

@ -226,7 +226,7 @@ void HAMLIB_API rig_debug(enum rig_debug_level_e debug_level,
if (rig_debug_time_stamp)
{
char buf[256];
fprintf(rig_debug_stream, "%s: ", date_strget(buf, sizeof(buf)));
fprintf(rig_debug_stream, "%s: ", date_strget(buf, sizeof(buf), 1));
}
vfprintf(rig_debug_stream, fmt, ap);

Wyświetl plik

@ -2423,19 +2423,30 @@ static struct tm *gmtime_r(const time_t *t, struct tm *r)
#endif // _WIN32
//! @cond Doxygen_Suppress
char *date_strget(char *buf, int buflen)
char *date_strget(char *buf, int buflen, int localtime)
{
char tmp[16];
char tmpbuf[64];
struct tm *mytm;
time_t t;
struct timeval tv;
struct tm result;
t = time(NULL);
mytm = gmtime_r(&t, &result);
strftime(buf, buflen, "%Y-%m-%d:%H:%M:%S.", mytm);
if (localtime)
{
mytm = localtime_r(&t, &result);
}
else
{
mytm = gmtime_r(&t, &result);
}
strftime(buf, buflen, "%FT%T.", mytm);
gettimeofday(&tv, NULL);
sprintf(tmp, "%06ld", (long)tv.tv_usec);
strcat(buf, tmp);
sprintf(tmpbuf, "%06ld", (long)tv.tv_usec);
strcat(buf, tmpbuf);
strftime(tmpbuf, sizeof(tmpbuf), "%z", mytm);
strcat(buf, tmpbuf);
return buf;
}

Wyświetl plik

@ -114,7 +114,7 @@ extern HAMLIB_EXPORT(int) parse_hoststr(char *hoststr, char host[256], char port
extern HAMLIB_EXPORT(uint32_t) CRC32_function(uint8_t *buf, uint32_t len);
extern char *date_strget(char *buf, int buflen);
extern char *date_strget(char *buf, int buflen, int localtime);
#ifdef PRId64
/** \brief printf(3) format to be used for long long (64bits) type */

Wyświetl plik

@ -2174,7 +2174,8 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
cache_show(rig, __func__, __LINE__);
if (*freq != 0 && (cache_ms_freq < rig->state.cache.timeout_ms || rig->state.cache.timeout_ms == HAMLIB_CACHE_ALWAYS))
if (*freq != 0 && (cache_ms_freq < rig->state.cache.timeout_ms
|| rig->state.cache.timeout_ms == HAMLIB_CACHE_ALWAYS))
{
rig_debug(RIG_DEBUG_TRACE, "%s: %s cache hit age=%dms, freq=%.0f\n", __func__,
rig_strvfo(vfo), cache_ms_freq, *freq);
@ -2497,6 +2498,7 @@ int HAMLIB_API rig_get_mode(RIG *rig,
ELAPSED2;
RETURNFUNC(RIG_OK);
}
if ((*mode != RIG_MODE_NONE && cache_ms_mode < rig->state.cache.timeout_ms)
&& cache_ms_width < rig->state.cache.timeout_ms)
{
@ -7199,7 +7201,7 @@ int HAMLIB_API rig_cookie(RIG *rig, enum cookie_e cookie_cmd, char *cookie,
__FILE__, __LINE__, cookie_save, time_curr - time_last_used);
}
date_strget(cookie, cookie_len);
date_strget(cookie, cookie_len, 0);
size_t len = strlen(cookie);
// add on our random number to ensure uniqueness
// The cookie should never be longer then HAMLIB_COOKIE_SIZE

Wyświetl plik

@ -5221,11 +5221,32 @@ declare_proto_rig(set_clock)
double msec;
int utc_offset = 0;
int n;
char timebuf[64];
ENTERFUNC;
n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d:%02d%lf%d", &year, &mon, &day, &hour,
&min, &sec, &msec, &utc_offset);
if (arg1 && strcasecmp(arg1, "local") == 0)
{
date_strget(timebuf, sizeof(timebuf), 1);
rig_debug(RIG_DEBUG_VERBOSE, "%s: local time set = %s\n", __func__, timebuf);
n = sscanf(timebuf, "%04d-%02d-%02dT%02d:%02d:%02d%lf%d", &year, &mon, &day,
&hour,
&min, &sec, &msec, &utc_offset);
}
else if (arg1 && strcasecmp(arg1, "utc") == 0)
{
date_strget(timebuf, sizeof(timebuf), 0);
rig_debug(RIG_DEBUG_VERBOSE, "%s: utc time set = %s\n", __func__, timebuf);
n = sscanf(timebuf, "%04d-%02d-%02dT%02d:%02d:%02d%lf%d", &year, &mon, &day,
&hour,
&min, &sec, &msec, &utc_offset);
}
else
{
n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d:%02d%lf%d", &year, &mon, &day, &hour,
&min, &sec, &msec, &utc_offset);
}
rig_debug(RIG_DEBUG_VERBOSE,
"%s: n=%d, %04d-%02d-%02dT%02d:%02d:%02d.%0.3f%s%02d\n",
__func__, n, year, mon, day, hour, min, sec, msec, utc_offset >= 0 ? "+" : "-",