kopia lustrzana https://github.com/Hamlib/Hamlib
Fix Yaesu DT command and add 2 or 4 digit timezone option
https://github.com/Hamlib/Hamlib/issues/1132Hamlib-4.5
rodzic
b63460f05f
commit
9c02b2ebc2
|
@ -1158,13 +1158,16 @@ Sets rig clock -- note that some rigs do not handle seconds or milliseconds.
|
||||||
If you try to set sec/msec and rig does not support it you will get a debug warning message.
|
If you try to set sec/msec and rig does not support it you will get a debug warning message.
|
||||||
Format is ISO8601,
|
Format is ISO8601,
|
||||||
.EX
|
.EX
|
||||||
Formats accepted
|
Formats accepted allow for 2-digit or 4-digit time zone
|
||||||
YYYY-MM-DDTHH:MM:SS.SSS+ZZ (where +ZZ is either -/+ UTC offset)
|
YYYY-MM-DDTHH:MM:SS.SSS+ZZ (where +ZZ is either -/+ UTC offset HH)
|
||||||
|
YYYY-MM-DDTHH:MM:SS.SSS+ZZZZ (where +ZZZZ is either -/+ UTC offset HHMM)
|
||||||
YYYY-MM-DDTHH:MM:SS+ZZ
|
YYYY-MM-DDTHH:MM:SS+ZZ
|
||||||
|
YYYY-MM-DDTHH:MM:SS+ZZZZ
|
||||||
YYYY-MM-DDTHH:MM+ZZ
|
YYYY-MM-DDTHH:MM+ZZ
|
||||||
|
YYYY-MM-DDTHH:MM+ZZZZ
|
||||||
YYYY-MM-DD (sets date only)
|
YYYY-MM-DD (sets date only)
|
||||||
Note: Icom rigs expect you to set local time and the hours off to UTC.
|
Note: Icom rigs expect you to set local time and the hours off to UTC.
|
||||||
So...4PM EST example would be 2021-12-01T16:00:00+05
|
So...4PM EST example would be 2021-12-01T16:00:00+0500
|
||||||
But...if you want to display GMT you must set the clock for GMT with zero UTC offset.
|
But...if you want to display GMT you must set the clock for GMT with zero UTC offset.
|
||||||
Hopefully Icom will allow displaying either clock in the future
|
Hopefully Icom will allow displaying either clock in the future
|
||||||
|
|
||||||
|
|
|
@ -263,9 +263,9 @@ static const yaesu_newcat_commands_t valid_commands[] =
|
||||||
{"CT", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
{"CT", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
||||||
{"DA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
{"DA", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
||||||
{"DN", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
{"DN", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
||||||
{"DT", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE },
|
|
||||||
{"DP", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE },
|
{"DP", FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE },
|
||||||
{"DS", TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE },
|
{"DS", TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE },
|
||||||
|
{"DT", FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE },
|
||||||
{"ED", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
{"ED", TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE },
|
||||||
{"EK", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE },
|
{"EK", FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE },
|
||||||
{"EM", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE },
|
{"EM", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE },
|
||||||
|
@ -11557,6 +11557,8 @@ int newcat_set_clock(RIG *rig, int year, int month, int day, int hour, int min,
|
||||||
RETURNFUNC2(err);
|
RETURNFUNC2(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hour < 0) RETURNFUNC2(RIG_OK);
|
||||||
|
|
||||||
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "DT1%02d%02d%02d%c", hour, min,
|
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "DT1%02d%02d%02d%c", hour, min,
|
||||||
sec, cat_term);
|
sec, cat_term);
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
typedef char ncboolean;
|
typedef char ncboolean;
|
||||||
|
|
||||||
/* shared function version */
|
/* shared function version */
|
||||||
#define NEWCAT_VER "20221021"
|
#define NEWCAT_VER "20221025"
|
||||||
|
|
||||||
/* Hopefully large enough for future use, 128 chars plus '\0' */
|
/* Hopefully large enough for future use, 128 chars plus '\0' */
|
||||||
#define NEWCAT_DATA_LEN 129
|
#define NEWCAT_DATA_LEN 129
|
||||||
|
|
|
@ -23,6 +23,8 @@ int roofing_filter_main = 1;
|
||||||
int roofing_filter_sub = 6;
|
int roofing_filter_sub = 6;
|
||||||
int width_main = 0;
|
int width_main = 0;
|
||||||
int width_sub = 0;
|
int width_sub = 0;
|
||||||
|
int ex039 = 0;
|
||||||
|
int lk = 0;
|
||||||
|
|
||||||
// ID 0310 == 310, Must drop leading zero
|
// ID 0310 == 310, Must drop leading zero
|
||||||
typedef enum nc_rigid_e
|
typedef enum nc_rigid_e
|
||||||
|
@ -401,6 +403,40 @@ int main(int argc, char *argv[])
|
||||||
SNPRINTF(buf, sizeof(buf), "SH%c%02d;", buf[2],
|
SNPRINTF(buf, sizeof(buf), "SH%c%02d;", buf[2],
|
||||||
buf[2] == 0 ? width_main : width_sub);
|
buf[2] == 0 ? width_main : width_sub);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(buf, "EX039;") == 0)
|
||||||
|
{
|
||||||
|
SNPRINTF(buf, sizeof(buf), "EX039%d;", ex039);
|
||||||
|
n = write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
else if (strncmp(buf, "EX039", 3) == 0)
|
||||||
|
{
|
||||||
|
sscanf(buf, "EX039%d", &ex039);
|
||||||
|
}
|
||||||
|
else if (strcmp(buf, "LK;") == 0)
|
||||||
|
{
|
||||||
|
SNPRINTF(buf, sizeof(buf), "LK%d;", lk);
|
||||||
|
n = write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
else if (strncmp(buf, "LK", 3) == 0)
|
||||||
|
{
|
||||||
|
sscanf(buf, "LK%d", &lk);
|
||||||
|
}
|
||||||
|
else if (strncmp(buf, "DT0;", 4) == 0)
|
||||||
|
{
|
||||||
|
SNPRINTF(buf, sizeof(buf), "DT020221022;");
|
||||||
|
n = write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
else if (strncmp(buf, "DT1;", 4) == 0)
|
||||||
|
{
|
||||||
|
SNPRINTF(buf, sizeof(buf), "DT1222100;");
|
||||||
|
n = write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
else if (strncmp(buf, "DT2;", 4) == 0)
|
||||||
|
{
|
||||||
|
SNPRINTF(buf, sizeof(buf), "DT2+0500;");
|
||||||
|
n = write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
else if (strlen(buf) > 0)
|
else if (strlen(buf) > 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5172,9 +5172,9 @@ declare_proto_rig(get_cache)
|
||||||
/* '0xf8' */
|
/* '0xf8' */
|
||||||
declare_proto_rig(set_clock)
|
declare_proto_rig(set_clock)
|
||||||
{
|
{
|
||||||
int year, mon, day, hour = -1, min = -1, sec = -1;
|
int year, mon, day, hour = -1, min = -1, sec = 0;
|
||||||
double msec;
|
double msec=-1;
|
||||||
int utc_offset = 0;
|
int utc_offset = 0;
|
||||||
int n;
|
int n;
|
||||||
char timebuf[64];
|
char timebuf[64];
|
||||||
|
|
||||||
|
@ -5196,22 +5196,35 @@ declare_proto_rig(set_clock)
|
||||||
&hour,
|
&hour,
|
||||||
&min, &sec, &msec, &utc_offset);
|
&min, &sec, &msec, &utc_offset);
|
||||||
}
|
}
|
||||||
else
|
else if (arg1[16] == '+' || arg1[16] == '-')
|
||||||
{
|
{ // YYYY-MM-DDTHH:MM+ZZ
|
||||||
|
n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d%d", &year, &mon, &day, &hour,
|
||||||
|
&min, &utc_offset);
|
||||||
|
}
|
||||||
|
else if (arg1[19] == '+' || arg1[19] == '-')
|
||||||
|
{ // YYYY-MM-DDTHH:MM:SS+ZZ
|
||||||
|
n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d:%02d%d", &year, &mon, &day, &hour,
|
||||||
|
&min, &sec, &utc_offset);
|
||||||
|
}
|
||||||
|
else if (arg1[23] == '+' || arg1[23] == '-')
|
||||||
|
{ // YYYY-MM-DDTHH:MM:SS.SSS+ZZ
|
||||||
n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d:%02d%lf%d", &year, &mon, &day, &hour,
|
n = sscanf(arg1, "%04d-%02d-%02dT%02d:%02d:%02d%lf%d", &year, &mon, &day, &hour,
|
||||||
&min, &sec, &msec, &utc_offset);
|
&min, &sec, &msec, &utc_offset);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_ERR, "%s: '%s' not valid time format\n", __func__, arg1);
|
||||||
|
RETURNFUNC2(-RIG_EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_VERBOSE,
|
rig_debug(RIG_DEBUG_VERBOSE,
|
||||||
"%s: n=%d, %04d-%02d-%02dT%02d:%02d:%02d.%0.3f%s%02d\n",
|
"%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 ? "+" : "-",
|
__func__, n, year, mon, day, hour, min, sec, msec, utc_offset >= 0 ? "+" : "-",
|
||||||
(unsigned)abs(utc_offset));
|
(unsigned)abs(utc_offset));
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s: utc_offset=%d\n", __func__, utc_offset);
|
|
||||||
|
|
||||||
if (utc_offset < 24) { utc_offset *= 100; } // allow for minutes offset too
|
if (utc_offset < 24) { utc_offset *= 100; } // allow for minutes offset too
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s: utc_offset=%d\n", __func__, utc_offset);
|
rig_debug(RIG_DEBUG_VERBOSE, "%s: utc_offset=%d\n", __func__, utc_offset);
|
||||||
|
|
||||||
RETURNFUNC(rig_set_clock(rig, year, mon, day, hour, min, sec, msec,
|
RETURNFUNC(rig_set_clock(rig, year, mon, day, hour, min, sec, msec,
|
||||||
utc_offset));
|
utc_offset));
|
||||||
|
|
Ładowanie…
Reference in New Issue