kopia lustrzana https://github.com/Hamlib/Hamlib
The TS-2000 has non standard LEVEL_STRENGTH and LEVEL_ATT.
This patch by Patrick Ouellette (and reworked by me) fixes it. git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2042 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.5
rodzic
96e66e3336
commit
7015dec13c
|
@ -2,7 +2,7 @@
|
|||
* Hamlib Kenwood backend - TS2000 description
|
||||
* Copyright (c) 2000-2004 by Stephane Fillod
|
||||
*
|
||||
* $Id: ts2000.c,v 1.18 2005-04-03 20:14:26 fillods Exp $
|
||||
* $Id: ts2000.c,v 1.19 2005-09-28 21:17:52 fillods 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
|
||||
|
@ -36,13 +36,16 @@
|
|||
|
||||
#define TS2000_FUNC_ALL (RIG_FUNC_TSQL)
|
||||
|
||||
#define TS2000_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_SQL|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN)
|
||||
#define TS2000_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_SQL|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN)
|
||||
|
||||
#define TS2000_MAINVFO (RIG_VFO_A|RIG_VFO_B)
|
||||
#define TS2000_SUBVFO (RIG_VFO_C)
|
||||
|
||||
#define TS2000_VFO_OP (RIG_OP_UP|RIG_OP_DOWN)
|
||||
|
||||
/* prototypes */
|
||||
static int ts2000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
|
||||
|
||||
/*
|
||||
* 103 available DCS codes
|
||||
*/
|
||||
|
@ -74,7 +77,7 @@ const struct rig_caps ts2000_caps = {
|
|||
.rig_model = RIG_MODEL_TS2000,
|
||||
.model_name = "TS-2000",
|
||||
.mfg_name = "Kenwood",
|
||||
.version = BACKEND_VER,
|
||||
.version = BACKEND_VER "0.1",
|
||||
.copyright = "LGPL",
|
||||
.status = RIG_STATUS_UNTESTED,
|
||||
.rig_type = RIG_TYPE_TRANSCEIVER,
|
||||
|
@ -231,7 +234,7 @@ const struct rig_caps ts2000_caps = {
|
|||
.set_func = kenwood_set_func,
|
||||
.get_func = kenwood_get_func,
|
||||
.set_level = kenwood_set_level,
|
||||
.get_level = kenwood_get_level,
|
||||
.get_level = ts2000_get_level,
|
||||
.send_morse = kenwood_send_morse,
|
||||
.vfo_op = kenwood_vfo_op,
|
||||
.set_mem = kenwood_set_mem,
|
||||
|
@ -249,3 +252,75 @@ const struct rig_caps ts2000_caps = {
|
|||
* Function definitions below
|
||||
*/
|
||||
|
||||
/*
|
||||
* ts2000_get_level
|
||||
* Assumes rig!=NULL, val!=NULL
|
||||
*/
|
||||
int ts2000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||
{
|
||||
unsigned char lvlbuf[50];
|
||||
int lvl_len, retval;
|
||||
int lvl;
|
||||
int i, ret, agclevel;
|
||||
|
||||
lvl_len = 50;
|
||||
switch (level) {
|
||||
case RIG_LEVEL_RAWSTR:
|
||||
case RIG_LEVEL_STRENGTH:
|
||||
retval = kenwood_transaction (rig, "SM0;", 4, lvlbuf, &lvl_len);
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (( (lvl_len !=8)) || lvlbuf[1] != 'M') {
|
||||
/* TS-2000 returns 8 bytes for S meter level */
|
||||
rig_debug(RIG_DEBUG_ERR,"%s: wrong answer len=%d\n",
|
||||
__FUNCTION__, lvl_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
/* Frontend expects: -54 = S0, 0 = S9 */
|
||||
sscanf(lvlbuf+3, "%d", &val->i); /* raw str */
|
||||
|
||||
/* TS-2000 main reciever returns values from 0 - 30 */
|
||||
/* so scale the value */
|
||||
if (level == RIG_LEVEL_STRENGTH)
|
||||
val->i = (val->i * 3.6) - 54;
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_ATT:
|
||||
retval = kenwood_transaction (rig, "RA;", 3, lvlbuf, &lvl_len);
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if ((lvl_len != 7)){ /*TS-2000 returns 7 chars for RA; */
|
||||
rig_debug(RIG_DEBUG_ERR,"%s: unexpected answer len=%d\n",
|
||||
__FUNCTION__, lvl_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
sscanf(lvlbuf+2, "%d", &lvl);
|
||||
if (lvl == 0) {
|
||||
val->i = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i=0; i<lvl && i<MAXDBLSTSIZ; i++) {
|
||||
if (rig->state.attenuator[i] == 0) {
|
||||
rig_debug(RIG_DEBUG_ERR,"%s: "
|
||||
"unexpected att level %d\n", __FUNCTION__, lvl);
|
||||
return -RIG_EPROTO;
|
||||
}
|
||||
}
|
||||
if (i != lvl)
|
||||
return -RIG_EINTERNAL;
|
||||
val->i = rig->state.attenuator[i-1];
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
/* fall back */
|
||||
return kenwood_get_level(rig, vfo, level, val);
|
||||
}
|
||||
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue