diff --git a/rigs/kenwood/elecraft.c b/rigs/kenwood/elecraft.c index 49d5d6aa0..12a500b9f 100644 --- a/rigs/kenwood/elecraft.c +++ b/rigs/kenwood/elecraft.c @@ -174,8 +174,17 @@ int elecraft_open(RIG *rig) } } + priv->save_k2_ext_lvl = -1; // so we don't restore if not neeede if (rig->caps->rig_model != RIG_MODEL_XG3) // XG3 doesn't have extended { + err = elecraft_get_extension_level(rig, "K2", &priv->save_k2_ext_lvl); + + if (err != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: error getting K2 ext_lvl: %s\n", __func__, + rigerror(err)); + return err; + } // turn on k2 extended to get PC values in more resolution err = kenwood_transaction(rig, "K22;", NULL, 0); @@ -347,7 +356,27 @@ int elecraft_open(RIG *rig) return RIG_OK; } +int elecraft_close(RIG *rig) +{ + struct kenwood_priv_data *priv = rig->state.priv; + char cmd[32]; + int err; + if (priv->save_k2_ext_lvl >= 0) + { + sprintf(cmd, "K2%d;", priv->save_k2_ext_lvl); + err = kenwood_transaction(rig, cmd, NULL, 0); + + if (err != RIG_OK) + { + rig_debug(RIG_DEBUG_ERR, "%s: error restoring %s='%s'...continuing\n", __func__, + cmd, + rigerror(err)); + } + } + + return kenwood_close(rig); +} /* Private helper functions */ diff --git a/rigs/kenwood/elecraft.h b/rigs/kenwood/elecraft.h index a294e453d..4d20b64e4 100644 --- a/rigs/kenwood/elecraft.h +++ b/rigs/kenwood/elecraft.h @@ -75,6 +75,7 @@ extern const struct confparams elecraft_ext_levels[]; /* Elecraft extension function declarations */ int elecraft_open(RIG *rig); +int elecraft_close(RIG *rig); /* S-meter calibration tables */ diff --git a/rigs/kenwood/k2.c b/rigs/kenwood/k2.c index 822366789..6917cce01 100644 --- a/rigs/kenwood/k2.c +++ b/rigs/kenwood/k2.c @@ -208,9 +208,9 @@ const struct rig_caps k2_caps = .priv = (void *)& k2_priv_caps, .rig_init = kenwood_init, - .rig_cleanup = kenwood_cleanup, + .rig_cleanup = kenwood_cleanup, .rig_open = k2_open, - .rig_close = kenwood_close, + .rig_close = elecraft_close, .set_freq = kenwood_set_freq, .get_freq = kenwood_get_freq, .set_mode = k2_set_mode, diff --git a/rigs/kenwood/k3.c b/rigs/kenwood/k3.c index 2cc7c48d6..56466452d 100644 --- a/rigs/kenwood/k3.c +++ b/rigs/kenwood/k3.c @@ -299,7 +299,7 @@ const struct rig_caps k3_caps = .rig_init = kenwood_init, .rig_cleanup = kenwood_cleanup, .rig_open = elecraft_open, - .rig_close = kenwood_close, + .rig_close = elecraft_close, .set_freq = k3_set_freq, .get_freq = kenwood_get_freq, .set_mode = k3_set_mode, @@ -452,7 +452,7 @@ const struct rig_caps k3s_caps = .rig_init = kenwood_init, .rig_cleanup = kenwood_cleanup, .rig_open = elecraft_open, - .rig_close = kenwood_close, + .rig_close = elecraft_close, .set_freq = k3_set_freq, .get_freq = kenwood_get_freq, .set_mode = k3_set_mode, @@ -605,7 +605,7 @@ const struct rig_caps k4_caps = .rig_init = kenwood_init, .rig_cleanup = kenwood_cleanup, .rig_open = elecraft_open, - .rig_close = kenwood_close, + .rig_close = elecraft_close, .set_freq = kenwood_set_freq, .get_freq = kenwood_get_freq, .set_mode = k3_set_mode, @@ -757,7 +757,7 @@ const struct rig_caps kx3_caps = .rig_init = kenwood_init, .rig_cleanup = kenwood_cleanup, .rig_open = elecraft_open, - .rig_close = kenwood_close, + .rig_close = elecraft_close, .set_freq = kenwood_set_freq, .get_freq = kenwood_get_freq, .set_mode = k3_set_mode, @@ -909,7 +909,7 @@ const struct rig_caps kx2_caps = .rig_init = kenwood_init, .rig_cleanup = kenwood_cleanup, .rig_open = elecraft_open, - .rig_close = kenwood_close, + .rig_close = elecraft_close, .set_freq = kenwood_set_freq, .get_freq = kenwood_get_freq, .set_mode = k3_set_mode, diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index f071c8f10..8c850115e 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -28,7 +28,7 @@ #include "token.h" #include "idx_builtin.h" -#define BACKEND_VER "20230414" +#define BACKEND_VER "20230430" #define EOM_KEN ';' #define EOM_TH '\r' @@ -177,6 +177,8 @@ struct kenwood_priv_data int datamodeB; // datamode status from get_mode or set_mode int ps_cmd_wakeup_data; // PS command requires wakeup characters (;) int question_mark_response_means_rejected; /* the question mark response has multiple meanings */ + int save_k2_ext_lvl; // so we can restore to original + int save_k3_ext_lvl; // so we can restore to original -- for future use if needed };