kopia lustrzana https://github.com/Hamlib/Hamlib
kenwood.c change to minimize mode setting if change not needed
https://github.com/Hamlib/Hamlib/issues/872Hamlib-4.4
rodzic
d9d247cad3
commit
489ecf6aed
|
@ -2053,7 +2053,10 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
||||||
char kmode;
|
char kmode;
|
||||||
char buf[6];
|
char buf[6];
|
||||||
char data_mode = '0';
|
char data_mode = '0';
|
||||||
|
char *data_cmd = "DA";
|
||||||
int err;
|
int err;
|
||||||
|
int datamode = 0;
|
||||||
|
int needdata;
|
||||||
struct kenwood_priv_data *priv = rig->state.priv;
|
struct kenwood_priv_data *priv = rig->state.priv;
|
||||||
struct kenwood_priv_caps *caps = kenwood_caps(rig);
|
struct kenwood_priv_caps *caps = kenwood_caps(rig);
|
||||||
|
|
||||||
|
@ -2149,12 +2152,6 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
||||||
pbwidth_t twidth;
|
pbwidth_t twidth;
|
||||||
err = rig_get_mode(rig, vfo, &priv->curr_mode, &twidth);
|
err = rig_get_mode(rig, vfo, &priv->curr_mode, &twidth);
|
||||||
|
|
||||||
// only change mode if needed
|
|
||||||
if (priv->curr_mode != mode)
|
|
||||||
{
|
|
||||||
snprintf(buf, sizeof(buf), "MD%c", c);
|
|
||||||
err = kenwood_transaction(rig, buf, NULL, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err != RIG_OK) { RETURNFUNC(err); }
|
if (err != RIG_OK) { RETURNFUNC(err); }
|
||||||
|
@ -2167,20 +2164,35 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
||||||
|| RIG_MODE_RTTY == mode
|
|| RIG_MODE_RTTY == mode
|
||||||
|| RIG_MODE_RTTYR == mode))
|
|| RIG_MODE_RTTYR == mode))
|
||||||
{
|
{
|
||||||
char *data_cmd = "DA";
|
|
||||||
|
|
||||||
if (RIG_IS_TS950S || RIG_IS_TS950SDX)
|
if (RIG_IS_TS950S || RIG_IS_TS950SDX)
|
||||||
{
|
{
|
||||||
data_cmd = "DT";
|
data_cmd = "DT";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
datamode = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE, "%s: curr_mode=%s, new_mode=%s\n", __func__, rig_strrmode(priv->curr_mode), rig_strrmode(mode));
|
||||||
|
// only change mode if needed
|
||||||
|
if (priv->curr_mode != mode)
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "MD%c", c);
|
||||||
|
err = kenwood_transaction(rig, buf, NULL, 0);
|
||||||
|
}
|
||||||
|
needdata = 0;
|
||||||
|
if ((vfo == RIG_VFO_A) && ((priv->datamodeA == 0 && datamode) || (priv->datamodeA == 1 && !datamode)))
|
||||||
|
needdata = 1;
|
||||||
|
if ((vfo == RIG_VFO_B) && ((priv->datamodeB == 0 && datamode) || (priv->datamodeB == 1 && !datamode)))
|
||||||
|
needdata = 1;
|
||||||
|
|
||||||
|
if (needdata)
|
||||||
|
{
|
||||||
/* supports DATA sub modes - see above */
|
/* supports DATA sub modes - see above */
|
||||||
snprintf(buf, sizeof(buf), "%s%c", data_cmd, data_mode);
|
snprintf(buf, sizeof(buf), "%s%c", data_cmd, data_mode);
|
||||||
err = kenwood_transaction(rig, buf, NULL, 0);
|
err = kenwood_transaction(rig, buf, NULL, 0);
|
||||||
|
|
||||||
if (err != RIG_OK) { RETURNFUNC(err); }
|
if (err != RIG_OK) { RETURNFUNC(err); }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (RIG_PASSBAND_NOCHANGE == width) { RETURNFUNC(RIG_OK); }
|
if (RIG_PASSBAND_NOCHANGE == width) { RETURNFUNC(RIG_OK); }
|
||||||
|
|
||||||
|
@ -2418,6 +2430,8 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
|
|
||||||
if ('1' == modebuf[2])
|
if ('1' == modebuf[2])
|
||||||
{
|
{
|
||||||
|
if (vfo == RIG_VFO_A) priv->datamodeA = 1;
|
||||||
|
else priv->datamodeB = 1;
|
||||||
switch (*mode)
|
switch (*mode)
|
||||||
{
|
{
|
||||||
case RIG_MODE_USB: *mode = RIG_MODE_PKTUSB; break;
|
case RIG_MODE_USB: *mode = RIG_MODE_PKTUSB; break;
|
||||||
|
@ -2426,9 +2440,16 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
|
|
||||||
case RIG_MODE_FM: *mode = RIG_MODE_PKTFM; break;
|
case RIG_MODE_FM: *mode = RIG_MODE_PKTFM; break;
|
||||||
|
|
||||||
|
case RIG_MODE_AM: *mode = RIG_MODE_PKTAM; break;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (vfo == RIG_VFO_A) priv->datamodeA = 0;
|
||||||
|
else priv->datamodeB = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RIG_IS_TS480)
|
if (RIG_IS_TS480)
|
||||||
|
@ -2448,6 +2469,9 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
*width = rig_passband_normal(rig, *mode);
|
*width = rig_passband_normal(rig, *mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vfo == RIG_VFO_A) priv->modeA = *mode;
|
||||||
|
else priv->modeB = *mode;
|
||||||
|
|
||||||
RETURNFUNC(RIG_OK);
|
RETURNFUNC(RIG_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include "token.h"
|
#include "token.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
#define BACKEND_VER "20211109"
|
#define BACKEND_VER "20211118"
|
||||||
|
|
||||||
#define EOM_KEN ';'
|
#define EOM_KEN ';'
|
||||||
#define EOM_TH '\r'
|
#define EOM_TH '\r'
|
||||||
|
@ -166,6 +166,10 @@ struct kenwood_priv_data
|
||||||
int is_k4hd;
|
int is_k4hd;
|
||||||
int no_id; // if true will not send ID; with every set command
|
int no_id; // if true will not send ID; with every set command
|
||||||
int opened; // true once rig_open is called to avoid setting VFOA every open call
|
int opened; // true once rig_open is called to avoid setting VFOA every open call
|
||||||
|
rmode_t modeA;
|
||||||
|
rmode_t modeB;
|
||||||
|
int datamodeA; // datamode status from get_mode or set_mode
|
||||||
|
int datamodeB; // datamode status from get_mode or set_mode
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue