Patch from Mark J. Fine, Part III:

- Added ability in JRCs to get AGC, BEEP and POWER status.
- First-cuts at the Drake R8A and Drake R8B.


git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1748 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.2
Stéphane Fillod, F8CFE 2004-06-04 21:48:05 +00:00
rodzic 97b2291e73
commit 2354575993
8 zmienionych plików z 506 dodań i 52 usunięć

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib Drake backend - main file
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: drake.c,v 1.8 2004-03-10 23:33:48 fillods Exp $
* $Id: drake.c,v 1.9 2004-06-04 21:48:05 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
@ -122,13 +122,47 @@ int drake_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
* 10Hz resolution
* TODO: round nearest?
*/
freq_len = sprintf(freqbuf,"F%07d", (unsigned int)freq/10);
freq_len = sprintf(freqbuf,"F%07d" EOM, (unsigned int)freq/10);
retval = drake_transaction(rig, freqbuf, freq_len, ackbuf, &ack_len);
return retval;
}
/*
* drake_get_freq
* Assumes rig!=NULL, freq!=NULL
*/
int drake_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
int freq_len, retval;
char freqbuf[BUFSZ];
double f;
char fmult;
retval = drake_transaction (rig, "RF" EOM, 3, freqbuf, &freq_len);
if (retval != RIG_OK)
return retval;
/* RA command returns *fffff.ff*mHz<CR> */
if (freq_len != 15) {
rig_debug(RIG_DEBUG_ERR,"drake_get_freq: wrong answer %s, "
"len=%d\n", freqbuf, freq_len);
return -RIG_ERJCTED;
}
fmult = freqbuf[10];
freqbuf[9] = '\0';
/* extract freq */
sscanf(freqbuf+1, "%lf", &f);
f *= 1000.0;
if (fmult=='M'||fmult=='m')
f *= 1000.0;
*freq = (freq_t)f;
return RIG_OK;
}
/*
* drake_set_vfo
* Assumes rig!=NULL
@ -156,6 +190,56 @@ int drake_set_vfo(RIG *rig, vfo_t vfo)
}
/*
* drake_get_vfo
* Assumes rig!=NULL
*/
int drake_get_vfo(RIG *rig, vfo_t *vfo)
{
int mdbuf_len, retval;
char mdbuf[BUFSZ];
char cvfo;
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
if (retval != RIG_OK)
return retval;
if (mdbuf_len != 8) {
rig_debug(RIG_DEBUG_ERR,"drake_get_vfo: wrong answer %s, "
"len=%d\n", mdbuf, mdbuf_len);
return -RIG_ERJCTED;
}
cvfo = mdbuf[5];
switch(cvfo){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7': *vfo = RIG_VFO_B; break;
case '8':
case '9':
case ':':
case ';':
case '<':
case '=':
case '>':
case '?': *vfo = RIG_VFO_A; break;
default :
rig_debug(RIG_DEBUG_ERR,
"drake_get_vfo: unsupported vfo %c\n",
cvfo);
*vfo = RIG_VFO_VFO;
return -RIG_EINVAL;
}
return RIG_OK;
}
/*
* drake_set_mode
* Assumes rig!=NULL
@ -215,6 +299,97 @@ int drake_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
}
/*
* drake_get_mode
* Assumes rig!=NULL
*/
int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
int mdbuf_len, retval;
char mdbuf[BUFSZ];
char cmode;
char cwidth;
char csynch;
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
if (retval != RIG_OK)
return retval;
if (mdbuf_len != 8) {
rig_debug(RIG_DEBUG_ERR,"drake_get_mode: wrong answer %s, "
"len=%d\n", mdbuf, mdbuf_len);
return -RIG_ERJCTED;
}
cmode = mdbuf[3];
cwidth = mdbuf[4];
csynch = mdbuf[5];
switch(cwidth){
case '0':
case '8': *width = s_Hz(500); break;
case '1':
case '9': *width = s_Hz(1800); break;
case '2':
case ':': *width = s_Hz(2300); break;
case '3':
case ';': *width = s_Hz(4000); break;
case '4':
case '<': *width = s_Hz(6000); break;
default :
rig_debug(RIG_DEBUG_ERR,
"drake_get_mode: unsupported width %c\n",
cwidth);
*width = RIG_PASSBAND_NORMAL;
return -RIG_EINVAL;
}
if (cwidth=='0'||cwidth=='1'||cwidth=='2'||cwidth=='3'||cwidth=='4'){
switch(cmode){
case '0':
case '4':
case '8': *mode = RIG_MODE_LSB; break;
case '1':
case '5':
case '9': *mode = RIG_MODE_RTTY; break;
case '2':
case '6':
case ':': *mode = RIG_MODE_FM; *width = s_Hz(12000); break;
default :
rig_debug(RIG_DEBUG_ERR,
"drake_get_mode: unsupported mode %c\n",
cmode);
*mode = RIG_MODE_NONE;
return -RIG_EINVAL;
}
} else {
switch(cmode){
case '0':
case '4':
case '8': *mode = RIG_MODE_USB; break;
case '1':
case '5':
case '9': *mode = RIG_MODE_CW; break;
case '2':
case '6':
case ':': *mode = RIG_MODE_AM; break;
default :
rig_debug(RIG_DEBUG_ERR,
"drake_get_mode: unsupported mode %c\n",
cmode);
*mode = RIG_MODE_NONE;
return -RIG_EINVAL;
}
}
/*FIXME USB/LSB synch in R8B*/
if (csynch=='4'||csynch=='5'||csynch=='6'||csynch=='7'||
csynch=='<'||csynch=='='||csynch=='>'||csynch=='?')
*mode = RIG_MODE_AMS;
return RIG_OK;
}
/*
* drake_set_ant
* Assumes rig!=NULL
@ -224,13 +399,56 @@ int drake_set_ant(RIG *rig, vfo_t vfo, ant_t ant)
unsigned char buf[16], ackbuf[16];
int len, ack_len, retval;
len = sprintf(buf,"A%c"EOM, ant==RIG_ANT_1?'1':(ant==RIG_ANT_2?'2':'C'));
len = sprintf(buf,"A%c" EOM, ant==RIG_ANT_1?'1':(ant==RIG_ANT_2?'2':'C'));
retval = drake_transaction(rig, buf, len, ackbuf, &ack_len);
return retval;
}
/*
* drake_get_ant
* Assumes rig!=NULL
*/
int drake_get_ant(RIG *rig, vfo_t vfo, ant_t *ant)
{
int mdbuf_len, retval;
char mdbuf[BUFSZ];
char cant;
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
if (retval != RIG_OK)
return retval;
if (mdbuf_len != 8) {
rig_debug(RIG_DEBUG_ERR,"drake_get_ant: wrong answer %s, "
"len=%d\n", mdbuf, mdbuf_len);
return -RIG_ERJCTED;
}
cant = mdbuf[3];
switch(cant){
case '0':
case '1':
case '2': *ant = RIG_ANT_1; break;
case '4':
case '5':
case '6': *ant = RIG_ANT_3; break;
case '8':
case '9':
case ':': *ant = RIG_ANT_2; break;
default :
rig_debug(RIG_DEBUG_ERR,
"drake_get_ant: unsupported antenna %c\n",
cant);
*ant = RIG_ANT_NONE;
return -RIG_EINVAL;
}
return RIG_OK;
}
/*
* drake_set_mem
* Assumes rig!=NULL
@ -244,6 +462,35 @@ int drake_set_mem(RIG *rig, vfo_t vfo, int ch)
return RIG_OK;
}
/*
* drake_get_mem
* Assumes rig!=NULL
*/
int drake_get_mem(RIG *rig, vfo_t vfo, int *ch)
{
int mdbuf_len, retval;
char mdbuf[BUFSZ];
int chan;
retval = drake_transaction (rig, "RC" EOM, 3, mdbuf, &mdbuf_len);
if (retval != RIG_OK)
return retval;
if (mdbuf_len != 6) {
rig_debug(RIG_DEBUG_ERR,"drake_get_mem: wrong answer %s, "
"len=%d\n", mdbuf, mdbuf_len);
return -RIG_ERJCTED;
}
mdbuf[4] = '\0';
/* extract channel no */
sscanf(mdbuf+1, "%03d", &chan);
*ch = chan;
return RIG_OK;
}
/*
* drake_vfo_op
* Assumes rig!=NULL
@ -262,16 +509,16 @@ int drake_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
len = sprintf(buf,"D");
break;
case RIG_OP_CPY:
len = sprintf(buf,"A E B"EOM);
len = sprintf(buf,"A E B" EOM);
break;
case RIG_OP_TO_VFO:
len = sprintf(buf,"C%03d", priv->curr_ch);
len = sprintf(buf,"C%03d" EOM, priv->curr_ch);
break;
case RIG_OP_MCL:
len = sprintf(buf,"EC%03d"EOM, priv->curr_ch);
len = sprintf(buf,"EC%03d" EOM, priv->curr_ch);
break;
case RIG_OP_FROM_VFO:
len = sprintf(buf,"PR"EOM"%03d"EOM, priv->curr_ch);
len = sprintf(buf,"PR" EOM "%03d" EOM, priv->curr_ch);
break;
default:
return -RIG_EINVAL;
@ -293,14 +540,14 @@ int drake_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
switch(func) {
case RIG_FUNC_MN:
len = sprintf(buf,"N%c"EOM, status?'O':'F');
len = sprintf(buf,"N%c" EOM, status?'O':'F');
break;
case RIG_FUNC_LOCK:
len = sprintf(buf,"L%c"EOM, status?'O':'F');
len = sprintf(buf,"L%c" EOM, status?'O':'F');
break;
case RIG_FUNC_NB:
/* TODO: NB narrow */
len = sprintf(buf,"B%c"EOM, status?'W':'F');
len = sprintf(buf,"B%c" EOM, status?'W':'F');
break;
default:
return -RIG_EINVAL;
@ -311,6 +558,44 @@ int drake_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
return retval;
}
/*
* drake_get_func
* Assumes rig!=NULL
*/
int drake_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
{
int mdbuf_len, retval;
char mdbuf[BUFSZ];
char mc;
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
if (retval != RIG_OK)
return retval;
if (mdbuf_len != 8) {
rig_debug(RIG_DEBUG_ERR,"drake_get_func: wrong answer %s, "
"len=%d\n", mdbuf, mdbuf_len);
return -RIG_ERJCTED;
}
switch(func) {
case RIG_FUNC_MN:
mc = mdbuf[2];
*status = (mc=='2'||mc=='3'||mc=='6'||mc=='7'||mc==':'||mc==';'||mc=='>'||mc=='?');
break;
case RIG_FUNC_NB:
/* TODO: NB narrow */
mc = mdbuf[1];
*status = ((mc!='0')&&(mc!='1')&&(mc!='2')&&(mc!='3'));
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get func %d\n",func);
return -RIG_EINVAL;
}
return RIG_OK;
}
/*
* drake_set_level
* Assumes rig!=NULL
@ -322,13 +607,13 @@ int drake_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
switch(level) {
case RIG_LEVEL_PREAMP:
len = sprintf(buf,"G%c"EOM, val.i?'+':'0');
len = sprintf(buf,"G%c" EOM, val.i?'+':'0');
break;
case RIG_LEVEL_ATT:
len = sprintf(buf,"G%c"EOM, val.i?'-':'0');
len = sprintf(buf,"G%c" EOM, val.i?'-':'0');
break;
case RIG_LEVEL_AGC:
len = sprintf(buf,"A%c"EOM,
len = sprintf(buf,"A%c" EOM,
val.i==RIG_AGC_OFF?'O':
(val.i==RIG_AGC_FAST?'F':'S'));
break;
@ -341,18 +626,109 @@ int drake_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
return retval;
}
/*
* drake_get_level
* Assumes rig!=NULL
*/
int drake_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
int lvl_len, retval;
char lvlbuf[BUFSZ];
char mc;
if (level != RIG_LEVEL_RAWSTR) {
retval = drake_transaction (rig, "RM" EOM, 3, lvlbuf, &lvl_len);
if (retval != RIG_OK)
return retval;
if (lvl_len != 8) {
rig_debug(RIG_DEBUG_ERR,"drake_get_level: wrong answer %s, "
"len=%d\n", lvlbuf, lvl_len);
return -RIG_ERJCTED;
}
}
switch(level) {
case RIG_LEVEL_RAWSTR:
retval = drake_transaction (rig, "RSS" EOM, 4, lvlbuf, &lvl_len);
if (retval != RIG_OK)
return retval;
if (lvl_len != 5) {
rig_debug(RIG_DEBUG_ERR,"drake_get_level: wrong answer"
"len=%d\n", lvl_len);
return -RIG_ERJCTED;
}
lvlbuf[3] = '\0';
val->i = strtol(lvlbuf+1, (char **)NULL, 16);
break;
case RIG_LEVEL_PREAMP:
mc = lvlbuf[2];
if (mc=='8'||mc=='9'||mc==':'||mc==';')
val->i = 10;
else
val->i = 0;
break;
case RIG_LEVEL_ATT:
mc = lvlbuf[2];
if (mc=='4'||mc=='5'||mc=='6'||mc=='7')
val->i = 10;
else
val->i = 0;
break;
case RIG_LEVEL_AGC:
mc = lvlbuf[1];
switch(mc){
case '0':
case '4':
case '8':
case '<': val->i = RIG_AGC_OFF; break;
case '2':
case '6':
case ':':
case '>': val->i = RIG_AGC_FAST; break;
case '3':
case '7':
case ';':
case '?': val->i = RIG_AGC_SLOW; break;
default : val->i = RIG_AGC_FAST;
}
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d\n",level);
return -RIG_EINVAL;
}
return RIG_OK;
}
int drake_set_powerstat (RIG * rig, powerstat_t status)
{
unsigned char buf[16], ackbuf[16];
int len, ack_len, retval;
len = sprintf(buf,"P%c"EOM, status==RIG_POWER_OFF?'F':'O');
len = sprintf(buf,"P%c" EOM, status==RIG_POWER_OFF?'F':'O');
retval = drake_transaction(rig, buf, len, ackbuf, &ack_len);
return retval;
}
int drake_get_powerstat (RIG * rig, powerstat_t *status)
{
int mdlen, retval;
char mdbuf[BUFSZ];
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdlen);
if (retval != RIG_OK)
return retval;
*status = (mdlen == 8);
return RIG_OK;
}
/*
@ -373,6 +749,7 @@ const char *drake_get_info(RIG *rig)
return idbuf;
}
/*
* initrigs_drake is called by rig_backend_load
*/
@ -441,4 +818,3 @@ DECLARE_PROBERIG_BACKEND(drake)
return RIG_MODEL_NONE;
}

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib Drake backend - main header
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: drake.h,v 1.5 2004-03-10 23:33:48 fillods Exp $
* $Id: drake.h,v 1.6 2004-06-04 21:48:05 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
@ -30,16 +30,24 @@ struct drake_priv_data {
};
int drake_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
int drake_get_freq(RIG *rig, vfo_t vfo, freq_t *freq);
int drake_set_vfo(RIG *rig, vfo_t vfo);
int drake_get_vfo(RIG *rig, vfo_t *vfo);
int drake_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
int drake_init(RIG *rig);
int drake_cleanup(RIG *rig);
int drake_set_ant(RIG *rig, vfo_t vfo, ant_t ant);
int drake_get_ant(RIG *rig, vfo_t vfo, ant_t *ant);
int drake_set_mem(RIG *rig, vfo_t vfo, int ch);
int drake_get_mem(RIG *rig, vfo_t vfo, int *ch);
int drake_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
int drake_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
int drake_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
int drake_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int drake_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
int drake_set_powerstat (RIG * rig, powerstat_t status);
int drake_get_powerstat (RIG * rig, powerstat_t *status);
const char *drake_get_info(RIG *rig);
extern const struct rig_caps r8a_caps;

