kopia lustrzana https://github.com/Hamlib/Hamlib
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-79ac388436b8Hamlib-1.2.2
rodzic
97b2291e73
commit
2354575993
406
drake/drake.c
406
drake/drake.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
30
drake/r8a.c
30
drake/r8a.c
|
@ -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,
|
||||
|
||||
};
|
||||
|
|
27
drake/r8b.c
27
drake/r8b.c
|
@ -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,
|
||||
|
||||
};
|
||||
|
|
69
jrc/jrc.c
69
jrc/jrc.c
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
|
||||
};
|
||||
|
|
Ładowanie…
Reference in New Issue