Add detection of K4HD for Elecraft

https://github.com/Hamlib/Hamlib/issues/563
pull/574/head
Michael Black W9MDB 2021-03-03 12:36:09 -06:00
rodzic 50c00cd115
commit 0acbc83a85
3 zmienionych plików z 28 dodań i 14 usunięć

Wyświetl plik

@ -194,11 +194,19 @@ int elecraft_open(RIG *rig)
priv->has_kpa3 = 0;
if (strstr(buf, "P")) { priv->has_kpa3 = 1; }
// could also use K4; command
if (rig->caps->rig_model == RIG_MODEL_K4) { priv->is_k4 = 1; }
if (rig->caps->rig_model == RIG_MODEL_K4) { priv->is_k4d = 1; }
else if (strstr(buf, "R")) { priv->is_k3s = 1; }
else if (strncmp(&buf[13], "--", 2) == 0) { priv->is_k3 = 1; }
if (strstr(buf, "S") && strstr(buf, "4") && strstr(buf, "H"))
{
// new firmware should recognize k4hd now
priv->is_k4d = 0;
priv->is_k4hd = 1;
}
if (buf[13] == '0') // then we have a KX3 or KX2
{
char modelnum;
@ -232,9 +240,9 @@ int elecraft_open(RIG *rig)
}
rig_debug(RIG_DEBUG_TRACE,
"%s: model=%s, is_k2=%d, is_k3=%d, is_k3s=%d, is_kx3=%d, is_kx2=%d, is_k4=%d, kpa3=%d\n",
"%s: model=%s, is_k2=%d, is_k3=%d, is_k3s=%d, is_kx3=%d, is_kx2=%d, is_k4d=%d, is_k4hd=%d, kpa3=%d\n",
__func__, model, priv->is_k2, priv->is_k3, priv->is_k3s, priv->is_kx3,
priv->is_kx2, priv->is_k4, priv->has_kpa3);
priv->is_kx2, priv->is_k4d, priv->is_k4hd, priv->has_kpa3);
err = elecraft_get_extension_level(rig, "K2", &priv->k2_ext_lvl);

Wyświetl plik

@ -183,7 +183,7 @@ const struct rig_caps k3_caps =
RIG_MODEL(RIG_MODEL_K3),
.model_name = "K3",
.mfg_name = "Elecraft",
.version = BACKEND_VER ".8",
.version = BACKEND_VER ".9",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -334,7 +334,7 @@ const struct rig_caps k3s_caps =
RIG_MODEL(RIG_MODEL_K3S),
.model_name = "K3S",
.mfg_name = "Elecraft",
.version = BACKEND_VER ".7",
.version = BACKEND_VER ".8",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -484,7 +484,7 @@ const struct rig_caps k4_caps =
RIG_MODEL(RIG_MODEL_K4),
.model_name = "K4",
.mfg_name = "Elecraft",
.version = BACKEND_VER ".7",
.version = BACKEND_VER ".8",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -633,7 +633,7 @@ const struct rig_caps kx3_caps =
RIG_MODEL(RIG_MODEL_KX3),
.model_name = "KX3",
.mfg_name = "Elecraft",
.version = BACKEND_VER ".7",
.version = BACKEND_VER ".8",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -782,7 +782,7 @@ const struct rig_caps kx2_caps =
RIG_MODEL(RIG_MODEL_KX2),
.model_name = "KX2",
.mfg_name = "Elecraft",
.version = BACKEND_VER ".7",
.version = BACKEND_VER ".8",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -1028,11 +1028,11 @@ int k3_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
*/
if (vfo == RIG_VFO_B)
{
err = kenwood_safe_transaction(rig, "BW$", buf, KENWOOD_MAX_BUF_LEN, 7);
err = kenwood_safe_transaction(rig, "BW$", buf, KENWOOD_MAX_BUF_LEN, 7);
}
else
{
err = kenwood_safe_transaction(rig, "BW", buf, KENWOOD_MAX_BUF_LEN, 6);
err = kenwood_safe_transaction(rig, "BW", buf, KENWOOD_MAX_BUF_LEN, 6);
}
if (err != RIG_OK)
@ -1117,6 +1117,7 @@ int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
int kmode;
int c;
kmode = rmode2kenwood(mode, caps->mode_table);
if (kmode < 0)
{
rig_debug(RIG_DEBUG_WARN, "%s: unsupported mode '%s'\n",
@ -1143,6 +1144,7 @@ int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
snprintf(buf, sizeof(buf), "MD%c", c);
}
err = kenwood_transaction(rig, buf, NULL, 0);
if (err != RIG_OK) { RETURNFUNC(err); }
@ -1173,6 +1175,7 @@ int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
width = rig_passband_normal(rig, mode);
}
#if 0
else if (width < pb_nar)
{
@ -1182,19 +1185,21 @@ int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
width = pb_wid;
}
#endif
// width is 50Hz rounded down
struct kenwood_priv_data *priv = rig->state.priv;
if (priv->is_k4)
if (priv->is_k4d || priv->is_k4hd)
{
width += 9; // rounds to 10Hz
}
else
else
{
width += 49;
}
if (width > 99999) width = 99999;
if (width > 99999) { width = 99999; }
if (vfo == RIG_VFO_B)
{

Wyświetl plik

@ -139,7 +139,8 @@ struct kenwood_priv_data
int is_k3s;
int is_kx3;
int is_kx2;
int is_k4;
int is_k4d;
int is_k4hd;
};