Fix ft991 mode/width settings

pull/252/head
Michael Black W9MDB 2020-05-09 15:52:49 -05:00
rodzic 1a4e61b2dd
commit 429ab72a16
4 zmienionych plików z 348 dodań i 20 usunięć

Wyświetl plik

@ -55,7 +55,7 @@ const struct rig_caps ft991_caps =
RIG_MODEL(RIG_MODEL_FT991),
.model_name = "FT-991",
.mfg_name = "Yaesu",
.version = NEWCAT_VER ".1",
.version = NEWCAT_VER ".0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -148,6 +148,7 @@ const struct rig_caps ft991_caps =
{FT991_CW_RTTY_PKT_RX_MODES, Hz(100)}, /* CW, RTTY, PKT */
{RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */
{RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */
{RIG_MODE_SSB, Hz(3200)}, /* Wide SSB */
{RIG_MODE_SSB, Hz(3000)}, /* Wide SSB */
{RIG_MODE_SSB, Hz(2900)}, /* SSB */
{RIG_MODE_SSB, Hz(2800)}, /* SSB */
@ -166,7 +167,7 @@ const struct rig_caps ft991_caps =
{RIG_MODE_SSB, Hz(400)}, /* SSB */
{RIG_MODE_SSB, Hz(200)}, /* SSB */
{RIG_MODE_AM, Hz(9000)}, /* Normal AM */
{RIG_MODE_AM, Hz(6000)}, /* Narrow AM */
{RIG_MODE_AMN, Hz(6000)}, /* Narrow AM */
{FT991_FM_RX_MODES, Hz(16000)}, /* Normal FM */
{FT991_FM_RX_MODES, Hz(9000)}, /* Narrow FM */

Wyświetl plik

@ -39,10 +39,10 @@
#define FT991_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|\
RIG_MODE_C4FM|RIG_MODE_FM)
RIG_MODE_C4FM|RIG_MODE_FM|RIG_MODE_AMN)
#define FT991_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 FT991_AM_RX_MODES (RIG_MODE_AM)
#define FT991_AM_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN)
#define FT991_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_C4FM)
#define FT991_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR)
#define FT991_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\
@ -51,7 +51,7 @@
/* TRX caps */
#define FT991_OTHER_TX_MODES (RIG_MODE_CW| RIG_MODE_USB| RIG_MODE_LSB | RIG_MODE_PKTUSB | RIG_MODE_PKTLSB ) /* 100 W class */
#define FT991_AM_TX_MODES (RIG_MODE_AM) /* set 25W max */
#define FT991_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_AMN) /* set 25W max */
#define FT991_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|RIG_LEVEL_STRENGTH|\
RIG_LEVEL_ALC|RIG_LEVEL_RAWSTR|RIG_LEVEL_SWR|\

Wyświetl plik

