kopia lustrzana https://github.com/Hamlib/Hamlib
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-79ac388436b8Hamlib-1.2.9
rodzic
0bb6d6310a
commit
bad22ce8df
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
120
kenwood/ts850.c
120
kenwood/ts850.c
|
@ -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;
|
||||
|
|
Ładowanie…
Reference in New Issue