diff --git a/src/debug.c b/src/debug.c index 0606ecc42..74e776d21 100644 --- a/src/debug.c +++ b/src/debug.c @@ -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); diff --git a/src/misc.c b/src/misc.c index ff06a04df..fde3bdfc2 100644 --- a/src/misc.c +++ b/src/misc.c @@ -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; } diff --git a/src/misc.h b/src/misc.h index 74b76e5f9..0ce4ecccb 100644 --- a/src/misc.h +++ b/src/misc.h @@ -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 */ diff --git a/src/rig.c b/src/rig.c index 4d1b8fa2a..f7efc4891 100644 --- a/src/rig.c +++ b/src/rig.c @@ -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 diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index ce0c23541..acc1b604e 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -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 ? "+" : "-",