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));
|
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
|
* 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);
|
kenwood_set_filter(rig, width);
|
||||||
/* non fatal */
|
/* 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);
|
RETURNFUNC(RIG_OK);
|
||||||
}
|
}
|
||||||
|
@ -2059,6 +2104,44 @@ static int kenwood_get_filter(RIG *rig, pbwidth_t *width)
|
||||||
RETURNFUNC(RIG_OK);
|
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
|
* kenwood_get_mode
|
||||||
*/
|
*/
|
||||||
|
@ -2172,8 +2255,20 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX ? */
|
if (RIG_IS_TS480)
|
||||||
*width = rig_passband_normal(rig, *mode);
|
{
|
||||||
|
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);
|
RETURNFUNC(RIG_OK);
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,7 @@ struct kenwood_filter_width
|
||||||
{
|
{
|
||||||
rmode_t modes;
|
rmode_t modes;
|
||||||
int value;
|
int value;
|
||||||
int width_hz;
|
pbwidth_t width_hz;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kenwood_slope_filter
|
struct kenwood_slope_filter
|
||||||
|
@ -120,7 +120,7 @@ struct kenwood_slope_filter
|
||||||
rmode_t modes;
|
rmode_t modes;
|
||||||
int data_mode_filter;
|
int data_mode_filter;
|
||||||
int value;
|
int value;
|
||||||
int frequency_hz;
|
pbwidth_t frequency_hz;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kenwood_priv_caps
|
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[] = {
|
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, 80, 80 },
|
||||||
{ RIG_MODE_CW | RIG_MODE_CWR, 100, 100 },
|
{ RIG_MODE_CW | RIG_MODE_CWR, 100, 100 },
|
||||||
{ RIG_MODE_CW | RIG_MODE_CWR, 150, 150 },
|
{ 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, 1000, 1000 },
|
||||||
{ RIG_MODE_RTTY | RIG_MODE_RTTYR, 1500, 1500 },
|
{ RIG_MODE_RTTY | RIG_MODE_RTTYR, 1500, 1500 },
|
||||||
{ RIG_MODE_SSB, 0, 2400 },
|
{ RIG_MODE_SSB, 0, 2400 },
|
||||||
{ RIG_MODE_SSB, 1, 2400 }, // NAR1?
|
{ RIG_MODE_SSB, 1, 1200 }, // TODO: NAR1?
|
||||||
{ RIG_MODE_SSB, 2, 2400 }, // NAR2?
|
{ RIG_MODE_SSB, 2, 1800 }, // TODO: NAR2?
|
||||||
{ RIG_MODE_FM, 0, 2400 },
|
{ RIG_MODE_FM, 0, 14000 },
|
||||||
{ RIG_MODE_FM, 1, 2400 }, // NAR1?
|
{ RIG_MODE_FM, 1, 7000 }, // TODO: NAR1?
|
||||||
{ RIG_MODE_FM, 2, 2400 }, // NAR2?
|
{ RIG_MODE_FM, 2, 10000 }, // TODO: NAR2?
|
||||||
{ RIG_MODE_AM, 0, 2400 },
|
{ RIG_MODE_AM, 0, 9000 },
|
||||||
{ RIG_MODE_AM, 1, 2400 }, // NAR1?
|
{ RIG_MODE_AM, 1, 3000 }, // TODO: NAR1?
|
||||||
{ RIG_MODE_AM, 2, 2400 }, // NAR2?
|
{ RIG_MODE_AM, 2, 6000 }, // TODO: NAR2?
|
||||||
{ RIG_MODE_NONE, -1, -1 },
|
{ 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 =
|
static struct kenwood_priv_caps ts480_priv_caps =
|
||||||
{
|
{
|
||||||
.cmdtrm = EOM_KEN,
|
.cmdtrm = EOM_KEN,
|
||||||
|
.filter_width = ts480_filter_width,
|
||||||
.slope_filter_high = ts480_slope_filter_high,
|
.slope_filter_high = ts480_slope_filter_high,
|
||||||
.slope_filter_low = ts480_slope_filter_low,
|
.slope_filter_low = ts480_slope_filter_low,
|
||||||
};
|
};
|
||||||
|
@ -1108,7 +1109,7 @@ const struct rig_caps ts480_caps =
|
||||||
.write_delay = 0,
|
.write_delay = 0,
|
||||||
.post_write_delay = 0,
|
.post_write_delay = 0,
|
||||||
.timeout = 200,
|
.timeout = 200,
|
||||||
.retry = 10,
|
.retry = 3,
|
||||||
.preamp = {12, RIG_DBLST_END,},
|
.preamp = {12, RIG_DBLST_END,},
|
||||||
.attenuator = {12, RIG_DBLST_END,},
|
.attenuator = {12, RIG_DBLST_END,},
|
||||||
.max_rit = kHz(9.99),
|
.max_rit = kHz(9.99),
|
||||||
|
@ -1193,10 +1194,29 @@ const struct rig_caps ts480_caps =
|
||||||
/* mode/filter list, remember: order matters! */
|
/* mode/filter list, remember: order matters! */
|
||||||
.filters = {
|
.filters = {
|
||||||
{RIG_MODE_SSB, kHz(2.4)},
|
{RIG_MODE_SSB, kHz(2.4)},
|
||||||
{RIG_MODE_CW, Hz(200)},
|
{RIG_MODE_SSB, kHz(1.2)},
|
||||||
{RIG_MODE_RTTY, Hz(500)},
|
{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(9)},
|
||||||
|
{RIG_MODE_AM, kHz(3)},
|
||||||
|
{RIG_MODE_AM, kHz(6)},
|
||||||
{RIG_MODE_FM, kHz(14)},
|
{RIG_MODE_FM, kHz(14)},
|
||||||
|
{RIG_MODE_FM, kHz(7)},
|
||||||
|
{RIG_MODE_FM, kHz(10)},
|
||||||
RIG_FLT_END,
|
RIG_FLT_END,
|
||||||
},
|
},
|
||||||
.vfo_ops = TS480_VFO_OPS,
|
.vfo_ops = TS480_VFO_OPS,
|
||||||
|
|
Ładowanie…
Reference in New Issue