Added option to not use VFO XCHG command when setting split parameters.

With Icom rigs that use MAIN?SUB VFOs there is a trade off when
setting the mode or frequency of the "other" VFO. Untill now Hamlib
uses the XCHG VFO command to address the "other" VFO. This has some
advantages, particularly it preserves the selected VFO and it
preserves memory mode of either VFO. The disadvantage is that any
split command causes the Rx to glitch when the VFO/MEMs are exchanged.

I have added a config parameter for Icom rigs called "no_xchg" which
forces the direct addressing of VFOs to set split mode/frequency. It
is a boolean option with a default of "0" (false) which equates to
prior behaviour. Setting it to "1" (true) will make the backend use
change VFO commands to set the "other" VFO. This means that TX on
"SUB" in split is assumed, that both are in VFO mode (not MEM), and
set/get split functions will leave the MAIN VFO selected.
Hamlib-3.0
Bill Somerville 2014-03-20 18:36:43 +00:00
rodzic 6e44327a7c
commit b0f6955740
54 zmienionych plików z 98 dodań i 6 usunięć

Wyświetl plik

@ -56,6 +56,7 @@
static const struct icom_priv_caps delta2_priv_caps = {
0x01, /* default address */
1, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list /* TODO: ts_sc_list */
};

Wyświetl plik

