Add missing levels and fix filters for Yaesu FT-2000

pull/457/head
Mikael Nousiainen 2020-12-05 23:11:12 +02:00
rodzic 1f7ad94438
commit e2ca90841c
3 zmienionych plików z 186 dodań i 35 usunięć

Wyświetl plik

@ -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,
},

Wyświetl plik

@ -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 */ \

Wyświetl plik

@ -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;