ts450,ts690,ts850: use FL command to get/set filters in get/set_mode. (code from ts850.c)

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2608 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.9
Alessandro Zummo, IZ1PRB 2009-02-02 20:30:36 +00:00
rodzic 0bb6d6310a
commit bad22ce8df
2 zmienionych plików z 88 dodań i 122 usunięć

Wyświetl plik

@ -3,7 +3,7 @@
* Copyright (c) 2000-2009 by Stephane Fillod
* Copyright (C) 2009 Alessandro Zummo <a.zummo@towertech.it>
*
* $Id: kenwood.c,v 1.103 2009-02-02 07:30:35 azummo Exp $
* $Id: kenwood.c,v 1.104 2009-02-02 20:30:36 azummo Exp $
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
@ -648,6 +648,24 @@ int kenwood_scan(RIG * rig, vfo_t vfo, scan_t scan, int ch)
scan == RIG_SCAN_STOP? "SC0;" : "SC1;");
}
static int kenwood_set_filter(RIG *rig, pbwidth_t width)
{
char *cmd;
if (width <= Hz(250))
cmd = "FL010009";
else if(width <= Hz(500))
cmd = "FL009009";
else if(width <= kHz(2.7))
cmd = "FL007007";
else if(width <= kHz(6))
cmd = "FL005005";
else
cmd = "FL002002";
return kenwood_simple_cmd(rig, cmd);
}
/*
* kenwood_set_mode
* Assumes rig!=NULL
@ -655,8 +673,9 @@ int kenwood_scan(RIG * rig, vfo_t vfo, scan_t scan, int ch)
int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
struct kenwood_priv_caps *caps = kenwood_caps(rig);
char mdbuf[6];
char buf[6];
char kmode;
int err;
kmode = rmode2kenwood(mode, caps->mode_table);
if (kmode < 0 ) {
@ -665,8 +684,62 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
return -RIG_EINVAL;
}
sprintf(mdbuf, "MD%c;", '0' + kmode);
return kenwood_simple_cmd(rig, mdbuf);
sprintf(buf, "MD%c;", '0' + kmode);
err = kenwood_simple_cmd(rig, buf);
if (err != RIG_OK)
return err;
if (rig->caps->rig_model == RIG_MODEL_TS450S
|| rig->caps->rig_model == RIG_MODEL_TS690S
|| rig->caps->rig_model == RIG_MODEL_TS850) {
err = kenwood_set_filter(rig, width);
/* non fatal */
}
return RIG_OK;
}
static int kenwood_get_filter(RIG *rig, pbwidth_t *width)
{
int err, f, f1, f2;
char buf[10];
err = kenwood_safe_transaction(rig, "FL;", buf, sizeof(buf), 9);
if (err != RIG_OK)
return err;
buf[8] = '\0';
f2 = atoi(&buf[5]);
buf[5] = '\0';
f1 = atoi(&buf[2]);
if (f2 > f1)
f = f2;
else
f = f1;
switch (f) {
case 2:
*width = kHz(12);
break;
case 3:
case 5:
*width = kHz(6);
break;
case 7:
*width = kHz(2.7);
break;
case 9:
*width = Hz(500);
break;
case 10:
*width = Hz(250);
break;
}
return RIG_OK;
}
/*
@ -704,9 +777,16 @@ int kenwood_get_mode_if(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
*mode = kenwood2rmode(priv->info[29] - '0', caps->mode_table);
/* XXX */
*width = rig_passband_normal(rig, *mode);
if (rig->caps->rig_model == RIG_MODEL_TS450S
|| rig->caps->rig_model == RIG_MODEL_TS690S
|| rig->caps->rig_model == RIG_MODEL_TS850) {
err = kenwood_get_filter(rig, width);
/* non fatal */
}
return RIG_OK;
}

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib Kenwood backend - TS850 description
* Copyright (c) 2000-2004 by Stephane Fillod
*
* $Id: ts850.c,v 1.27 2009-01-28 23:30:59 azummo Exp $
* $Id: ts850.c,v 1.28 2009-02-02 20:30:36 azummo Exp $
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
@ -71,8 +71,6 @@ static struct kenwood_priv_caps ts850_priv_caps = {
/* forward definitions */
static int ts850_set_rit(RIG * rig, vfo_t vfo, shortfreq_t rit);
static int ts850_set_xit(RIG * rig, vfo_t vfo, shortfreq_t rit);
static int ts850_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
static int ts850_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
static int ts850_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone);
static int ts850_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
static int ts850_set_channel (RIG * rig, const channel_t * chan);
@ -205,8 +203,8 @@ const struct rig_caps ts850_caps = {
.get_rit = kenwood_get_rit,
.set_xit = ts850_set_xit,
.get_xit = kenwood_get_xit,
.set_mode = ts850_set_mode,
.get_mode = ts850_get_mode,
.set_mode = kenwood_set_mode,
.get_mode = kenwood_get_mode_if,
.set_vfo = kenwood_set_vfo,
.get_vfo = kenwood_get_vfo_if,
.set_split_vfo = kenwood_set_split_vfo,
@ -290,79 +288,6 @@ int ts850_set_xit(RIG * rig, vfo_t vfo, shortfreq_t xit)
return RIG_OK;
}
int ts850_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
char infobuf[50];
size_t info_len;
int f,f1,f2,retval;
info_len = 50;
retval = kenwood_transaction (rig, "IF;", 3, infobuf, &info_len)
;
if (retval != RIG_OK)
return retval;
if (info_len != 38 || infobuf[1] != 'F') {
rig_debug(RIG_DEBUG_ERR,"ts850_get_mode: wrong answer len=%d\n", info_len);
return -RIG_ERJCTED;
}
switch (infobuf[29]) {
case MD_CW: *mode = RIG_MODE_CW; break;
case MD_CWR: *mode = RIG_MODE_CWR; break;
case MD_USB: *mode = RIG_MODE_USB; break;
case MD_LSB: *mode = RIG_MODE_LSB; break;
case MD_FM: *mode = RIG_MODE_FM; break;
case MD_AM: *mode = RIG_MODE_AM; break;
case MD_FSK: *mode = RIG_MODE_RTTY; break;
case MD_FSKR: *mode = RIG_MODE_RTTYR; break;
case MD_NONE: *mode = RIG_MODE_NONE; break;
default:
rig_debug(RIG_DEBUG_ERR,"ts850_get_mode: unsupported mode '%c'\n", infobuf[29]);
return -RIG_EINVAL;
}
info_len = 50;
retval = kenwood_transaction (rig, "FL;", 3, infobuf, &info_len)
;
if (retval != RIG_OK)
return retval;
if (info_len != 9 || infobuf[1] != 'L') {
rig_debug(RIG_DEBUG_ERR,"ts850_get_mode: wrong answer len=%d\n", info_len);
return -RIG_ERJCTED;
}
infobuf[8]='\0';
f2=atoi(&infobuf[5]);
infobuf[5]='\0';
f1=atoi(&infobuf[2]);
if(f2>f1) f=f2;
else f=f1;
switch(f) {
case 2:
*width=kHz(12);
break;
case 3:
case 5:
*width=kHz(6);
break;
case 7:
*width=kHz(2.7);
break;
case 9:
*width=Hz(500);
break;
case 10:
*width=Hz(250);
break;
}
return RIG_OK;
}
static char mode_to_char(rmode_t mode)
{
switch (mode) {
@ -380,45 +305,6 @@ static char mode_to_char(rmode_t mode)
return(RIG_MODE_NONE);
}
int ts850_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
char mdbuf[16],ackbuf[16];
int mdbuf_len, kmode, retval;
size_t ack_len;
kmode=mode_to_char(mode);
if(kmode==RIG_MODE_NONE) {
rig_debug(RIG_DEBUG_ERR,"ts850_set_mode: " "unsupported mode %d\n", mode);
return -RIG_EINVAL;
}
mdbuf_len = sprintf(mdbuf, "MD%c;", kmode);
ack_len = 0;
retval = kenwood_transaction (rig, mdbuf, mdbuf_len, ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
ack_len = 0;
if(width <= Hz(250))
mdbuf_len = sprintf(mdbuf, "FL010009;");
else
if(width <= Hz(500))
mdbuf_len = sprintf(mdbuf, "FL009009;");
else
if(width <= kHz(2.7))
mdbuf_len = sprintf(mdbuf, "FL007007;");
else
if(width <= kHz(6))
mdbuf_len = sprintf(mdbuf, "FL005005;");
else
mdbuf_len = sprintf(mdbuf, "FL002002;");
retval = kenwood_transaction (rig, mdbuf, mdbuf_len, ackbuf, &ack_len);
return retval;
}
int ts850_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone)
{
const struct rig_caps *caps;