@ -39,6 +39,7 @@
static const struct icom_priv_caps ic1275_priv_caps = {
0x18, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -48,6 +48,7 @@
static const struct icom_priv_caps ic271_priv_caps = {
0x20, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -43,6 +43,7 @@
static const struct icom_priv_caps ic275_priv_caps = {
0x10, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -47,6 +47,7 @@
static const struct icom_priv_caps ic471_priv_caps = {
0x22, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -43,6 +43,7 @@
static const struct icom_priv_caps ic475_priv_caps = {
0x14, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -109,6 +109,7 @@
static const struct icom_priv_caps IC7000_priv_caps = {
0x70, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic7000_ts_sc_list
};

Wyświetl plik

@ -79,6 +79,7 @@
static const struct icom_priv_caps ic703_priv_caps = {
0x68, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic706_ts_sc_list
};

Wyświetl plik

@ -132,6 +132,7 @@ static int ic706_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width,
static const struct icom_priv_caps ic706_priv_caps = {
0x48, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic706_ts_sc_list,
.r2i_mode = ic706_r2i_mode
};
@ -264,6 +265,7 @@ const struct rig_caps ic706_caps = {
static const struct icom_priv_caps ic706mkii_priv_caps = {
0x4e, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic706_ts_sc_list,
.r2i_mode = ic706_r2i_mode
};
@ -419,6 +421,7 @@ const struct rig_caps ic706mkii_caps = {
static const struct icom_priv_caps ic706mkiig_priv_caps = {
0x58, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic706_ts_sc_list,
.r2i_mode = ic706_r2i_mode
};

Wyświetl plik

@ -53,6 +53,7 @@
static const struct icom_priv_caps ic707_priv_caps = {
0x3e, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -97,6 +97,7 @@
static const struct icom_priv_caps ic7100_priv_caps = {
0x88, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic7100_ts_sc_list, /* FIXME */
};

Wyświetl plik

@ -71,6 +71,7 @@
static const struct icom_priv_caps IC718_priv_caps = {
0x5e, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic718_ts_sc_list
};

Wyświetl plik

@ -79,6 +79,7 @@
static const struct icom_priv_caps IC7200_priv_caps = {
0x76, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic7200_ts_sc_list
};

Wyświetl plik

@ -51,6 +51,7 @@
static const struct icom_priv_caps ic725_priv_caps = {
0x28, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -53,6 +53,7 @@
static const struct icom_priv_caps ic726_priv_caps = {
0x30, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -53,6 +53,7 @@
static const struct icom_priv_caps ic728_priv_caps = {
0x38, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -50,6 +50,7 @@
static const struct icom_priv_caps ic735_priv_caps = {
0x04, /* default address */
1, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -57,6 +57,7 @@
static const struct icom_priv_caps ic736_priv_caps = {
0x40, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -53,6 +53,7 @@
static const struct icom_priv_caps ic737_priv_caps = {
0x3c, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -57,6 +57,7 @@
static const struct icom_priv_caps ic738_priv_caps = {
0x44, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -75,6 +75,7 @@
static const struct icom_priv_caps ic7410_priv_caps = {
0x80, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};

Wyświetl plik

@ -163,6 +163,7 @@ static int ic746pro_get_ext_parm(RIG *rig, token_t token, value_t *val);
static const struct icom_priv_caps ic746_priv_caps = {
0x56, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};
@ -369,6 +370,7 @@ static const struct confparams ic746pro_ext_parms[] = {
static const struct icom_priv_caps ic746pro_priv_caps = {
0x66, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};

Wyświetl plik

@ -79,6 +79,7 @@
static const struct icom_priv_caps ic751_priv_caps = {
0x1c, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -113,6 +113,7 @@ static int r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width,
static const struct icom_priv_caps ic756_priv_caps = {
0x50, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756_ts_sc_list,
.r2i_mode = r2i_mode
};
@ -254,6 +255,7 @@ const struct rig_caps ic756_caps = {
static const struct icom_priv_caps ic756pro_priv_caps = {
0x5c, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};
@ -401,6 +403,7 @@ const struct rig_caps ic756pro_caps = {
static const struct icom_priv_caps ic756pro2_priv_caps = {
0x64, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};
@ -759,6 +762,7 @@ static int ic756pro2_get_ext_parm(RIG *rig, token_t token, value_t *val)
static const struct icom_priv_caps ic756pro3_priv_caps = {
0x6e, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};

Wyświetl plik

@ -88,6 +88,7 @@
static const struct icom_priv_caps ic7600_priv_caps = {
0x7a, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};

Wyświetl plik

@ -51,6 +51,7 @@
static const struct icom_priv_caps ic761_priv_caps = {
0x1e, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -53,6 +53,7 @@
static const struct icom_priv_caps ic765_priv_caps = {
0x2c, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -75,6 +75,7 @@
static const struct icom_priv_caps ic7700_priv_caps = {
0x74, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};

Wyświetl plik

@ -50,6 +50,7 @@
static const struct icom_priv_caps ic775_priv_caps = {
0x46, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -63,6 +63,7 @@
static const struct icom_priv_caps ic78_priv_caps = {
0x62, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic706_ts_sc_list
};

Wyświetl plik

@ -78,6 +78,7 @@ static int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
static const struct icom_priv_caps ic7800_priv_caps = {
0x6a, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic756pro_ts_sc_list
};

Wyświetl plik

@ -54,6 +54,7 @@
static const struct icom_priv_caps ic781_priv_caps = {
0x26, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -48,7 +48,8 @@
*/
static const struct icom_priv_caps ic820h_priv_caps = {
0x42, /* default address */
1, /* 731 mode */
1, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -48,7 +48,8 @@
*/
static const struct icom_priv_caps ic821h_priv_caps = {
0x4c, /* default address */
1, /* 731 mode */
1, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -245,6 +245,7 @@ static int ic910_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width,
static const struct icom_priv_caps ic910_priv_caps = {
0x60, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic910_ts_sc_list,
.r2i_mode = ic910_r2i_mode
};

Wyświetl plik

@ -97,6 +97,7 @@
static const struct icom_priv_caps ic9100_priv_caps = {
0x7c, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic910_ts_sc_list, /* FIXME */
};

Wyświetl plik

@ -89,6 +89,7 @@ const struct ts_sc_list ic92d_ts_sc_list[] = {
static const struct icom_priv_caps ic92d_priv_caps = {
0x01, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic92d_ts_sc_list,
.serial_full_duplex = 1
};

Wyświetl plik

@ -44,6 +44,7 @@
static const struct icom_priv_caps ic970_priv_caps = {
0x2e, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -255,6 +255,7 @@ struct icom_addr {
#define TOK_CIVADDR TOKEN_BACKEND(1)
#define TOK_MODE731 TOKEN_BACKEND(2)
#define TOK_NOXCHG TOKEN_BACKEND(3)
const struct confparams icom_cfg_params[] = {
{ TOK_CIVADDR, "civaddr", "CI-V address", "Transceiver's CI-V address",
@ -264,6 +265,9 @@ const struct confparams icom_cfg_params[] = {
"data length, needed for IC731 and IC735",
"0", RIG_CONF_CHECKBUTTON
},
{ TOK_NOXCHG, "no_xchg", "No VFO XCHG", "Don't Use VFO XCHG to set other VFO mode and Frequency",
"0", RIG_CONF_CHECKBUTTON
},
{ RIG_CONF_END, NULL, }
};
@ -378,6 +382,7 @@ int icom_init(RIG *rig)
priv->re_civ_addr = priv_caps->re_civ_addr;
priv->civ_731_mode = priv_caps->civ_731_mode;
priv->no_xchg = priv_caps->no_xchg;
return RIG_OK;
}
@ -1359,6 +1364,9 @@ int icom_set_conf(RIG *rig, token_t token, const char *val)
case TOK_MODE731:
priv->civ_731_mode = atoi(val) ? 1:0;
break;
case TOK_NOXCHG:
priv->no_xchg = atoi(val) ? 1:0;
break;
default:
return -RIG_EINVAL;
}
@ -1385,6 +1393,9 @@ int icom_get_conf(RIG *rig, token_t token, char *val)
case TOK_MODE731:
sprintf(val, "%d", priv->civ_731_mode);
break;
case TOK_NOXCHG:
sprintf(val, "%d", priv->no_xchg);
break;
default:
return -RIG_EINVAL;
}
@ -1654,9 +1665,14 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
{
int status;
vfo_t rx_vfo, tx_vfo;
struct icom_priv_data *priv;
struct rig_state *rs;
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
/* This method works also in memory mode(RIG_VFO_MEM) */
if (rig_has_vfo_op(rig, RIG_OP_XCHG)) {
if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) {
status = icom_vfo_op(rig, vfo, RIG_OP_XCHG);
if (status != RIG_OK)
return status;
@ -1701,9 +1717,14 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
{
int status;
vfo_t rx_vfo, tx_vfo;
struct icom_priv_data *priv;
struct rig_state *rs;
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
/* This method works also in memory mode(RIG_VFO_MEM) */
if (rig_has_vfo_op(rig, RIG_OP_XCHG)) {
if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) {
status = icom_vfo_op(rig, vfo, RIG_OP_XCHG);
if (status != RIG_OK)
return status;
@ -1748,9 +1769,14 @@ int icom_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, pbwidth_t tx_width
{
int status;
vfo_t rx_vfo, tx_vfo;
struct icom_priv_data *priv;
struct rig_state *rs;
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
/* This method works also in memory mode(RIG_VFO_MEM) */
if (rig_has_vfo_op(rig, RIG_OP_XCHG)) {
if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) {
status = icom_vfo_op(rig, vfo, RIG_OP_XCHG);
if (status != RIG_OK)
return status;
@ -1796,9 +1822,14 @@ int icom_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, pbwidth_t *tx_wid
{
int status;
vfo_t rx_vfo, tx_vfo;
struct icom_priv_data *priv;
struct rig_state *rs;
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
/* This method works also in memory mode(RIG_VFO_MEM) */
if (rig_has_vfo_op(rig, RIG_OP_XCHG)) {
if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) {
status = icom_vfo_op(rig, vfo, RIG_OP_XCHG);
if (status != RIG_OK)
return status;

Wyświetl plik

@ -98,6 +98,7 @@ typedef struct rig_pltstate {
struct icom_priv_caps {
unsigned char re_civ_addr; /* the remote dlft equipment's CI-V address*/
int civ_731_mode; /* Off: freqs on 10 digits, On: freqs on 8 digits */
int no_xchg; /* Off: use VFO XCHG to set other VFO, On: use set VFO to set other VFO */
const struct ts_sc_list *ts_sc_list;
int settle_time; /*!< Receiver settle time, in ms */
int (*r2i_mode)(RIG *rig, rmode_t mode, pbwidth_t width,
@ -116,6 +117,7 @@ struct icom_priv_caps {
struct icom_priv_data {
unsigned char re_civ_addr; /* the remote equipment's CI-V address*/
int civ_731_mode; /* Off: freqs on 10 digits, On: freqs on 8 digits */
int no_xchg; /* Off: use VFO XCHG to set other VFO, On: use set VFO to set other VFO */
pltstate_t *pltstate; /* only on optoscan */
};

Wyświetl plik

@ -48,6 +48,7 @@
static const struct icom_priv_caps icr10_priv_caps = {
0x52, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r8500_ts_sc_list /* wrong, but don't have set_ts anyway */
};

Wyświetl plik

@ -52,6 +52,7 @@
static const struct icom_priv_caps icr20_priv_caps = {
0x6c, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r8500_ts_sc_list /* wrong, but don't have set_ts anyway */
};

Wyświetl plik

@ -52,6 +52,7 @@ static int r7000_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
static const struct icom_priv_caps icr7000_priv_caps = {
0x08, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r7100_ts_sc_list
};
/*
@ -161,6 +162,7 @@ const struct rig_caps icr7000_caps = {
static const struct icom_priv_caps icr7100_priv_caps = {
0x34, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r7100_ts_sc_list
};
/*

Wyświetl plik

@ -43,6 +43,7 @@
static const struct icom_priv_caps icr71_priv_caps = {
0x1a, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list /* none actually */
};

Wyświetl plik

@ -44,6 +44,7 @@
static const struct icom_priv_caps icr72_priv_caps = {
0x32, /* default address */
0, /* 731 mode */
0, /* no XCHG */
ic737_ts_sc_list
};

Wyświetl plik

@ -97,6 +97,7 @@ static int icr75_get_channel(RIG *rig, channel_t *chan);
static const struct icom_priv_caps icr75_priv_caps = {
0x5a, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r75_ts_sc_list
};

Wyświetl plik

@ -65,6 +65,7 @@
static const struct icom_priv_caps icr8500_priv_caps = {
0x4a, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r8500_ts_sc_list
};
/*

Wyświetl plik

@ -60,6 +60,7 @@
static const struct icom_priv_caps icr9000_priv_caps = {
0x2a, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r9000_ts_sc_list
};

Wyświetl plik

@ -64,6 +64,7 @@
static const struct icom_priv_caps icr9500_priv_caps = {
0x72, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r9500_ts_sc_list
};

Wyświetl plik

@ -48,6 +48,7 @@
static const struct icom_priv_caps icrx7_priv_caps = {
0x78, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r8500_ts_sc_list /* wrong, but don't have set_ts anyway */
};

Wyświetl plik

@ -66,6 +66,7 @@ const struct ts_sc_list id1_ts_sc_list[] = {
static const struct icom_priv_caps id1_priv_caps = {
0x01, /* default address */
0, /* 731 mode */
0, /* no XCHG */
id1_ts_sc_list
};

Wyświetl plik

@ -58,6 +58,7 @@ static int omni6_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit);
static const struct icom_priv_caps omnivip_priv_caps = {
0x04, /* default address */
0, /* 731 mode */
0, /* no XCHG */
NULL /* TODO */
};

Wyświetl plik

@ -67,6 +67,7 @@ extern struct confparams opto_ext_parms[];
static const struct icom_priv_caps os456_priv_caps = {
0x80, /* default address */
0, /* 731 mode */
0, /* no XCHG */
NULL,
.settle_time = 20,
};

Wyświetl plik

@ -59,6 +59,7 @@ extern struct confparams opto_ext_parms[];
static const struct icom_priv_caps os535_priv_caps = {
0x80, /* default address */
0, /* 731 mode */
0, /* no XCHG */
NULL,
.settle_time = 12,
};