kopia lustrzana https://github.com/Hamlib/Hamlib
Add support for FW filter width command on TS-480
rodzic
e4657a5d16
commit
08a7515e91
|
@ -1850,6 +1850,42 @@ static int kenwood_set_filter(RIG *rig, pbwidth_t width)
|
|||
RETURNFUNC(kenwood_transaction(rig, cmd, NULL, 0));
|
||||
}
|
||||
|
||||
static int kenwood_set_filter_width(RIG *rig, rmode_t mode, pbwidth_t width)
|
||||
{
|
||||
struct kenwood_priv_caps *caps = kenwood_caps(rig);
|
||||
struct kenwood_filter_width *selected_filter_width = NULL;
|
||||
char cmd[20];
|
||||
int i;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called, width=%ld\n", __func__, width);
|
||||
|
||||
if (caps->filter_width == NULL)
|
||||
{
|
||||
RETURNFUNC(-RIG_ENAVAIL);
|
||||
}
|
||||
|
||||
for (i = 0; caps->filter_width[i].value >= 0; i++)
|
||||
{
|
||||
if (caps->filter_width[i].modes & mode)
|
||||
{
|
||||
selected_filter_width = &caps->filter_width[i];
|
||||
if (caps->filter_width[i].width_hz >= width)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (selected_filter_width == NULL)
|
||||
{
|
||||
RETURNFUNC(-RIG_EINVAL);
|
||||
}
|
||||
|
||||
snprintf(cmd, sizeof(cmd), "FW%04d", selected_filter_width->value);
|
||||
|
||||
RETURNFUNC(kenwood_transaction(rig, cmd, NULL, 0));
|
||||
}
|
||||
|
||||
/*
|
||||
* kenwood_set_mode
|
||||
*/
|
||||
|
@ -1995,6 +2031,15 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
kenwood_set_filter(rig, width);
|
||||
/* non fatal */
|
||||
}
|
||||
else if (RIG_IS_TS480)
|
||||
{
|
||||
err = kenwood_set_filter_width(rig, mode, width);
|
||||
if (err != RIG_OK)
|
||||
{
|
||||
// Ignore errors as non-fatal
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: error setting filter width, error: %d\n", __func__, err);
|
||||
}
|
||||
}
|
||||
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
@ -2059,6 +2104,44 @@ static int kenwood_get_filter(RIG *rig, pbwidth_t *width)
|
|||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
static int kenwood_get_filter_width(RIG *rig, rmode_t mode, pbwidth_t *width)
|
||||
{
|
||||
struct kenwood_priv_caps *caps = kenwood_caps(rig);
|
||||
char ackbuf[20];
|
||||
int i;
|
||||
int retval;
|
||||
int filter_value;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
if (caps->filter_width == NULL)
|
||||
{
|
||||
RETURNFUNC(-RIG_ENAVAIL);
|
||||
}
|
||||
|
||||
retval = kenwood_safe_transaction(rig, "FW", ackbuf, sizeof(ackbuf), 6);
|
||||
if (retval != RIG_OK)
|
||||
{
|
||||
RETURNFUNC(retval);
|
||||
}
|
||||
|
||||
sscanf(ackbuf, "FW%d", &filter_value);
|
||||
|
||||
for (i = 0; caps->filter_width[i].value >= 0; i++)
|
||||
{
|
||||
if (caps->filter_width[i].modes & mode)
|
||||
{
|
||||
if (caps->filter_width[i].value == filter_value)
|
||||
{
|
||||
*width = caps->filter_width[i].width_hz;
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RETURNFUNC(-RIG_EINVAL);
|
||||
}
|
||||
|
||||
/*
|
||||
* kenwood_get_mode
|
||||
*/
|
||||
|
@ -2172,8 +2255,20 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
|||
}
|
||||
}
|
||||
|
||||
/* XXX ? */
|
||||
*width = rig_passband_normal(rig, *mode);
|
||||
if (RIG_IS_TS480)
|
||||
{
|
||||
retval = kenwood_get_filter_width(rig, *mode, width);
|
||||
if (retval != RIG_OK)
|
||||
{
|
||||
// Ignore errors as non-fatal
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: error getting filter width, error: %d\n", __func__, retval);
|
||||
*width = rig_passband_normal(rig, *mode);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*width = rig_passband_normal(rig, *mode);
|
||||
}
|
||||
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
|
|
@ -112,7 +112,7 @@ struct kenwood_filter_width
|
|||
{
|
||||
rmode_t modes;
|
||||
int value;
|
||||
int width_hz;
|
||||
pbwidth_t width_hz;
|
||||
};
|
||||
|
||||
struct kenwood_slope_filter
|
||||
|
@ -120,7 +120,7 @@ struct kenwood_slope_filter
|
|||
rmode_t modes;
|
||||
int data_mode_filter;
|
||||
int value;
|
||||
int frequency_hz;
|
||||
pbwidth_t frequency_hz;
|
||||
};
|
||||
|
||||
struct kenwood_priv_caps
|
||||
|
|
|
@ -975,7 +975,7 @@ static int ts480_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val)
|
|||
}
|
||||
|
||||
static struct kenwood_filter_width ts480_filter_width[] = {
|
||||
{ RIG_MODE_CW | RIG_MODE_CWR, 0, 50 },
|
||||
{ RIG_MODE_CW | RIG_MODE_CWR, 50, 50 },
|
||||
{ RIG_MODE_CW | RIG_MODE_CWR, 80, 80 },
|
||||
{ RIG_MODE_CW | RIG_MODE_CWR, 100, 100 },
|
||||
{ RIG_MODE_CW | RIG_MODE_CWR, 150, 150 },
|
||||
|
@ -991,14 +991,14 @@ static struct kenwood_filter_width ts480_filter_width[] = {
|
|||
{ RIG_MODE_RTTY | RIG_MODE_RTTYR, 1000, 1000 },
|
||||
{ RIG_MODE_RTTY | RIG_MODE_RTTYR, 1500, 1500 },
|
||||
{ RIG_MODE_SSB, 0, 2400 },
|
||||
{ RIG_MODE_SSB, 1, 2400 }, // NAR1?
|
||||
{ RIG_MODE_SSB, 2, 2400 }, // NAR2?
|
||||
{ RIG_MODE_FM, 0, 2400 },
|
||||
{ RIG_MODE_FM, 1, 2400 }, // NAR1?
|
||||
{ RIG_MODE_FM, 2, 2400 }, // NAR2?
|
||||
{ RIG_MODE_AM, 0, 2400 },
|
||||
{ RIG_MODE_AM, 1, 2400 }, // NAR1?
|
||||
{ RIG_MODE_AM, 2, 2400 }, // NAR2?
|
||||
{ RIG_MODE_SSB, 1, 1200 }, // TODO: NAR1?
|
||||
{ RIG_MODE_SSB, 2, 1800 }, // TODO: NAR2?
|
||||
{ RIG_MODE_FM, 0, 14000 },
|
||||
{ RIG_MODE_FM, 1, 7000 }, // TODO: NAR1?
|
||||
{ RIG_MODE_FM, 2, 10000 }, // TODO: NAR2?
|
||||
{ RIG_MODE_AM, 0, 9000 },
|
||||
{ RIG_MODE_AM, 1, 3000 }, // TODO: NAR1?
|
||||
{ RIG_MODE_AM, 2, 6000 }, // TODO: NAR2?
|
||||
{ RIG_MODE_NONE, -1, -1 },
|
||||
};
|
||||
|
||||
|
@ -1057,6 +1057,7 @@ static struct kenwood_slope_filter ts480_slope_filter_low[] = {
|
|||
static struct kenwood_priv_caps ts480_priv_caps =
|
||||
{
|
||||
.cmdtrm = EOM_KEN,
|
||||
.filter_width = ts480_filter_width,
|
||||
.slope_filter_high = ts480_slope_filter_high,
|
||||
.slope_filter_low = ts480_slope_filter_low,
|
||||
};
|
||||
|
@ -1108,7 +1109,7 @@ const struct rig_caps ts480_caps =
|
|||
.write_delay = 0,
|
||||
.post_write_delay = 0,
|
||||
.timeout = 200,
|
||||
.retry = 10,
|
||||
.retry = 3,
|
||||
.preamp = {12, RIG_DBLST_END,},
|
||||
.attenuator = {12, RIG_DBLST_END,},
|
||||
.max_rit = kHz(9.99),
|
||||
|
@ -1193,10 +1194,29 @@ const struct rig_caps ts480_caps =
|
|||
/* mode/filter list, remember: order matters! */
|
||||
.filters = {
|
||||
{RIG_MODE_SSB, kHz(2.4)},
|
||||
{RIG_MODE_CW, Hz(200)},
|
||||
{RIG_MODE_RTTY, Hz(500)},
|
||||
{RIG_MODE_SSB, kHz(1.2)},
|
||||
{RIG_MODE_SSB, kHz(1.8)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(200)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(50)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(1000)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(80)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(100)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(150)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(300)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(400)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(500)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(600)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, Hz(2000)},
|
||||
{RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)},
|
||||
{RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)},
|
||||
{RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1000)},
|
||||
{RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1500)},
|
||||
{RIG_MODE_AM, kHz(9)},
|
||||
{RIG_MODE_AM, kHz(3)},
|
||||
{RIG_MODE_AM, kHz(6)},
|
||||
{RIG_MODE_FM, kHz(14)},
|
||||
{RIG_MODE_FM, kHz(7)},
|
||||
{RIG_MODE_FM, kHz(10)},
|
||||
RIG_FLT_END,
|
||||
},
|
||||
.vfo_ops = TS480_VFO_OPS,
|
||||
|
|
Ładowanie…
Reference in New Issue