From cab48cecfae7a21377379fedb12bc76aed0ebfb8 Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Thu, 2 Dec 2021 16:08:08 -0600 Subject: [PATCH] Add get/set clock for Yaesu FT1200/891/991/DX10/DX101/DX101MP https://github.com/Hamlib/Hamlib/issues/851 --- rigs/yaesu/ft1200.c | 4 +- rigs/yaesu/ft891.c | 4 +- rigs/yaesu/ft991.c | 4 +- rigs/yaesu/ftdx10.c | 4 +- rigs/yaesu/ftdx101.c | 4 +- rigs/yaesu/ftdx101mp.c | 4 +- rigs/yaesu/newcat.c | 109 +++++++++++++++++++++++++++++++++++++++++ rigs/yaesu/newcat.h | 7 ++- 8 files changed, 133 insertions(+), 7 deletions(-) diff --git a/rigs/yaesu/ft1200.c b/rigs/yaesu/ft1200.c index 06e43e361..d6b11cb32 100644 --- a/rigs/yaesu/ft1200.c +++ b/rigs/yaesu/ft1200.c @@ -152,7 +152,7 @@ const struct rig_caps ftdx1200_caps = RIG_MODEL(RIG_MODEL_FTDX1200), .model_name = "FTDX-1200", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".2", + .version = NEWCAT_VER ".3", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -320,4 +320,6 @@ const struct rig_caps ftdx1200_caps = .set_ext_level = newcat_set_ext_level, .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, + .set_clock = newcat_set_clock, + .get_clock = newcat_get_clock }; diff --git a/rigs/yaesu/ft891.c b/rigs/yaesu/ft891.c index 0c38dfa3c..c004cd632 100644 --- a/rigs/yaesu/ft891.c +++ b/rigs/yaesu/ft891.c @@ -135,7 +135,7 @@ const struct rig_caps ft891_caps = RIG_MODEL(RIG_MODEL_FT891), .model_name = "FT-891", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".4", + .version = NEWCAT_VER ".5", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -320,6 +320,8 @@ const struct rig_caps ft891_caps = .set_ext_level = newcat_set_ext_level, .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, + .set_clock = newcat_set_clock, + .get_clock = newcat_get_clock }; /* diff --git a/rigs/yaesu/ft991.c b/rigs/yaesu/ft991.c index d2b931436..c59f5f40a 100644 --- a/rigs/yaesu/ft991.c +++ b/rigs/yaesu/ft991.c @@ -143,7 +143,7 @@ const struct rig_caps ft991_caps = RIG_MODEL(RIG_MODEL_FT991), .model_name = "FT-991", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".7", + .version = NEWCAT_VER ".8", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -329,6 +329,8 @@ const struct rig_caps ft991_caps = .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, .send_voice_mem = newcat_send_voice_mem, + .set_clock = newcat_set_clock, + .get_clock = newcat_get_clock }; diff --git a/rigs/yaesu/ftdx10.c b/rigs/yaesu/ftdx10.c index bc3d6542f..41738e4cb 100644 --- a/rigs/yaesu/ftdx10.c +++ b/rigs/yaesu/ftdx10.c @@ -139,7 +139,7 @@ const struct rig_caps ftdx10_caps = RIG_MODEL(RIG_MODEL_FTDX10), .model_name = "FTDX-10", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".0", + .version = NEWCAT_VER ".1", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -308,4 +308,6 @@ const struct rig_caps ftdx10_caps = .set_ext_level = newcat_set_ext_level, .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, + .set_clock = newcat_set_clock, + .get_clock = newcat_get_clock }; diff --git a/rigs/yaesu/ftdx101.c b/rigs/yaesu/ftdx101.c index db9fdd7aa..00ca222ff 100644 --- a/rigs/yaesu/ftdx101.c +++ b/rigs/yaesu/ftdx101.c @@ -139,7 +139,7 @@ const struct rig_caps ftdx101d_caps = RIG_MODEL(RIG_MODEL_FTDX101D), .model_name = "FTDX-101D", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".12", + .version = NEWCAT_VER ".13", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -309,4 +309,6 @@ const struct rig_caps ftdx101d_caps = .set_ext_level = newcat_set_ext_level, .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, + .set_clock = newcat_set_clock, + .get_clock = newcat_get_clock }; diff --git a/rigs/yaesu/ftdx101mp.c b/rigs/yaesu/ftdx101mp.c index a1157b5a7..4fbcebfb1 100644 --- a/rigs/yaesu/ftdx101mp.c +++ b/rigs/yaesu/ftdx101mp.c @@ -77,7 +77,7 @@ const struct rig_caps ftdx101mp_caps = RIG_MODEL(RIG_MODEL_FTDX101MP), .model_name = "FTDX-101MP", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".3", + .version = NEWCAT_VER ".4", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -247,4 +247,6 @@ const struct rig_caps ftdx101mp_caps = .set_ext_level = newcat_set_ext_level, .get_ext_level = newcat_get_ext_level, .send_morse = newcat_send_morse, + .set_clock = newcat_set_clock, + .get_clock = newcat_get_clock }; diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 35916383c..85d6ad2cc 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -11026,3 +11026,112 @@ static int newcat_get_contour_width(RIG *rig, vfo_t vfo, int *width) RETURNFUNC(RIG_OK); } + +int newcat_set_clock(RIG *rig, int year, int month, int day, int hour, int min, + int sec, double msec, int utc_offset) +{ + int retval = RIG_OK; + int err; + struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv; + + if (!newcat_valid_command(rig, "DT")) + { + RETURNFUNC(-RIG_ENAVAIL); + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "DT0%04d%02d%02d%c", year, month, + day, cat_term); + + if (RIG_OK != (err = newcat_set_cmd(rig))) + { + rig_debug(RIG_DEBUG_VERBOSE, "%s:%d command err = %d\n", __func__, __LINE__, + err); + RETURNFUNC(err); + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "DT1%02d%02d%02d%c", hour, min, sec, cat_term); + + if (RIG_OK != (err = newcat_set_cmd(rig))) + { + rig_debug(RIG_DEBUG_VERBOSE, "%s:%d command err = %d\n", __func__, __LINE__, + err); + RETURNFUNC(err); + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "DT2%c%04d%c", utc_offset>=0?'+':'-', utc_offset, cat_term); + + if (RIG_OK != (err = newcat_set_cmd(rig))) + { + rig_debug(RIG_DEBUG_VERBOSE, "%s:%d command err = %d\n", __func__, __LINE__, + err); + RETURNFUNC(err); + } + + RETURNFUNC(retval); +} + +int newcat_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, + int *min, int *sec, double *msec, int *utc_offset) +{ + int retval = RIG_OK; + int err; + int n; + struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv; + + if (!newcat_valid_command(rig, "DT")) + { + RETURNFUNC(-RIG_ENAVAIL); + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "DT0%c", cat_term); + + if ((err = newcat_get_cmd(rig)) != RIG_OK) + { + RETURNFUNC(err); + } + + n = sscanf(priv->ret_data, "DT0%04d%02d%02d", year, month, day); + + if (n != 3) + { + rig_debug(RIG_DEBUG_ERR, "%s: DT0 unable to parse '%s'\n", __func__, + priv->ret_data); + RETURNFUNC(-RIG_EPROTO); + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "DT1%c", cat_term); + + if ((err = newcat_get_cmd(rig)) != RIG_OK) + { + RETURNFUNC(err); + } + + n = sscanf(priv->ret_data, "DT1%02d%02d%02d", hour, min, sec); + + if (n != 3) + { + rig_debug(RIG_DEBUG_ERR, "%s: DT1 unable to parse '%s'\n", __func__, + priv->ret_data); + RETURNFUNC(-RIG_EPROTO); + } + + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "DT2%c", cat_term); + + if ((err = newcat_get_cmd(rig)) != RIG_OK) + { + RETURNFUNC(err); + } + + // we keep utc_offset in HHMM format rather than converting + n = sscanf(priv->ret_data, "DT2%d", utc_offset); + + if (n != 1) + { + rig_debug(RIG_DEBUG_ERR, "%s: DT2 unable to parse '%s'\n", __func__, + priv->ret_data); + RETURNFUNC(-RIG_EPROTO); + } + + RETURNFUNC(retval); +} + diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index 7daac8806..89108f4bd 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20211114" +#define NEWCAT_VER "20211202" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 @@ -222,6 +222,11 @@ int newcat_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val); int newcat_send_morse(RIG *rig, vfo_t vfo, const char *msg); int newcat_send_voice_mem(RIG *rig, vfo_t vfo, int ch); +int newcat_set_clock(RIG *rig, int year, int month, int day, int hour, int min, + int sec, double msec, int utc_offset); +int newcat_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, + int *min, int *sec, double *msec, int *utc_offset); + #define TOKEN_BACKEND(t) (t)