Merge pull request #457 from mikaelnousiainen/yaesu-ft2000-fixes

Yaesu FT-2000 + GS-232B fixes
pull/468/head
Michael Black 2020-12-06 08:18:54 -06:00 zatwierdzone przez GitHub
commit 2eb3a557d0
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 256 dodań i 57 usunięć

Wyświetl plik

@ -25,7 +25,6 @@
*
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@ -185,16 +184,23 @@ 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(2400)}, /* Wide CW, RTTY, PKT/USER */
{RIG_MODE_CW|RIG_MODE_CWR, Hz(500)}, /* Normal CW, RTTY, PKT/USER */
{RIG_MODE_CW|RIG_MODE_CWR, Hz(200)}, /* Narrow CW, RTTY, PKT/USER */
{RIG_MODE_CW|RIG_MODE_CWR, Hz(2400)}, /* Wide CW, RTTY, PKT/USER */
{RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(500)}, /* Normal RTTY */
{RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(300)}, /* Narrow RTTY */
{RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(2400)}, /* Wide RTTY */
{RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */
{RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */
{RIG_MODE_SSB, Hz(3000)}, /* 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 */
{RIG_MODE_SSB, Hz(4000)}, /* Wide SSB */
{FT2000_PKTSSB_RX_MODES, Hz(500)}, /* Normal PKTSSB */
{FT2000_PKTSSB_RX_MODES, Hz(200)}, /* Narrow PKTSSB */
{FT2000_PKTSSB_RX_MODES, Hz(2400)}, /* Wide PKTSSB */
{FT2000_AM_RX_MODES, Hz(9000)}, /* Normal AM */
{FT2000_AM_RX_MODES, Hz(6000)}, /* Narrow AM */
{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,48 @@
#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_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)
#define FT2000_AM_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN)
#define FT2000_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_FMN|RIG_MODE_PKTFM)
#define FT2000_PKTSSB_RX_MODES (RIG_MODE_PKTLSB|RIG_MODE_PKTUSB)
/* 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 */
#define FT2000_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY| \
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

@ -5404,7 +5404,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 */
@ -6639,7 +6639,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
case RIG_MODE_AM:
case RIG_MODE_FM:
case RIG_MODE_PKTFM:
if (width < rig_passband_normal(rig, mode))
if (width > 0 && width < rig_passband_normal(rig, mode))
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
@ -6731,7 +6731,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
case RIG_MODE_AM:
case RIG_MODE_FM:
case RIG_MODE_PKTFM:
if (width < rig_passband_normal(rig, mode))
if (width > 0 && width < rig_passband_normal(rig, mode))
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
@ -6872,7 +6872,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
return err;
case RIG_MODE_PKTFM:
if (width < rig_passband_normal(rig, mode))
if (width > 0 && width < rig_passband_normal(rig, mode))
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
@ -6989,7 +6989,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
case RIG_MODE_FM:
case RIG_MODE_PKTFM:
case RIG_MODE_FMN:
if (width < rig_passband_normal(rig, mode))
if (width > 0 && width < rig_passband_normal(rig, mode))
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
@ -7101,7 +7101,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
case RIG_MODE_FM:
case RIG_MODE_PKTFM:
case RIG_MODE_FMN:
if (width < rig_passband_normal(rig, mode))
if (width > 0 && width < rig_passband_normal(rig, mode))
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
@ -7196,7 +7196,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
case RIG_MODE_AM:
case RIG_MODE_FM:
case RIG_MODE_PKTFM:
if (width < rig_passband_normal(rig, mode))
if (width > 0 && width < rig_passband_normal(rig, mode))
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
@ -7212,9 +7212,101 @@ 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_CW:
case RIG_MODE_CWR:
// Narrow mode overrides DSP filter width on FT-2000
newcat_set_narrow(rig, vfo, FALSE);
// CW bandwidth is 2400 Hz at value 16
if (width == RIG_PASSBAND_NORMAL) { w = 16; }
else if (width <= 200) { w = 4; }
else if (width <= 500) { w = 6; }
else if (width <= 2400) { w = 16; }
else { w = 31; } // No effect?
break;
case RIG_MODE_PKTUSB:
case RIG_MODE_PKTLSB:
// Narrow mode overrides DSP filter width on FT-2000
newcat_set_narrow(rig, vfo, FALSE);
// Packet SSB bandwidth is 2400 Hz at value 31
if (width == RIG_PASSBAND_NORMAL) { w = 31; }
else if (width <= 200) { w = 8; }
else if (width <= 500) { w = 16; }
else { w = 31; } // 2400
break;
case RIG_MODE_RTTY:
case RIG_MODE_RTTYR:
// 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 <= 300) { w = 8; }
else if (width <= 500) { w = 16; }
else { w = 31; } // 2400
break;
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:
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 > 0 && 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 +7316,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 +7325,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
@ -7241,7 +7335,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
case RIG_MODE_AM:
case RIG_MODE_FM:
case RIG_MODE_PKTFM:
if (width < rig_passband_normal(rig, mode))
if (width > 0 && width < rig_passband_normal(rig, mode))
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
@ -7448,7 +7542,7 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width)
int err;
int w;
int sh_command_valid = 1;
char narrow = '!';
int narrow = 0;
char cmd[] = "SH";
char main_sub_vfo = '0';
@ -8373,9 +8467,111 @@ 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)
{
if ((narrow = get_narrow(rig, RIG_VFO_MAIN)) < 0)
{
return -RIG_EPROTO;
}
switch (mode)
{
case RIG_MODE_CW:
case RIG_MODE_CWR:
if (w <= 4)
{
*width = 200;
}
else if (w <= 6)
{
*width = 500;
}
else if (w <= 16)
{
*width = 2400;
}
else
{
*width = 3000;
}
break;
case RIG_MODE_PKTUSB:
case RIG_MODE_PKTLSB:
if (w <= 8)
{
*width = 200;
}
else if (w <= 16)
{
*width = 500;
}
else
{
*width = 2400;
}
break;
case RIG_MODE_RTTY:
case RIG_MODE_RTTYR:
if (w <= 8)
{
*width = 300;
}
else if (w <= 16)
{
*width = 500;
}
else
{
*width = 2400;
}
break;
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 +8594,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;

Wyświetl plik

@ -106,13 +106,12 @@ transaction_write:
retval = read_string(&rs->rotport, data, data_len, REPLY_EOM,
strlen(REPLY_EOM));
if (strncmp(data, "\r\n", 2) == 0
|| strchr(data, '>'))
if (strncmp(data, "\r\n", 2) == 0 || strchr(data, '>'))
{
rig_debug(RIG_DEBUG_ERR, "%s: wrong response nbytes=%d\n", __func__,
(int)strlen(data));
rig_debug(RIG_DEBUG_ERR, "%s: Invalid response for '%s': '%s' (length=%d)\n",
__func__, cmdstr, data, (int) strlen(data));
dump_hex((unsigned char *)data, strlen(data));
retval = -1; // force retry
retval = -RIG_EPROTO; // force retry
}
@ -253,13 +252,12 @@ gs232b_rot_get_position(ROT *rot, azimuth_t *az, elevation_t *el)
static int
gs232b_rot_stop(ROT *rot)
{
char buf[32];
int retval;
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
/* All Stop */
retval = gs232b_transaction(rot, "S" EOM, buf, sizeof(buf), 0);
retval = gs232b_transaction(rot, "S" EOM, NULL, 0, 0);
if (retval != RIG_OK)
{