Wyświetl plik

@ -1,8 +1,8 @@
/*
* Hamlib Drake backend - R-8A description
* Copyright (c) 2001-2003 by Stephane Fillod
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: r8a.c,v 1.1 2004-03-10 23:32:01 fillods Exp $
* $Id: r8a.c,v 1.2 2004-06-04 21:48:05 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
@ -34,9 +34,9 @@
#define R8A_FUNC (RIG_FUNC_MN|RIG_FUNC_LOCK|RIG_FUNC_NB)
#define R8A_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC)
#define R8A_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR)
#define R8A_PARM_ALL (RIG_PARM_NONE)
#define R8A_PARM_ALL (RIG_PARM_TIME)
#define R8A_VFO (RIG_VFO_A|RIG_VFO_B)
@ -55,9 +55,9 @@ const struct rig_caps r8a_caps = {
.rig_model = RIG_MODEL_DKR8A,
.model_name = "R-8A",
.mfg_name = "Drake",
.version = "0.2",
.version = "0.3",
.copyright = "LGPL",
.status = RIG_STATUS_UNTESTED, /* and only basic support */
.status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
@ -95,7 +95,7 @@ const struct rig_caps r8a_caps = {
.vfo_ops = R8A_VFO_OPS,
.chan_list = {
{ 0, 999, RIG_MTYPE_MEM },
{ 0, 439, RIG_MTYPE_MEM },
RIG_CHAN_END
},
@ -133,16 +133,22 @@ const struct rig_caps r8a_caps = {
.rig_cleanup = drake_cleanup,
.set_freq = drake_set_freq,
.get_freq = drake_get_freq,
.set_vfo = drake_set_vfo,
.get_vfo = drake_get_vfo,
.set_mode = drake_set_mode,
.set_ant = drake_set_ant,
.set_mem = drake_set_mem,
.vfo_op = drake_vfo_op,
.get_mode = drake_get_mode,
.set_func = drake_set_func,
.get_func = drake_get_func,
.set_level = drake_set_level,
.get_level = drake_get_level,
.set_ant = drake_set_ant,
.get_ant = drake_get_ant,
.set_mem = drake_set_mem,
.get_mem = drake_get_mem,
.vfo_op = drake_vfo_op,
.set_powerstat = drake_set_powerstat,
.get_powerstat = drake_get_powerstat,
.get_info = drake_get_info,
};

Wyświetl plik

@ -1,8 +1,8 @@
/*
* Hamlib Drake backend - R-8B description
* Copyright (c) 2001-2003 by Stephane Fillod
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: r8b.c,v 1.5 2004-03-10 23:33:48 fillods Exp $
* $Id: r8b.c,v 1.6 2004-06-04 21:48:05 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
@ -34,9 +34,9 @@
#define R8B_FUNC (RIG_FUNC_MN|RIG_FUNC_LOCK|RIG_FUNC_NB)
#define R8B_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC)
#define R8B_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR)
#define R8B_PARM_ALL (RIG_PARM_NONE)
#define R8B_PARM_ALL (RIG_PARM_TIME)
#define R8B_VFO (RIG_VFO_A|RIG_VFO_B)
@ -56,9 +56,9 @@ const struct rig_caps r8b_caps = {
.rig_model = RIG_MODEL_DKR8B,
.model_name = "R-8B",
.mfg_name = "Drake",
.version = "0.2",
.version = "0.3",
.copyright = "LGPL",
.status = RIG_STATUS_UNTESTED, /* and only basic support */
.status = RIG_STATUS_UNTESTED,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
@ -134,15 +134,22 @@ const struct rig_caps r8b_caps = {
.rig_cleanup = drake_cleanup,
.set_freq = drake_set_freq,
.get_freq = drake_get_freq,
.set_vfo = drake_set_vfo,
.get_vfo = drake_get_vfo,
.set_mode = drake_set_mode,
.set_mem = drake_set_mem,
.vfo_op = drake_vfo_op,
.get_mode = drake_get_mode,
.set_func = drake_set_func,
.get_func = drake_get_func,
.set_level = drake_set_level,
.get_level = drake_get_level,
.set_ant = drake_set_ant,
.get_ant = drake_get_ant,
.set_mem = drake_set_mem,
.get_mem = drake_get_mem,
.vfo_op = drake_vfo_op,
.set_powerstat = drake_set_powerstat,
.get_powerstat = drake_get_powerstat,
.get_info = drake_get_info,
};

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib JRC backend - main file
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: jrc.c,v 1.12 2004-05-19 08:57:45 fillods Exp $
* $Id: jrc.c,v 1.13 2004-06-04 21:48:03 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
@ -535,13 +535,11 @@ int jrc_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return -RIG_ENIMPL; /* get_dcd ? */
case RIG_LEVEL_ATT:
//retval = jrc_transaction (rig, "A" EOM, 2, lvlbuf, &lvl_len);
retval = jrc_transaction (rig, "I" EOM, 2, lvlbuf, &lvl_len);
if (retval != RIG_OK)
return retval;
//if (lvl_len != 3) {
if (lvlbuf[0] != 'I' || lvl_len != priv->info_len) {
if (lvlbuf[0] != 'I' || lvl_len != priv->info_len) {
rig_debug(RIG_DEBUG_ERR,"jrc_get_level: wrong answer"
"len=%d\n", lvl_len);
return -RIG_ERJCTED;
@ -550,6 +548,32 @@ int jrc_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
val->i = lvlbuf[1] == '1' ? 20 : 0;
break;
case RIG_LEVEL_AGC:
retval = jrc_transaction (rig, "I" EOM, 2, lvlbuf, &lvl_len);
if (retval != RIG_OK)
return retval;
if (lvlbuf[0] != 'I' || lvl_len != priv->info_len) {
rig_debug(RIG_DEBUG_ERR,"jrc_get_level: wrong answer"
"len=%d\n", lvl_len);
return -RIG_ERJCTED;
}
lvlbuf[priv->info_len-1] = '\0';
if (priv->info_len==14) {
switch (lvlbuf[priv->info_len-2]){
case '0' : val->i = RIG_AGC_SLOW; break;
case '1' : val->i = RIG_AGC_FAST; break;
case '2' : val->i = RIG_AGC_OFF; break;
default : val->i = RIG_AGC_FAST;
}
}
else {
val->i = atoi(lvlbuf+priv->info_len-4);
}
break;
case RIG_LEVEL_RF:
retval = jrc_transaction (rig, "HH" EOM, 3, lvlbuf, &lvl_len);
if (retval != RIG_OK)
@ -640,7 +664,7 @@ int jrc_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (retval != RIG_OK)
return retval;
if (lvlbuf[0] != 'P' || lvl_len != priv->pbs_info_len) {
if (lvlbuf[0] != 'P' || lvl_len != priv->pbs_info_len) {
rig_debug(RIG_DEBUG_ERR,"jrc_get_level: wrong answer"
"len=%d\n", lvl_len);
return -RIG_ERJCTED;
@ -684,7 +708,6 @@ int jrc_set_parm(RIG *rig, setting_t parm, value_t val)
case RIG_PARM_BEEP:
//cmd_len = sprintf(cmdbuf, "U%03d" EOM, val.i?101:100);
cmd_len = sprintf(cmdbuf, "U%0*d" EOM, priv->beep_len, priv->beep + val.i?1:0);
return jrc_transaction (rig, cmdbuf, cmd_len, NULL, NULL);
@ -710,8 +733,11 @@ int jrc_set_parm(RIG *rig, setting_t parm, value_t val)
*/
int jrc_get_parm(RIG *rig, setting_t parm, value_t *val)
{
struct jrc_priv_caps *priv = (struct jrc_priv_caps*)rig->caps->priv;
int retval, lvl_len, i;
char lvlbuf[BUFSZ];
char cmdbuf[BUFSZ];
int cmd_len;
/* Optimize:
* sort the switch cases with the most frequent first
@ -739,17 +765,18 @@ int jrc_get_parm(RIG *rig, setting_t parm, value_t *val)
break;
case RIG_PARM_BEEP:
retval = jrc_transaction (rig, "U9" EOM, 3, lvlbuf, &lvl_len);
cmd_len = sprintf(cmdbuf, "U%d" EOM, priv->beep/10);
retval = jrc_transaction (rig, cmdbuf, cmd_len, lvlbuf, &lvl_len);
if (retval != RIG_OK)
return retval;
if (lvl_len != 4) {
if (lvl_len != priv->beep_len+2) {
rig_debug(RIG_DEBUG_ERR,"jrc_get_parm: wrong answer"
"len=%d\n", lvl_len);
return -RIG_ERJCTED;
}
val->i = lvlbuf[2] == 0 ? 0 : 1;
val->i = lvlbuf[priv->beep_len] == 0 ? 0 : 1;
break;
default:
@ -811,6 +838,30 @@ int jrc_set_powerstat(RIG *rig, powerstat_t status)
return jrc_transaction (rig, pwrbuf, pwr_len, NULL, NULL);
}
/*
* jrc_get_powerstat
* Assumes rig!=NULL
*/
int jrc_get_powerstat(RIG *rig, powerstat_t *status)
//powerstat_t jrc_get_powerstat(RIG *rig)
{
char pwrbuf[BUFSZ];
int pwr_len, retval;
retval = jrc_transaction (rig, "T" EOM, 2, pwrbuf, &pwr_len);
if (retval != RIG_OK)
return retval;
if (pwr_len != 3) {
rig_debug(RIG_DEBUG_ERR,"jrc_get_powerstat: wrong answer %s, "
"len=%d\n", pwrbuf, pwr_len);
return -RIG_ERJCTED;
}
*status = pwrbuf[1] == '0' ? RIG_POWER_OFF : RIG_POWER_ON;
return RIG_OK;
}
/*
* jrc_reset
* Assumes rig!=NULL

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib JRC backend - main header
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: jrc.h,v 1.7 2004-05-19 08:57:50 fillods Exp $
* $Id: jrc.h,v 1.8 2004-06-04 21:48:05 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
@ -53,6 +53,7 @@ int jrc_set_trn(RIG *rig, int trn);
int jrc_set_mem(RIG *rig, vfo_t vfo, int ch);
int jrc_get_mem(RIG *rig, vfo_t vfo, int *ch);
int jrc_set_powerstat(RIG *rig, powerstat_t status);
int jrc_get_powerstat(RIG *rig, powerstat_t *status);
int jrc_reset(RIG *rig, reset_t reset);
int jrc_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
int jrc_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch);

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib JRC backend - NRD-535 DSP description
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: nrd535.c,v 1.3 2004-05-19 08:57:50 fillods Exp $
* $Id: nrd535.c,v 1.4 2004-06-04 21:48:05 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
@ -91,7 +91,7 @@ const struct rig_caps nrd535_caps = {
.mfg_name = "JRC",
.version = "0.2",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
@ -115,6 +115,9 @@ const struct rig_caps nrd535_caps = {
.has_set_parm = RIG_PARM_SET(NRD535_PARM),
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_ATT] = { .min = { .i = 0 }, .max = { .i = 20 } },
[LVL_IF] = { .min = { .i = -2000 }, .max = { .i = 2000 } },
[LVL_CWPITCH] = { .min = { .i = -5000 }, .max = { .i = 5000 } },
},
.parm_gran = {},
.ctcss_list = NULL,
@ -184,6 +187,7 @@ const struct rig_caps nrd535_caps = {
.vfo_op = jrc_vfo_op,
.scan = jrc_scan,
.set_powerstat = jrc_set_powerstat,
.get_powerstat = jrc_get_powerstat,
.decode_event = jrc_decode_event,
};

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib JRC backend - NRD-545 DSP description
* Copyright (c) 2001-2004 by Stephane Fillod
*
* $Id: nrd545.c,v 1.8 2004-05-19 08:57:50 fillods Exp $
* $Id: nrd545.c,v 1.9 2004-06-04 21:48:05 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
@ -83,7 +83,7 @@ const struct rig_caps nrd545_caps = {
.mfg_name = "JRC",
.version = "0.2",
.copyright = "LGPL",
.status = RIG_STATUS_UNTESTED,
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_NONE,
@ -183,6 +183,7 @@ const struct rig_caps nrd545_caps = {
.vfo_op = jrc_vfo_op,
.scan = jrc_scan,
.set_powerstat = jrc_set_powerstat,
.get_powerstat = jrc_get_powerstat,
.decode_event = jrc_decode_event,
};