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.
Format is ISO8601,
.EX
Formats accepted
YYYY-MM-DDTHH:MM:SS.SSS+ZZ (where +ZZ is either -/+ UTC offset)
Formats accepted allow for 2-digit or 4-digit time zone
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+ZZZZ
YYYY-MM-DDTHH:MM+ZZ
YYYY-MM-DDTHH:MM+ZZZZ
YYYY-MM-DD (sets date only)
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.
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 },
{"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 },
{"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 },
{"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 },
{"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 },
@ -11557,6 +11557,8 @@ int newcat_set_clock(RIG *rig, int year, int month, int day, int hour, int min,
RETURNFUNC2(err);
}
if (hour < 0) RETURNFUNC2(RIG_OK);
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "DT1%02d%02d%02d%c", hour, min,
sec, cat_term);

Wyświetl plik

@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
#define NEWCAT_VER "20221021"
#define NEWCAT_VER "20221025"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129

Wyświetl plik

@ -23,6 +23,8 @@ int roofing_filter_main = 1;
int roofing_filter_sub = 6;
int width_main = 0;
int width_sub = 0;
int ex039 = 0;
int lk = 0;
// ID 0310 == 310, Must drop leading zero
typedef enum nc_rigid_e
@ -401,6 +403,40 @@ int main(int argc, char *argv[])
SNPRINTF(buf, sizeof(buf), "SH%c%02d;", buf[2],
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)
{

Wyświetl plik

@ -5172,9 +5172,9 @@ declare_proto_rig(get_cache)
/* '0xf8' */
declare_proto_rig(set_clock)
{
int year, mon, day, hour = -1, min = -1, sec = -1;
double msec;
int utc_offset = 0;
int year, mon, day, hour = -1, min = -1, sec = 0;
double msec=-1;
int utc_offset = 0;
int n;
char timebuf[64];
@ -5196,22 +5196,35 @@ declare_proto_rig(set_clock)
&hour,
&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,
&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,
"%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 ? "+" : "-",
(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
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,
utc_offset));