diff --git a/rigs/yaesu/ft2000.c b/rigs/yaesu/ft2000.c index d486ab020..ec5800da4 100644 --- a/rigs/yaesu/ft2000.c +++ b/rigs/yaesu/ft2000.c @@ -25,7 +25,6 @@ * */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -185,16 +184,17 @@ const struct rig_caps ft2000_caps = /* mode/filter list, .remember = order matters! */ .filters = { - {FT2000_CW_RTTY_PKT_RX_MODES, Hz(1800)}, /* Normal CW, RTTY, PKT/USER */ - {FT2000_CW_RTTY_PKT_RX_MODES, Hz(500)}, /* Narrow CW, RTTY, PKT/USER */ + {FT2000_CW_RTTY_PKT_RX_MODES, Hz(500)}, /* Normal CW, RTTY, PKT/USER */ + {FT2000_CW_RTTY_PKT_RX_MODES, Hz(100)}, /* Narrow CW, RTTY, PKT/USER */ {FT2000_CW_RTTY_PKT_RX_MODES, Hz(2400)}, /* Wide CW, RTTY, PKT/USER */ {RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */ {RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */ {RIG_MODE_SSB, Hz(3000)}, /* Wide SSB */ + {RIG_MODE_SSB, Hz(4000)}, /* Wide SSB */ {RIG_MODE_AM, Hz(9000)}, /* Normal AM */ {RIG_MODE_AM, Hz(6000)}, /* Narrow AM */ - {FT2000_FM_RX_MODES, Hz(12000)}, /* Normal FM */ - {FT2000_FM_RX_MODES, Hz(8000)}, /* Narrow FM */ + {FT2000_FM_RX_MODES, Hz(16000)}, /* Normal FM */ + {FT2000_FM_RX_MODES, Hz(9000)}, /* Narrow FM */ RIG_FLT_END, }, diff --git a/rigs/yaesu/ft2000.h b/rigs/yaesu/ft2000.h index 09d1d1b11..4517b82eb 100644 --- a/rigs/yaesu/ft2000.h +++ b/rigs/yaesu/ft2000.h @@ -28,60 +28,49 @@ #ifndef _FT2000_H #define _FT2000_H 1 -#if 0 -#define TRUE 1 -#define FALSE 0 -#define ON TRUE -#define OFF FALSE -#endif - -#define FT2000_VFO_ALL (RIG_VFO_A|RIG_VFO_B) +#define FT2000_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) /* Receiver caps */ -#define FT2000_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ - RIG_MODE_RTTY|RIG_MODE_RTTYR|\ - RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) +#define FT2000_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ + RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|\ + RIG_MODE_FM|RIG_MODE_FMN) #define FT2000_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) -#define FT2000_AM_RX_MODES (RIG_MODE_AM) +#define FT2000_AM_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN) #define FT2000_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM) #define FT2000_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\ RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR) - - - /* TRX caps */ #define FT2000_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY| \ - RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) /* 100 W class */ -#define FT2000_AM_TX_MODES (RIG_MODE_AM) /* set 25W max */ + RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|\ + RIG_MODE_FM|RIG_MODE_FMN) /* 100 W class */ +#define FT2000_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_AMN) /* set 25W max */ -/* TBC */ #define FT2000_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|\ - RIG_LEVEL_ALC|RIG_LEVEL_RAWSTR|RIG_LEVEL_SWR|\ + RIG_LEVEL_ALC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_SWR|\ RIG_LEVEL_RFPOWER|RIG_LEVEL_RF|RIG_LEVEL_SQL|\ RIG_LEVEL_MICGAIN|RIG_LEVEL_IF|RIG_LEVEL_CWPITCH|\ RIG_LEVEL_KEYSPD|RIG_LEVEL_AF|RIG_LEVEL_AGC|\ RIG_LEVEL_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_SQL|\ RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\ - RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF) + RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF|\ + RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_RFPOWER_METER|\ + RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER) -/* TBC */ #define FT2000_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\ RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\ RIG_FUNC_FBKIN|RIG_FUNC_COMP|RIG_FUNC_ANF|RIG_FUNC_MN|\ RIG_FUNC_RIT|RIG_FUNC_XIT|\ RIG_FUNC_TUNER) -/* TBC */ #define FT2000_VFO_OPS (RIG_OP_TUNE|RIG_OP_CPY|RIG_OP_XCHG|\ RIG_OP_UP|RIG_OP_DOWN|RIG_OP_BAND_UP|RIG_OP_BAND_DOWN|\ RIG_OP_TO_VFO|RIG_OP_FROM_VFO|RIG_OP_TOGGLE) -/* TBC */ #define FT2000_STR_CAL { 16, \ { \ { 0, -54 }, /* S0 */ \ diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 27ac0fea5..d2c64440d 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -2868,6 +2868,9 @@ int newcat_set_powerstat(RIG *rig, powerstat_t status) return -RIG_ENAVAIL; } + // TODO: According to FTDX3000 CAT manual: "This command requires dummy data be initially sent. Then after one second and before two seconds the command is sent." + // TODO: According to FTDX5000 CAT manual: "Send the PS1; command twice every one second." + snprintf(priv->cmd_str, sizeof(priv->cmd_str), "PS%c%c", ps, cat_term); err = write_block(&state->rigport, priv->cmd_str, strlen(priv->cmd_str)); @@ -5404,7 +5407,7 @@ int newcat_set_mem(RIG *rig, vfo_t vfo, int ch) /* Out of Range, or empty */ if (!mem_caps) { - return -RIG_ENAVAIL; + return -RIG_EINVAL; } /* set to usable vfo if needed */ @@ -7212,9 +7215,89 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) return RIG_OK; } } // end is_ftdx101 + else if (is_ft2000) + { + // We need details on the widths here, manuals lack information. + switch (mode) + { + case RIG_MODE_RTTY: + case RIG_MODE_RTTYR: + case RIG_MODE_CW: + case RIG_MODE_CWR: + // Narrow mode overrides DSP filter width on FT-2000 + newcat_set_narrow(rig, vfo, FALSE); + + if (width == RIG_PASSBAND_NORMAL) { w = 16; } + else if (width <= 100) { w = 4; } + else if (width <= 500) { w = 16; } + else { w = 31; } // 2400 + + break; + + case RIG_MODE_PKTUSB: + case RIG_MODE_PKTLSB: + case RIG_MODE_LSB: + case RIG_MODE_USB: + // Narrow mode overrides DSP filter width on FT-2000 + newcat_set_narrow(rig, vfo, FALSE); + + if (width == RIG_PASSBAND_NORMAL) { w = 16; } + else if (width <= 1800) { w = 8; } + else if (width <= 2400) { w = 16; } + else if (width <= 3000) { w = 25; } + else { w = 31; } // 4000 + + break; + + case RIG_MODE_AM: + case RIG_MODE_FM: + case RIG_MODE_PKTFM: + if (width < rig_passband_normal(rig, mode)) + { + err = newcat_set_narrow(rig, vfo, TRUE); + } + else + { + err = newcat_set_narrow(rig, vfo, FALSE); + } + + return err; + + case RIG_MODE_AMN: + case RIG_MODE_FMN: + return RIG_OK; + + default: + return -RIG_EINVAL; + } + + if ((err = set_roofing_filter_for_width(rig, vfo, width)) != RIG_OK) + { + return err; + } + + switch (mode) + { + case RIG_MODE_AM: + case RIG_MODE_AMN: + case RIG_MODE_FM: + case RIG_MODE_PKTFM: + case RIG_MODE_FMN: + if (width < rig_passband_normal(rig, mode)) + { + err = newcat_set_narrow(rig, vfo, TRUE); + } + else + { + err = newcat_set_narrow(rig, vfo, FALSE); + } + + return err; + } + } else { - // FT-450, FT-2000, FTDX 9000 + // FT-450, FTDX 9000 // We need details on the widths here, manuals lack information. switch (mode) { @@ -7224,7 +7307,8 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) case RIG_MODE_RTTYR: case RIG_MODE_CW: case RIG_MODE_CWR: - if (width <= 500) { w = 6; } + if (width == RIG_PASSBAND_NORMAL) { w = 16; } + else if (width <= 500) { w = 6; } else if (width <= 1800) { w = 16; } else { w = 24; } @@ -7232,7 +7316,8 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) case RIG_MODE_LSB: case RIG_MODE_USB: - if (width <= 1800) { w = 8; } + if (width == RIG_PASSBAND_NORMAL) { w = 16; } + else if (width <= 1800) { w = 8; } else if (width <= 2400) { w = 16; } else { w = 25; } // 3000 @@ -7466,6 +7551,7 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width) return err; } + // TODO: check if ft-2000 needs this fix too? if (is_ft950 || is_ftdx5000) { // Some Yaesu rigs cannot query SH in modes such as AM/FM @@ -8373,9 +8459,74 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width) rig_debug(RIG_DEBUG_TRACE, "%s: end if FTDX101D\n", __func__); } /* end if is_ftdx101 */ + else if (is_ft2000) + { + switch (mode) + { + case RIG_MODE_RTTY: + case RIG_MODE_RTTYR: + case RIG_MODE_CW: + case RIG_MODE_CWR: + if (w <= 4) + { + *width = 100; + } + else if (w <= 16) + { + *width = 500; + } + else + { + *width = 2400; + } + break; + + case RIG_MODE_PKTUSB: + case RIG_MODE_PKTLSB: + case RIG_MODE_LSB: + case RIG_MODE_USB: + if (w <= 8) + { + *width = 1800; + } + else if (w <= 16) + { + *width = 2400; + } + else if (w <= 25) + { + *width = 3000; + } + else + { + *width = 4000; + } + break; + + case RIG_MODE_AM: + *width = narrow ? 6000 : 9000; + break; + + case RIG_MODE_PKTFM: + case RIG_MODE_FM: + *width = narrow ? 9000 : 16000; + break; + + case RIG_MODE_FMN: + *width = 9000; + break; + + case RIG_MODE_AMN: + *width = 6000; + break; + + default: + return -RIG_EINVAL; + } /* end switch (mode) */ + } /* end if is_ft2000 */ else { - /* FT450, FT2000, FT9000 */ + /* FT450, FT9000 */ switch (mode) { case RIG_MODE_PKTUSB: @@ -8398,13 +8549,24 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width) { *width = rig_passband_normal(rig, mode); } - break; case RIG_MODE_AM: + *width = narrow ? 6000 : 9000; + break; + case RIG_MODE_PKTFM: case RIG_MODE_FM: - return RIG_OK; + *width = narrow ? 9000 : 16000; + break; + + case RIG_MODE_FMN: + *width = 9000; + break; + + case RIG_MODE_AMN: + *width = 6000; + break; default: return -RIG_EINVAL;