diff --git a/c++/rigclass.cc b/c++/rigclass.cc index a55a3db6d..3953a37ac 100644 --- a/c++/rigclass.cc +++ b/c++/rigclass.cc @@ -540,9 +540,9 @@ void Rig::setAnt(value_t option, ant_t ant, vfo_t vfo) CHECK_RIG(rig_set_ant(theRig, vfo, ant, option)); } -ant_t Rig::getAnt(value_t &option, ant_t ant, ant_t &ant_curr, vfo_t vfo) +ant_t Rig::getAnt(ant_t &ant_rx, ant_t &ant_tx, ant_t ant, value_t &option, ant_t &ant_curr, vfo_t vfo) { - CHECK_RIG( rig_get_ant(theRig, vfo, ant, &ant_curr, &option) ); + CHECK_RIG( rig_get_ant(theRig, vfo, ant, &option, &ant_curr, &ant_tx, &ant_rx) ); return ant; } diff --git a/dummy/netrigctl.c b/dummy/netrigctl.c index b56a606a9..a2f178589 100644 --- a/dummy/netrigctl.c +++ b/dummy/netrigctl.c @@ -1768,7 +1768,7 @@ static int netrigctl_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) } -static int netrigctl_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, value_t *option) +static int netrigctl_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { int ret, len; char cmd[CMD_MAX]; @@ -1777,6 +1777,8 @@ static int netrigctl_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, v rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + ret = netrigctl_vfostr(rig, vfostr, sizeof(vfostr), vfo); if (ret != RIG_OK) { return ret; } diff --git a/include/hamlib/rigclass.h b/include/hamlib/rigclass.h index 4adfa5056..f0022150c 100644 --- a/include/hamlib/rigclass.h +++ b/include/hamlib/rigclass.h @@ -157,7 +157,7 @@ public: shortfreq_t getXit(vfo_t vfo = RIG_VFO_CURR); void setAnt(value_t option, ant_t ant, vfo_t vfo = RIG_VFO_CURR); - ant_t getAnt(value_t &option, ant_t ant, ant_t &ant_curr, vfo_t vfo = RIG_VFO_CURR); + ant_t getAnt(ant_t &ant_rx, ant_t &ant_tx, ant_t ant, value_t &option, ant_t &ant_curr, vfo_t vfo = RIG_VFO_CURR); void sendDtmf(const char *digits, vfo_t vfo = RIG_VFO_CURR); int recvDtmf(char *digits, vfo_t vfo = RIG_VFO_CURR); diff --git a/rigs/drake/drake.c b/rigs/drake/drake.c index cc55b90e6..44c6c26d2 100644 --- a/rigs/drake/drake.c +++ b/rigs/drake/drake.c @@ -504,12 +504,14 @@ int drake_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) * drake_get_ant * Assumes rig!=NULL */ -int drake_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int drake_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { int mdbuf_len, retval; char mdbuf[BUFSZ]; char cant; + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + retval = drake_transaction(rig, "RM" EOM, 3, mdbuf, &mdbuf_len); if (retval != RIG_OK) @@ -528,17 +530,17 @@ int drake_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) switch (cant & 0x3c) { - case '0': *ant = RIG_ANT_1; break; + case '0': *ant_curr = RIG_ANT_1; break; - case '4': *ant = RIG_ANT_3; break; + case '4': *ant_curr = RIG_ANT_3; break; - case '8': *ant = RIG_ANT_2; break; + case '8': *ant_curr = RIG_ANT_2; break; default : rig_debug(RIG_DEBUG_ERR, "drake_get_ant: unsupported antenna %c\n", cant); - *ant = RIG_ANT_NONE; + *ant_curr = RIG_ANT_UNKNOWN; return -RIG_EINVAL; } return RIG_OK; diff --git a/rigs/drake/drake.h b/rigs/drake/drake.h index 1ec372f4d..975e2350f 100644 --- a/rigs/drake/drake.h +++ b/rigs/drake/drake.h @@ -39,7 +39,7 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width); int drake_init(RIG *rig); int drake_cleanup(RIG *rig); int drake_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option); -int drake_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option); +int drake_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); int drake_set_mem(RIG *rig, vfo_t vfo, int ch); int drake_get_mem(RIG *rig, vfo_t vfo, int *ch); int drake_set_chan(RIG *rig, const channel_t *chan); diff --git a/rigs/elad/elad.c b/rigs/elad/elad.c index d47ba1557..b4397f7ea 100644 --- a/rigs/elad/elad.c +++ b/rigs/elad/elad.c @@ -2875,7 +2875,7 @@ int elad_set_ant_no_ack(RIG *rig, vfo_t vfo, ant_t ant) /* * get the aerial/antenna in use */ -int elad_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int elad_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { char ackbuf[8]; int offs; @@ -2904,7 +2904,7 @@ int elad_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) return -RIG_EPROTO; } - *ant = RIG_ANT_N(ackbuf[offs] - '1'); + *ant_curr = RIG_ANT_N(ackbuf[offs] - '1'); /* XXX check that the returned antenna is valid for the current rig */ diff --git a/rigs/elad/elad.h b/rigs/elad/elad.h index 535ae3037..249a95d60 100644 --- a/rigs/elad/elad.h +++ b/rigs/elad/elad.h @@ -140,7 +140,7 @@ int elad_reset(RIG *rig, reset_t reset); int elad_send_morse(RIG *rig, vfo_t vfo, const char *msg); int elad_set_ant (RIG * rig, vfo_t vfo, ant_t ant, value_t option); int elad_set_ant_no_ack(RIG * rig, vfo_t vfo, ant_t ant); -int elad_get_ant (RIG * rig, vfo_t vfo, ant_t dummy, ant_t * ant, value_t *option); +int elad_get_ant (RIG * rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); int elad_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt); int elad_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); int elad_set_ptt_safe(RIG *rig, vfo_t vfo, ptt_t ptt); diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index 3b01cce55..a73802b9f 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -417,7 +417,7 @@ const struct rig_caps ic9700_caps = .rig_model = RIG_MODEL_IC9700, .model_name = "IC-9700", .mfg_name = "Icom", - .version = BACKEND_VER ".3", + .version = BACKEND_VER ".3a", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 858474819..327f1cce9 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -47,6 +47,8 @@ #define VFO_HAS_MAIN_SUB_ONLY ((!VFO_HAS_A_B) & VFO_HAS_MAIN_SUB) #define VFO_HAS_MAIN_SUB_A_B_ONLY (VFO_HAS_A_B & VFO_HAS_MAIN_SUB) #define VFO_HAS_A_B_ONLY (VFO_HAS_A_B & (!VFO_HAS_MAIN_SUB)) +#define VFO_DUAL(RIG_VFO_MAIN_A|RIG_VFO_MAIN_B|RIG_VFO_SUB_A|RIG_VFO_SUB_B) +#define VFO_HAS_DUAL((rig->state.vfo_list & VFO_DUAL) == VFO_DUAL) static int set_vfo_curr(RIG *rig, vfo_t vfo, vfo_t curr_vfo); @@ -3958,7 +3960,7 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); if (vfo == RIG_VFO_CURR) { - rig_debug(RIG_DEBUG_TRACE,"%s: asking for currVFO=%s\n", __func__, rig_strvfo(priv->curr_vfo)); + rig_debug(RIG_DEBUG_TRACE,"%s: asking for currVFO=(%d)%s\n", __func__, priv->curr_vfo, rig_strvfo(priv->curr_vfo)); vfo = priv->curr_vfo; } @@ -5395,10 +5397,10 @@ int icom_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) if (priv_caps->antack_len == 0) { // we need to find out the antack_len - ant_t tmp_ant; + ant_t tmp_ant, ant_tx, ant_rx; int ant = 0; value_t tmp_option; - retval = rig_get_ant(rig, vfo, ant, &tmp_ant, &tmp_option); + retval = rig_get_ant(rig, vfo, ant, &tmp_option, &tmp_ant, &ant_tx, &ant_rx); if (retval != RIG_OK) { rig_debug(RIG_DEBUG_ERR,"%s: rig_get_ant error: %s \n", __func__, rigerror(retval)); return retval; @@ -5470,7 +5472,7 @@ int icom_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) * Assumes rig!=NULL, rig->state.priv!=NULL * only meaningfull for HF */ -int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, value_t *option) +int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { unsigned char ackbuf[MAXFRAMELEN]; int ack_len = sizeof(ackbuf), retval; @@ -5478,6 +5480,9 @@ int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, value_t *optio rig_debug(RIG_DEBUG_VERBOSE, "%s called, ant=0x%02x\n", __func__, ant); + + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + if (ant != RIG_ANT_CURR) { ant = rig_setting2idx(ant); diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index d76d3a1a6..004379eec 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -30,7 +30,7 @@ #include #endif -#define BACKEND_VER "0.28" +#define BACKEND_VER "0.28a" /* * defines used by comp_cal_str in rig.c @@ -257,7 +257,7 @@ int icom_get_conf(RIG *rig, token_t token, char *val); int icom_set_powerstat(RIG *rig, powerstat_t status); int icom_get_powerstat(RIG *rig, powerstat_t *status); int icom_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option); -int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, value_t *option); +int icom_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); int icom_decode_event(RIG *rig); int icom_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq, rmode_t mode); diff --git a/rigs/kenwood/ic10.c b/rigs/kenwood/ic10.c index 3d5d7f201..d7c534a52 100644 --- a/rigs/kenwood/ic10.c +++ b/rigs/kenwood/ic10.c @@ -445,11 +445,12 @@ int ic10_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) * ic10_get_ant * Assumes rig!=NULL, ptt!=NULL */ -int ic10_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int ic10_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { char infobuf[50]; int info_len, retval; + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; info_len = 4; retval = ic10_transaction(rig, "AN;", 3, infobuf, &info_len); @@ -465,7 +466,7 @@ int ic10_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) return -RIG_ERJCTED; } - *ant = infobuf[2] == '1' ? RIG_ANT_1 : RIG_ANT_2; + *ant_curr = infobuf[2] == '1' ? RIG_ANT_1 : RIG_ANT_2; return RIG_OK; } diff --git a/rigs/kenwood/ic10.h b/rigs/kenwood/ic10.h index 0890011ff..b45c31854 100644 --- a/rigs/kenwood/ic10.h +++ b/rigs/kenwood/ic10.h @@ -33,7 +33,7 @@ int ic10_get_split_vfo(RIG *rig, vfo_t vfo , split_t *split, vfo_t *txvfo); int ic10_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); int ic10_set_freq(RIG *rig, vfo_t vfo, freq_t freq); int ic10_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option); -int ic10_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option); +int ic10_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); int ic10_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); int ic10_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status); int ic10_set_parm(RIG *rig, setting_t parm, value_t val); diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index db3f201d9..570195bc4 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -3095,7 +3095,7 @@ int kenwood_set_ant_no_ack(RIG *rig, vfo_t vfo, ant_t ant, value_t option) /* * get the aerial/antenna in use */ -int kenwood_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int kenwood_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { char ackbuf[8]; int offs; @@ -3103,7 +3103,9 @@ int kenwood_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *optio rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - if (!ant) + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + + if (!ant_curr) { return -RIG_EINVAL; } @@ -3129,7 +3131,7 @@ int kenwood_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *optio return -RIG_EPROTO; } - *ant = RIG_ANT_N(ackbuf[offs] - '1'); + *ant_curr = RIG_ANT_N(ackbuf[offs] - '1'); /* XXX check that the returned antenna is valid for the current rig */ diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index fe75e83cd..f504b4903 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -159,7 +159,7 @@ int kenwood_reset(RIG *rig, reset_t reset); int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg); int kenwood_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option); int kenwood_set_ant_no_ack(RIG *rig, vfo_t vfo, ant_t ant, value_t option); -int kenwood_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option); +int kenwood_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); int kenwood_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt); int kenwood_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); int kenwood_set_ptt_safe(RIG *rig, vfo_t vfo, ptt_t ptt); diff --git a/rigs/kenwood/th.c b/rigs/kenwood/th.c index 1e01c7ce1..7d35fee48 100644 --- a/rigs/kenwood/th.c +++ b/rigs/kenwood/th.c @@ -2552,13 +2552,15 @@ int th_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) /* * get the aerial/antenna in use */ -int th_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int th_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { char buf[8]; int retval; rig_debug(RIG_DEBUG_TRACE, "%s\n", __func__); + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + retval = kenwood_safe_transaction(rig, "ANT", buf, sizeof(buf), 5); if (retval != RIG_OK) @@ -2571,9 +2573,9 @@ int th_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) return -RIG_EPROTO; } - *ant = RIG_ANT_N(buf[4] - '0'); + *ant_curr = RIG_ANT_N(buf[4] - '0'); - rig_debug(RIG_DEBUG_TRACE, "%s: ant = %d\n", __func__, *ant); + rig_debug(RIG_DEBUG_TRACE, "%s: ant = %d\n", __func__, *ant_curr); return RIG_OK; } diff --git a/rigs/kenwood/th.h b/rigs/kenwood/th.h index b98a45230..abeba044d 100644 --- a/rigs/kenwood/th.h +++ b/rigs/kenwood/th.h @@ -63,7 +63,7 @@ extern int th_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd); extern int th_get_channel(RIG *rig, channel_t *chan); extern int th_set_channel(RIG *rig, const channel_t *chan); extern int th_set_ant (RIG * rig, vfo_t vfo, ant_t ant, value_t option); -extern int th_get_ant (RIG * rig, vfo_t vfo, ant_t dummy, ant_t * ant, value_t *option); +extern int th_get_ant (RIG * rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t * ant_curr, ant_t *ant_tx, ant_t *ant_rx); extern int th_reset(RIG *rig, reset_t reset); extern int th_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch); diff --git a/rigs/kit/elektor507.c b/rigs/kit/elektor507.c index 7cea81a65..d4bdeea87 100644 --- a/rigs/kit/elektor507.c +++ b/rigs/kit/elektor507.c @@ -54,7 +54,7 @@ static int elektor507_set_level(RIG *rig, vfo_t vfo, setting_t level, static int elektor507_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); static int elektor507_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option); -static int elektor507_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option); +static int elektor507_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); static int elektor507_set_conf(RIG *rig, token_t token, const char *val); static int elektor507_get_conf(RIG *rig, token_t token, char *val); @@ -1191,12 +1191,12 @@ int elektor507_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) return (ret != 0) ? -RIG_EIO : RIG_OK; } -int elektor507_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int elektor507_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { struct elektor507_priv_data *priv = (struct elektor507_priv_data *) rig->state.priv; - *ant = priv->ant; + *ant_curr = priv->ant; return RIG_OK; } diff --git a/rigs/racal/ra37xx.c b/rigs/racal/ra37xx.c index 88b6e14a4..fd28d138e 100644 --- a/rigs/racal/ra37xx.c +++ b/rigs/racal/ra37xx.c @@ -751,11 +751,13 @@ int ra37xx_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) return ra37xx_transaction(rig, buf, NULL, NULL); } -int ra37xx_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int ra37xx_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { char buf[BUFSZ]; int retval, buflen, ra_ant; + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + retval = ra37xx_transaction(rig, "QANT", buf, &buflen); if (retval != RIG_OK) @@ -770,10 +772,10 @@ int ra37xx_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option return -RIG_EPROTO; } - *ant = ((ra_ant & (1 << 0)) ? RIG_ANT_1 : 0) | - ((ra_ant & (1 << 1)) ? RIG_ANT_2 : 0) | - ((ra_ant & (1 << 2)) ? RIG_ANT_3 : 0) | - ((ra_ant & (1 << 3)) ? RIG_ANT_4 : 0); + *ant_curr = ((ra_ant & (1 << 0)) ? RIG_ANT_1 : 0) | + ((ra_ant & (1 << 1)) ? RIG_ANT_2 : 0) | + ((ra_ant & (1 << 2)) ? RIG_ANT_3 : 0) | + ((ra_ant & (1 << 3)) ? RIG_ANT_4 : 0); return RIG_OK; } diff --git a/rigs/racal/ra37xx.h b/rigs/racal/ra37xx.h index 58cff5687..ba595ce75 100644 --- a/rigs/racal/ra37xx.h +++ b/rigs/racal/ra37xx.h @@ -77,7 +77,7 @@ int ra37xx_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); int ra37xx_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); const char* ra37xx_get_info(RIG *rig); int ra37xx_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option); -int ra37xx_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option); +int ra37xx_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); int ra37xx_set_mem(RIG *rig, vfo_t vfo, int ch); int ra37xx_get_mem(RIG *rig, vfo_t vfo, int *ch); int ra37xx_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch); diff --git a/rigs/tentec/orion.c b/rigs/tentec/orion.c index c316c3da0..9c29bbc48 100644 --- a/rigs/tentec/orion.c +++ b/rigs/tentec/orion.c @@ -2116,11 +2116,13 @@ int tt565_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) * * \sa tt565_set_ant */ -int tt565_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int tt565_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { char respbuf[TT565_BUFSIZE]; int resp_len, retval; + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + resp_len = sizeof(respbuf); retval = tt565_transaction(rig, "?KA" EOM, 4, respbuf, &resp_len); @@ -2139,17 +2141,17 @@ int tt565_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) /* Look for first occurrence of M or S in ant 1, 2, 3 characters */ if (respbuf[3] == which_receiver(rig, vfo) || respbuf[3] == 'B') { - *ant = RIG_ANT_1; + *ant_curr = RIG_ANT_1; return RIG_OK; } if (respbuf[4] == which_receiver(rig, vfo) || respbuf[4] == 'B') { - *ant = RIG_ANT_2; + *ant_curr = RIG_ANT_2; return RIG_OK; } - *ant = RIG_ANT_NONE; /* ignore possible RIG_ANT_3 = rx only ant */ + *ant_curr = RIG_ANT_NONE; /* ignore possible RIG_ANT_3 = rx only ant */ return RIG_OK; } /* End of orion.c */ diff --git a/rigs/tentec/orion.h b/rigs/tentec/orion.h index ac2a7c5c0..bc14c678b 100644 --- a/rigs/tentec/orion.h +++ b/rigs/tentec/orion.h @@ -78,7 +78,7 @@ static int tt565_send_morse(RIG *rig, vfo_t vfo, const char *msg); static int tt565_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status); static int tt565_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); static int tt565_set_ant(RIG * rig, vfo_t vfo, ant_t ant, value_t option); -static int tt565_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option); +static int tt565_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx); /** \brief Orion private data */ struct tt565_priv_data { diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 243ad557d..73fed9ac9 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -2450,7 +2450,7 @@ int newcat_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) } -int newcat_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option) +int newcat_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv; int err; @@ -2492,26 +2492,27 @@ int newcat_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, ant_t *ant, value_t *option switch (c) { case '1': - *ant = RIG_ANT_1; + *ant_curr = RIG_ANT_1; break; case '2' : - *ant = RIG_ANT_2; + *ant_curr = RIG_ANT_2; break; case '3' : - *ant = RIG_ANT_3; + *ant_curr = RIG_ANT_3; break; case '4' : - *ant = RIG_ANT_4; + *ant_curr = RIG_ANT_4; break; case '5' : - *ant = RIG_ANT_5; + *ant_curr = RIG_ANT_5; break; default: + *ant_curr = RIG_ANT_UNKNOWN; return -RIG_EPROTO; } diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index daed41179..298255406 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -146,7 +146,7 @@ int newcat_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width); int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); int newcat_get_ptt(RIG * rig, vfo_t vfo, ptt_t * ptt); int newcat_set_ant(RIG * rig, vfo_t vfo, ant_t ant, value_t option); -int newcat_get_ant(RIG * rig, vfo_t vfo, ant_t dummy, ant_t * ant, value_t * option); +int newcat_get_ant(RIG * rig, vfo_t vfo, ant_t dummy, value_t * option, ant_t * ant_curr, ant_t * ant_tx, ant_t *ant_rx); int newcat_set_level(RIG * rig, vfo_t vfo, setting_t level, value_t val); int newcat_get_level(RIG * rig, vfo_t vfo, setting_t level, value_t * val); int newcat_set_func(RIG * rig, vfo_t vfo, setting_t func, int status); diff --git a/src/mem.c b/src/mem.c index b405fe5e2..2c2bab5bc 100644 --- a/src/mem.c +++ b/src/mem.c @@ -447,7 +447,8 @@ static int generic_save_channel(RIG *rig, channel_t *chan) if (mem_cap->ant) { - rig_get_ant(rig, RIG_VFO_CURR, RIG_ANT_CURR, &chan->ant, &vdummy); + ant_t ant_tx, ant_rx; + rig_get_ant(rig, RIG_VFO_CURR, RIG_ANT_CURR, &vdummy, &chan->ant, &ant_tx, &ant_rx); } if (mem_cap->tuning_step) diff --git a/src/rig.c b/src/rig.c index 17ad91165..b7683f94d 100644 --- a/src/rig.c +++ b/src/rig.c @@ -3555,7 +3555,7 @@ int HAMLIB_API rig_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) * * \sa rig_set_ant() */ -int HAMLIB_API rig_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, value_t *option) +int HAMLIB_API rig_get_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx) { const struct rig_caps *caps; int retcode, rc2; @@ -3563,6 +3563,8 @@ int HAMLIB_API rig_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, valu rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + *ant_tx = *ant_rx = RIG_ANT_UNKNOWN; + if (CHECK_RIG_ARG(rig) || !ant_curr) { return -RIG_EINVAL; @@ -3579,7 +3581,7 @@ int HAMLIB_API rig_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, valu || vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo) { - return caps->get_ant(rig, vfo, ant, ant_curr, option); + return caps->get_ant(rig, vfo, ant, option, ant_curr, ant_tx, ant_rx); } if (!caps->set_vfo) @@ -3595,7 +3597,7 @@ int HAMLIB_API rig_get_ant(RIG *rig, vfo_t vfo, ant_t ant, ant_t *ant_curr, valu return retcode; } - retcode = caps->get_ant(rig, vfo, ant, ant_curr, option); + retcode = caps->get_ant(rig, vfo, ant, option, ant_curr, ant_tx, ant_rx); /* try and revert even if we had an error above */ rc2 = caps->set_vfo(rig, curr_vfo); diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 72b3e7b67..54d03ac94 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -288,7 +288,7 @@ static struct test_table test_list[] = { 'Z', "set_xit", ACTION(set_xit), ARG_IN, "XIT" }, { 'z', "get_xit", ACTION(get_xit), ARG_OUT, "XIT" }, { 'Y', "set_ant", ACTION(set_ant), ARG_IN, "Antenna", "Option" }, - { 'y', "get_ant", ACTION(get_ant), ARG_IN1 | ARG_OUT2 |ARG_NOVFO, "Antenna", "Option" }, + { 'y', "get_ant", ACTION(get_ant), ARG_IN1 | ARG_OUT2 |ARG_NOVFO, "AntCurr", "Option", "AntTx", "AntRx" }, { 0x87, "set_powerstat", ACTION(set_powerstat), ARG_IN | ARG_NOVFO, "Power Status" }, { 0x88, "get_powerstat", ACTION(get_powerstat), ARG_OUT | ARG_NOVFO, "Power Status" }, { 0x89, "send_dtmf", ACTION(send_dtmf), ARG_IN, "Digits" }, @@ -3985,18 +3985,19 @@ declare_proto_rig(set_ant) declare_proto_rig(get_ant) { int status; - ant_t ant, ant_curr; + ant_t ant, ant_curr, ant_tx, ant_rx; value_t option; + char antbuf[32]; CHKSCN1ARG(sscanf(arg1, "%d", &ant)); if (ant == 0) // then we want the current antenna info { - status = rig_get_ant(rig, vfo, RIG_ANT_CURR, &ant_curr, &option); + status = rig_get_ant(rig, vfo, RIG_ANT_CURR, &option, &ant_curr, &ant_tx, &ant_rx); } else { - status = rig_get_ant(rig, vfo, rig_idx2setting(ant-1), &ant_curr, &option); + status = rig_get_ant(rig, vfo, rig_idx2setting(ant-1), &option, &ant_curr, &ant_tx, &ant_rx); } if (status != RIG_OK) @@ -4008,7 +4009,9 @@ declare_proto_rig(get_ant) fprintf(fout, "%s: ", cmd->arg1); } - fprintf(fout, "%d%c", rig_setting2idx(ant_curr)+1, resp_sep); + sprintf_ant(antbuf,ant_curr); + fprintf(fout, "%s%c", antbuf, resp_sep); + //fprintf(fout, "%d%c", rig_setting2idx(ant_curr)+1, resp_sep); if ((interactive && prompt) || (interactive && !prompt && ext_resp)) { @@ -4017,6 +4020,24 @@ declare_proto_rig(get_ant) fprintf(fout, "%d%c", option.i, resp_sep); + if ((interactive && prompt) || (interactive && !prompt && ext_resp)) + { + fprintf(fout, "%s: ", cmd->arg3); + } + + sprintf_ant(antbuf,ant_tx); + fprintf(fout, "%s%c", antbuf, resp_sep); + //fprintf(fout, "%d%c", rig_setting2idx(ant_tx)+1, resp_sep); + + if ((interactive && prompt) || (interactive && !prompt && ext_resp)) + { + fprintf(fout, "%s: ", cmd->arg4); + } + + sprintf_ant(antbuf,ant_rx); + fprintf(fout, "%s%c", antbuf, resp_sep); + //fprintf(fout, "%d%c", rig_setting2idx(ant_rx)+1, resp_sep); + return status; } diff --git a/tests/sprintflst.c b/tests/sprintflst.c index 649a54f6c..7a8d75508 100644 --- a/tests/sprintflst.c +++ b/tests/sprintflst.c @@ -105,6 +105,7 @@ int sprintf_ant(char *str, ant_t ant) if (ant == RIG_ANT_NONE) { + sprintf(str, "ANT_NONE"); return 0; }