Fix Yaesu DT command and add 2 or 4 digit timezone option

https://github.com/Hamlib/Hamlib/issues/1132
Hamlib-4.5
Mike Black W9MDB 2022-10-25 23:26:16 -05:00
rodzic b63460f05f
commit 9c02b2ebc2
5 zmienionych plików z 67 dodań i 13 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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);

Wyświetl plik

@ -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

Wyświetl plik

@ -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)
{ {

Wyświetl plik

@ -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));