diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1 index ce73b7fc0..4b3150699 100644 --- a/doc/man1/rigctld.1 +++ b/doc/man1/rigctld.1 @@ -28,6 +28,7 @@ rigctld \- TCP radio control daemon .OP \-T IPADDR .OP \-t number .OP \-C parm=val +.OP \-X seconds .RB [ \-v [ \-Z ]] .YS . @@ -283,6 +284,14 @@ Set verbose mode, cumulative (see below). . .TP +.BR \-X ", " \-\-twiddle = \fIseconds\fP +Enables timeout when VFO twiddling is detected. Some functons will be ignored. +.IP +Should only be needed when controlling software should be "paused" +.B -v +so you can move the VFO. Continuous movement extends the timeout. +. +.TP .BR \-Z ", " \-\-debug\-time\-stamps Enable time stamps for the debug messages. .IP diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index 14cf852ca..2f5f0e58e 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -131,8 +131,9 @@ struct cmdparams ic7300_extcmds[] = #define IC9700_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM|RIG_VFO_MAIN_A|RIG_VFO_MAIN_B|RIG_VFO_SUB_A|RIG_VFO_SUB_B) #define IC9700_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP|RIG_PARM_SCREENSAVER) #define IC9700_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_SCOPE|RIG_FUNC_SATMODE|RIG_FUNC_AFC) - +#define IC9700_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) #define IC9700_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) +#define IC9700_SCAN_OPS (RIG_SCAN_STOP|RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT) #define IC9700_ALL_TX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD|RIG_MODE_DSTAR) #define IC9700_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD|RIG_MODE_DSTAR) @@ -440,8 +441,8 @@ const struct rig_caps ic9700_caps = .retry = 3, .has_get_func = IC9700_FUNCS, .has_set_func = IC9700_FUNCS, - .has_get_level = IC7300_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7300_LEVELS), + .has_get_level = IC9700_LEVELS, + .has_set_level = RIG_LEVEL_SET(IC9700_LEVELS), .has_get_parm = IC9700_PARMS, .has_set_parm = RIG_PARM_SET(IC9700_PARMS), .level_gran = { @@ -461,7 +462,7 @@ const struct rig_caps ic9700_caps = .max_ifshift = Hz(0), .targetable_vfo = RIG_TARGETABLE_FREQ, .vfo_ops = IC9700_VFO_OPS, - .scan_ops = IC7300_SCAN_OPS, + .scan_ops = IC9700_SCAN_OPS, .transceive = RIG_TRN_RIG, .bank_qty = 3, .chan_desc_sz = 0, diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 290047693..d8baf28e6 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -680,7 +680,8 @@ int icom_get_usb_echo_off(RIG *rig) // Check for echo on first priv->serial_USB_echo_off = 0; - rig_debug(RIG_DEBUG_VERBOSE, "%s: retry temp set to 1\n", __func__); + rig_debug(RIG_DEBUG_VERBOSE, "%s: retry temp set to %d\n", __func__, + rs->rigport.retry); retval = icom_transaction(rig, C_RD_FREQ, -1, NULL, 0, ackbuf, &ack_len); @@ -2871,14 +2872,20 @@ int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val) cfp = (cfp == NULL) ? icom_ext_levels : cfp; int i; - for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_levels);) { - if (cfp[i].token == RIG_CONF_END) { + for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_levels);) + { + if (cfp[i].token == RIG_CONF_END) + { cfp = icom_ext_levels; i = 0; - } else if (cfp[i].token == token) { + } + else if (cfp[i].token == token) + { return icom_set_ext_cmd(rig, vfo, token, val); - } else { i++; } + } + else { i++; } } + return -RIG_EINVAL; } @@ -2890,14 +2897,20 @@ int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val) cfp = (cfp == NULL) ? icom_ext_levels : cfp; int i; - for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_levels);) { - if (cfp[i].token == RIG_CONF_END) { + for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_levels);) + { + if (cfp[i].token == RIG_CONF_END) + { cfp = icom_ext_levels; i = 0; - } else if (cfp[i].token == token) { + } + else if (cfp[i].token == token) + { return icom_get_ext_cmd(rig, vfo, token, val); - } else { i++; } + } + else { i++; } } + return -RIG_EINVAL; } @@ -2909,14 +2922,20 @@ int icom_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status) cfp = (cfp == NULL) ? icom_ext_funcs : cfp; int i; - for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_funcs);) { - if (cfp[i].token == RIG_CONF_END) { + for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_funcs);) + { + if (cfp[i].token == RIG_CONF_END) + { cfp = icom_ext_funcs; i = 0; - } else if (cfp[i].token == token) { + } + else if (cfp[i].token == token) + { return icom_set_ext_cmd(rig, vfo, token, (value_t)status); - } else { i++; } + } + else { i++; } } + return -RIG_EINVAL; } @@ -2928,14 +2947,20 @@ int icom_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status) cfp = (cfp == NULL) ? icom_ext_funcs : cfp; int i; - for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_funcs);) { - if (cfp[i].token == RIG_CONF_END) { + for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_funcs);) + { + if (cfp[i].token == RIG_CONF_END) + { cfp = icom_ext_funcs; i = 0; - } else if (cfp[i].token == token) { - return icom_get_ext_cmd(rig, vfo, token, (value_t*)status); - } else { i++; } + } + else if (cfp[i].token == token) + { + return icom_get_ext_cmd(rig, vfo, token, (value_t *)status); + } + else { i++; } } + return -RIG_EINVAL; } @@ -2947,14 +2972,20 @@ int icom_set_ext_parm(RIG *rig, token_t token, value_t val) cfp = (cfp == NULL) ? icom_ext_parms : cfp; int i; - for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_parms);) { - if (cfp[i].token == RIG_CONF_END) { + for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_parms);) + { + if (cfp[i].token == RIG_CONF_END) + { cfp = icom_ext_parms; i = 0; - } else if (cfp[i].token == token) { + } + else if (cfp[i].token == token) + { return icom_set_ext_cmd(rig, RIG_VFO_NONE, token, val); - } else { i++; } + } + else { i++; } } + return -RIG_EINVAL; } @@ -2966,14 +2997,20 @@ int icom_get_ext_parm(RIG *rig, token_t token, value_t *val) cfp = (cfp == NULL) ? icom_ext_parms : cfp; int i; - for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_parms);) { - if (cfp[i].token == RIG_CONF_END) { + for (i = 0; (cfp[i].token != RIG_CONF_END) || (cfp != icom_ext_parms);) + { + if (cfp[i].token == RIG_CONF_END) + { cfp = icom_ext_parms; i = 0; - } else if (cfp[i].token == token) { + } + else if (cfp[i].token == token) + { return icom_get_ext_cmd(rig, RIG_VFO_NONE, token, val); - } else { i++; } + } + else { i++; } } + return -RIG_EINVAL; } @@ -4209,6 +4246,17 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) case RIG_SPLIT_ON: split_sc = S_SPLT_ON; + /* If asking for Sub or Main on rig that doesn't have it map it */ + if (VFO_HAS_A_B_ONLY && ((tx_vfo == RIG_VFO_MAIN || tx_vfo == RIG_VFO_SUB) + || vfo == RIG_VFO_MAIN || vfo == RIG_VFO_SUB)) + { + if (tx_vfo == RIG_VFO_MAIN) { tx_vfo = RIG_VFO_A; } + else if (tx_vfo == RIG_VFO_SUB) { tx_vfo = RIG_VFO_B; } + + if (vfo == RIG_VFO_MAIN) { vfo = RIG_VFO_A; } + else if (vfo == RIG_VFO_SUB) { vfo = RIG_VFO_B; } + } + /* ensure VFO A is Rx and VFO B is Tx as we assume that elsewhere */ if (VFO_HAS_A_B && (tx_vfo == RIG_VFO_A || tx_vfo == RIG_VFO_B)) { @@ -4249,6 +4297,9 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) return rc; } + priv->rx_vfo = vfo; + priv->tx_vfo = tx_vfo; + split_sc = S_SPLT_ON; } else @@ -4278,8 +4329,6 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) return -RIG_ERJCTED; } - priv->rx_vfo = vfo; - priv->tx_vfo = tx_vfo; priv->split_on = RIG_SPLIT_ON == split; rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s rx_vfo=%s tx_vfo=%s split=%d\n", __func__, rig_strvfo(vfo), rig_strvfo(priv->rx_vfo), @@ -6495,6 +6544,11 @@ static int set_vfo_curr(RIG *rig, vfo_t vfo, vfo_t curr_vfo) } retval = rig_set_vfo(rig, RIG_VFO_A); // we'll default to Main in this case + + if (retval != RIG_OK) + { + return retval; + } } if (VFO_HAS_MAIN_SUB_ONLY) diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index f9f86154e..8c80df446 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -30,7 +30,7 @@ #include #endif -#define BACKEND_VER "0.31a" +#define BACKEND_VER "0.32" /* * defines used by comp_cal_str in rig.c