@ -4446,8 +4446,10 @@ int newcat_get_channel(RIG *rig, channel_t *chan, int read_only)
if (!read_only)
{
// Set rig to channel values
rig_debug(RIG_DEBUG_ERR, "%s: please contact hamlib mailing list to implement this\n", __func__);
rig_debug(RIG_DEBUG_ERR, "%s: need to know if rig updates when channel read or not\n", __func__);
rig_debug(RIG_DEBUG_ERR,
"%s: please contact hamlib mailing list to implement this\n", __func__);
rig_debug(RIG_DEBUG_ERR,
"%s: need to know if rig updates when channel read or not\n", __func__);
return -RIG_ENIMPL;
}
@ -5085,8 +5087,7 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
return -RIG_EINVAL;
} /* end switch(mode) */
} /* end if FT950 */
else if (newcat_is_rig(rig, RIG_MODEL_FT991)
|| newcat_is_rig(rig, RIG_MODEL_FT891))
else if (newcat_is_rig(rig, RIG_MODEL_FT891))
{
switch (mode)
{
@ -5207,6 +5208,189 @@ int newcat_set_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
return err;
default:
return -RIG_EINVAL;
} /* end switch(mode) */
} /* end if FT891 */
else if (newcat_is_rig(rig, RIG_MODEL_FT991))
{
switch (mode)
{
case RIG_MODE_PKTUSB:
case RIG_MODE_PKTLSB:
case RIG_MODE_RTTY:
case RIG_MODE_RTTYR:
case RIG_MODE_CW:
case RIG_MODE_CWR:
switch (width) // the defaults can be different for CW and RTTY (e.g. FT991) but I don't think it matters here
{
case 1700: snprintf(width_str, sizeof(width_str), "14"); narrow = '0';
break; /* normal */
case 500: snprintf(width_str, sizeof(width_str), "10"); narrow = '0';
break; /* narrow */
case 3000: snprintf(width_str, sizeof(width_str), "17"); narrow = '0';
break; /* wide */
case 2400: snprintf(width_str, sizeof(width_str), "16"); narrow = '0'; break;
case 2000: snprintf(width_str, sizeof(width_str), "15"); narrow = '0'; break;
case 1400: snprintf(width_str, sizeof(width_str), "13"); narrow = '0'; break;
case 1200: snprintf(width_str, sizeof(width_str), "12"); narrow = '0'; break;
case 800: snprintf(width_str, sizeof(width_str), "11"); narrow = '0'; break;
case 450: snprintf(width_str, sizeof(width_str), "09"); narrow = '1'; break;
case 400: snprintf(width_str, sizeof(width_str), "08"); narrow = '1'; break;
case 350: snprintf(width_str, sizeof(width_str), "07"); narrow = '1'; break;
case 300: snprintf(width_str, sizeof(width_str), "06"); narrow = '1'; break;
case 250: snprintf(width_str, sizeof(width_str), "05"); narrow = '1'; break;
case 200: snprintf(width_str, sizeof(width_str), "04"); narrow = '1'; break;
case 150: snprintf(width_str, sizeof(width_str), "03"); narrow = '1'; break;
case 100: snprintf(width_str, sizeof(width_str), "02"); narrow = '1'; break;
case 50: snprintf(width_str, sizeof(width_str), "01"); narrow = '1'; break;
default: return -RIG_EINVAL;
}
break;
case RIG_MODE_LSB:
case RIG_MODE_USB:
switch (width)
{
case 2400: snprintf(width_str, sizeof(width_str), "14"); narrow = '0';
break; /* normal */
case 1500: snprintf(width_str, sizeof(width_str), "07"); narrow = '0';
break; /* narrow */
case 3200: snprintf(width_str, sizeof(width_str), "21"); narrow = '0';
break; /* wide */
case 3000: snprintf(width_str, sizeof(width_str), "20"); narrow = '0'; break;
case 2900: snprintf(width_str, sizeof(width_str), "19"); narrow = '0'; break;
case 2800: snprintf(width_str, sizeof(width_str), "18"); narrow = '0'; break;
case 2700: snprintf(width_str, sizeof(width_str), "17"); narrow = '0'; break;
case 2600: snprintf(width_str, sizeof(width_str), "16"); narrow = '0'; break;
case 2500: snprintf(width_str, sizeof(width_str), "15"); narrow = '0'; break;
case 2250: snprintf(width_str, sizeof(width_str), "12"); narrow = '0'; break;
case 2100: snprintf(width_str, sizeof(width_str), "11"); narrow = '0'; break;
case 1950: snprintf(width_str, sizeof(width_str), "10"); narrow = '0'; break;
case 1800: snprintf(width_str, sizeof(width_str), "09"); narrow = '0'; break;
case 1650: snprintf(width_str, sizeof(width_str), "08"); narrow = '1'; break;
case 1350: snprintf(width_str, sizeof(width_str), "06"); narrow = '1'; break;
case 1100: snprintf(width_str, sizeof(width_str), "05"); narrow = '1'; break;
case 850: snprintf(width_str, sizeof(width_str), "04"); narrow = '1'; break;
case 600: snprintf(width_str, sizeof(width_str), "03"); narrow = '1'; break;
case 400: snprintf(width_str, sizeof(width_str), "02"); narrow = '1'; break;
case 200: snprintf(width_str, sizeof(width_str), "01"); narrow = '1'; break;
default: return -RIG_EINVAL;
}
break;
case RIG_MODE_AM: //Only 1 passband each for AM or AMN
if (width == 0 || width == 9000)
{
err = newcat_set_narrow(rig, vfo, FALSE);
}
return err;
break;
case RIG_MODE_AMN:
if (width == 0 || width == 6000)
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
return err;
break;
case RIG_MODE_FM: //Only 1 passband each for FM or FMN
if (width == 0 || width == 16000)
{
err = newcat_set_narrow(rig, vfo, FALSE);
}
return err;
break;
case RIG_MODE_FMN:
if (width == 0 || width == 9000)
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
return err;
break;
case RIG_MODE_C4FM:
if (width == 0 || width == 16000)
{
err = newcat_set_narrow(rig, vfo, TRUE);
}
else if (width == 9000)
{
err = newcat_set_narrow(rig, vfo, FALSE);
}
else
{
return -RIG_EINVAL;
}
return err;
break;
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;
default:
return -RIG_EINVAL;
} /* end switch(mode) */
@ -5693,8 +5877,143 @@ int newcat_get_rx_bandwidth(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t *width)
return -RIG_EINVAL;
} /* end switch(mode) */
} /* end if FT1200 */
else if (newcat_is_rig(rig, RIG_MODEL_FT991))
{
switch (mode)
{
case RIG_MODE_PKTUSB:
case RIG_MODE_PKTLSB:
case RIG_MODE_RTTY:
case RIG_MODE_RTTYR:
case RIG_MODE_CW:
case RIG_MODE_CWR:
switch (w)
{
case 0:
case 10: *width = 500; break; /* narrow */
case 16: *width = 2400; break; /* wide */
case 17: *width = 3000; break;
case 15: *width = 2000; break;
case 14: *width = 1700; break;
case 13: *width = 1400; break;
case 12: *width = 1200; break;
case 11: *width = 800; break;
case 9: *width = 450; break;
case 8: *width = 400; break;
case 7: *width = 350; break;
case 6: *width = 300; break;
case 5: *width = 250; break;
case 4: *width = 200; break;
case 3: *width = 150; break;
case 2: *width = 100; break;
case 1: *width = 50; break;
default: return -RIG_EINVAL;
}
break;
case RIG_MODE_LSB:
case RIG_MODE_USB:
switch (w)
{
case 0:
case 14: *width = 2400; break; /* normal */
case 9: *width = 1800; break; /* narrow */
case 21: *width = 3200; break;
case 20: *width = 3000; break;
case 19: *width = 2900; break;
case 18: *width = 2800; break;
case 17: *width = 2700; break;
case 16: *width = 2600; break;
case 15: *width = 2500; break;
case 13: *width = 2300; break;
case 12: *width = 2200; break;
case 11: *width = 2100; break;
case 10: *width = 1950; break;
case 8: *width = 1650; break;
case 7: *width = 1500; break;
case 6: *width = 1350; break;
case 5: *width = 1100; break;
case 4: *width = 850; break;
case 3: *width = 600; break;
case 2: *width = 400; break;
case 1: *width = 200; break;
default: return -RIG_EINVAL;
}
break;
case RIG_MODE_FM:
*width = 16000; break; /* wide */
case RIG_MODE_FMN:
*width = 9000; break; /* narrow */
case RIG_MODE_AM:
*width = 9000; break; /* wide */
case RIG_MODE_AMN:
*width = 6000; break; /* wide */
case RIG_MODE_C4FM:
case RIG_MODE_PKTFM:
switch (w)
{
case 0:
case 2: *width = 16000; break;
case 1: *width = 9000; break;
default: return -RIG_EINVAL;
}
break;
default:
return -RIG_EINVAL;
} /* end switch(mode) */
}
else /* end if FT950 */
else /* end if FT991 */
{
/* FT450, FT2000, FT5000, FT9000 */
switch (mode)
@ -6265,7 +6584,6 @@ rmode_t newcat_rmode_width(RIG *rig, vfo_t vfo, char mode, pbwidth_t *width)
{
ncboolean narrow;
int i;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (width != NULL)
@ -6279,18 +6597,27 @@ rmode_t newcat_rmode_width(RIG *rig, vfo_t vfo, char mode, pbwidth_t *width)
{
if (newcat_mode_conv[i].chk_width == TRUE && width != NULL)
{
if (newcat_get_narrow(rig, vfo, &narrow) != RIG_OK)
if (newcat_is_rig(rig, RIG_MODEL_FT991)
&& mode == 'E') // crude fix because 991 hangs on NA0; command while in C4FM
{
return (newcat_mode_conv[i].mode);
}
if (narrow == TRUE)
{
*width = rig_passband_narrow(rig, mode);
rig_debug(RIG_DEBUG_TRACE, "991A & C4FM Skip newcat_get_narrow in %s\n",
__func__);
}
else
{
*width = rig_passband_normal(rig, mode);
if (newcat_get_narrow(rig, vfo, &narrow) != RIG_OK)
{
return (newcat_mode_conv[i].mode);
}
if (narrow == TRUE)
{
*width = rig_passband_narrow(rig, mode);
}
else
{
*width = rig_passband_normal(rig, mode);
}
}
}

Wyświetl plik

@ -50,7 +50,7 @@
typedef char ncboolean;
/* shared function version */
#define NEWCAT_VER "20200506"
#define NEWCAT_VER "20200509"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129