kopia lustrzana https://github.com/Hamlib/Hamlib
Correctly detect if in memory mode in get_vfo()
Reduced large decision trees with bitwise math git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1831 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.3
rodzic
395d62ead0
commit
8aa94a79a8
127
drake/drake.c
127
drake/drake.c
|
@ -2,7 +2,7 @@
|
||||||
* Hamlib Drake backend - main file
|
* Hamlib Drake backend - main file
|
||||||
* Copyright (c) 2001-2004 by Stephane Fillod
|
* Copyright (c) 2001-2004 by Stephane Fillod
|
||||||
*
|
*
|
||||||
* $Id: drake.c,v 1.13 2004-08-31 03:45:34 fineware Exp $
|
* $Id: drake.c,v 1.14 2004-09-01 01:08:11 fineware Exp $
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or modify
|
* This library is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Library General Public License as
|
* it under the terms of the GNU Library General Public License as
|
||||||
|
@ -204,42 +204,29 @@ int drake_get_vfo(RIG *rig, vfo_t *vfo)
|
||||||
char mdbuf[BUFSZ];
|
char mdbuf[BUFSZ];
|
||||||
char cvfo;
|
char cvfo;
|
||||||
|
|
||||||
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
|
retval = drake_transaction (rig, "RA" EOM, 3, mdbuf, &mdbuf_len);
|
||||||
if (retval != RIG_OK)
|
if (retval != RIG_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
if (mdbuf_len != 8) {
|
if (mdbuf_len < 35) {
|
||||||
rig_debug(RIG_DEBUG_ERR,"drake_get_vfo: wrong answer %s, "
|
rig_debug(RIG_DEBUG_ERR,"drake_get_vfo: wrong answer %s, "
|
||||||
"len=%d\n", mdbuf, mdbuf_len);
|
"len=%d\n", mdbuf, mdbuf_len);
|
||||||
return -RIG_ERJCTED;
|
return -RIG_ERJCTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
cvfo = mdbuf[5];
|
if (mdbuf[0]=='*')
|
||||||
|
*vfo = RIG_VFO_MEM;
|
||||||
|
else {
|
||||||
|
cvfo = (mdbuf[9] & 0x38);
|
||||||
switch (cvfo) {
|
switch (cvfo) {
|
||||||
case '0':
|
case '0' : *vfo = RIG_VFO_B; break;
|
||||||
case '1':
|
case '8' : *vfo = RIG_VFO_A; break;
|
||||||
case '2':
|
default : rig_debug(RIG_DEBUG_ERR,
|
||||||
case '3':
|
"drake_get_vfo: unsupported vfo %c\n", cvfo);
|
||||||
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;
|
*vfo = RIG_VFO_VFO;
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return RIG_OK;
|
return RIG_OK;
|
||||||
}
|
}
|
||||||
|
@ -333,17 +320,12 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
cwidth = mdbuf[4];
|
cwidth = mdbuf[4];
|
||||||
csynch = mdbuf[5];
|
csynch = mdbuf[5];
|
||||||
|
|
||||||
switch(cwidth){
|
switch(cwidth & 0x37){
|
||||||
case '0':
|
case '0': *width = s_Hz(500); break;
|
||||||
case '8': *width = s_Hz(500); break;
|
case '1': *width = s_Hz(1800); break;
|
||||||
case '1':
|
case '2': *width = s_Hz(2300); break;
|
||||||
case '9': *width = s_Hz(1800); break;
|
case '3': *width = s_Hz(4000); break;
|
||||||
case '2':
|
case '4': *width = s_Hz(6000); break;
|
||||||
case ':': *width = s_Hz(2300); break;
|
|
||||||
case '3':
|
|
||||||
case ';': *width = s_Hz(4000); break;
|
|
||||||
case '4':
|
|
||||||
case '<': *width = s_Hz(6000); break;
|
|
||||||
default :
|
default :
|
||||||
rig_debug(RIG_DEBUG_ERR,
|
rig_debug(RIG_DEBUG_ERR,
|
||||||
"drake_get_mode: unsupported width %c\n",
|
"drake_get_mode: unsupported width %c\n",
|
||||||
|
@ -352,17 +334,11 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwidth=='0'||cwidth=='1'||cwidth=='2'||cwidth=='3'||cwidth=='4'){
|
if ((cwidth >= '0') && (cwidth <= '4')) {
|
||||||
switch(cmode){
|
switch(cmode & 0x33){
|
||||||
case '0':
|
case '0': *mode = RIG_MODE_LSB; break;
|
||||||
case '4':
|
case '1': *mode = RIG_MODE_RTTY; break;
|
||||||
case '8': *mode = RIG_MODE_LSB; break;
|
case '2': *mode = RIG_MODE_FM; *width = s_Hz(12000); 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 :
|
default :
|
||||||
rig_debug(RIG_DEBUG_ERR,
|
rig_debug(RIG_DEBUG_ERR,
|
||||||
"drake_get_mode: unsupported mode %c\n",
|
"drake_get_mode: unsupported mode %c\n",
|
||||||
|
@ -371,16 +347,10 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch(cmode){
|
switch(cmode & 0x33){
|
||||||
case '0':
|
case '0': *mode = RIG_MODE_USB; break;
|
||||||
case '4':
|
case '1': *mode = RIG_MODE_CW; break;
|
||||||
case '8': *mode = RIG_MODE_USB; break;
|
case '2': *mode = RIG_MODE_AM; break;
|
||||||
case '1':
|
|
||||||
case '5':
|
|
||||||
case '9': *mode = RIG_MODE_CW; break;
|
|
||||||
case '2':
|
|
||||||
case '6':
|
|
||||||
case ':': *mode = RIG_MODE_AM; break;
|
|
||||||
default :
|
default :
|
||||||
rig_debug(RIG_DEBUG_ERR,
|
rig_debug(RIG_DEBUG_ERR,
|
||||||
"drake_get_mode: unsupported mode %c\n",
|
"drake_get_mode: unsupported mode %c\n",
|
||||||
|
@ -390,9 +360,7 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*FIXME USB/LSB synch in R8B*/
|
if ((csynch & 0x34) == '4') {
|
||||||
if (csynch=='4'||csynch=='5'||csynch=='6'||csynch=='7'||
|
|
||||||
csynch=='<'||csynch=='='||csynch=='>'||csynch=='?') {
|
|
||||||
if (*mode == RIG_MODE_AM)
|
if (*mode == RIG_MODE_AM)
|
||||||
*mode = RIG_MODE_AMS;
|
*mode = RIG_MODE_AMS;
|
||||||
else
|
else
|
||||||
|
@ -443,16 +411,10 @@ int drake_get_ant(RIG *rig, vfo_t vfo, ant_t *ant)
|
||||||
|
|
||||||
cant = mdbuf[3];
|
cant = mdbuf[3];
|
||||||
|
|
||||||
switch(cant){
|
switch(cant & 0x3c){
|
||||||
case '0':
|
case '0': *ant = RIG_ANT_1; break;
|
||||||
case '1':
|
case '4': *ant = RIG_ANT_3; break;
|
||||||
case '2': *ant = RIG_ANT_1; break;
|
case '8': *ant = RIG_ANT_2; break;
|
||||||
case '4':
|
|
||||||
case '5':
|
|
||||||
case '6': *ant = RIG_ANT_3; break;
|
|
||||||
case '8':
|
|
||||||
case '9':
|
|
||||||
case ':': *ant = RIG_ANT_2; break;
|
|
||||||
default :
|
default :
|
||||||
rig_debug(RIG_DEBUG_ERR,
|
rig_debug(RIG_DEBUG_ERR,
|
||||||
"drake_get_ant: unsupported antenna %c\n",
|
"drake_get_ant: unsupported antenna %c\n",
|
||||||
|
@ -609,12 +571,12 @@ int drake_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
|
||||||
switch(func) {
|
switch(func) {
|
||||||
case RIG_FUNC_MN:
|
case RIG_FUNC_MN:
|
||||||
mc = mdbuf[2];
|
mc = mdbuf[2];
|
||||||
*status = (mc=='2'||mc=='3'||mc=='6'||mc=='7'||mc==':'||mc==';'||mc=='>'||mc=='?');
|
*status = ((mc & 0x32) =='2');
|
||||||
break;
|
break;
|
||||||
case RIG_FUNC_NB:
|
case RIG_FUNC_NB:
|
||||||
/* TODO: NB narrow */
|
/* TODO: NB narrow */
|
||||||
mc = mdbuf[1];
|
mc = mdbuf[1];
|
||||||
*status = ((mc!='0')&&(mc!='1')&&(mc!='2')&&(mc!='3'));
|
*status = ((mc >= '4') && (mc <= '?'));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rig_debug(RIG_DEBUG_ERR,"Unsupported get func %d\n",func);
|
rig_debug(RIG_DEBUG_ERR,"Unsupported get func %d\n",func);
|
||||||
|
@ -708,33 +670,24 @@ int drake_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||||
break;
|
break;
|
||||||
case RIG_LEVEL_PREAMP:
|
case RIG_LEVEL_PREAMP:
|
||||||
mc = lvlbuf[2];
|
mc = lvlbuf[2];
|
||||||
if (mc=='8'||mc=='9'||mc==':'||mc==';')
|
if ((mc & 0x3c) == '8')
|
||||||
val->i = 10;
|
val->i = 10;
|
||||||
else
|
else
|
||||||
val->i = 0;
|
val->i = 0;
|
||||||
break;
|
break;
|
||||||
case RIG_LEVEL_ATT:
|
case RIG_LEVEL_ATT:
|
||||||
mc = lvlbuf[2];
|
mc = lvlbuf[2];
|
||||||
if (mc=='4'||mc=='5'||mc=='6'||mc=='7')
|
if ((mc & 0x3c) =='4')
|
||||||
val->i = 10;
|
val->i = 10;
|
||||||
else
|
else
|
||||||
val->i = 0;
|
val->i = 0;
|
||||||
break;
|
break;
|
||||||
case RIG_LEVEL_AGC:
|
case RIG_LEVEL_AGC:
|
||||||
mc = lvlbuf[1];
|
mc = lvlbuf[1];
|
||||||
switch(mc){
|
switch(mc & 0x33){
|
||||||
case '0':
|
case '0': val->i = RIG_AGC_OFF; break;
|
||||||
case '4':
|
case '2': val->i = RIG_AGC_FAST; break;
|
||||||
case '8':
|
case '3': val->i = RIG_AGC_SLOW; break;
|
||||||
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;
|
default : val->i = RIG_AGC_FAST;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Ładowanie…
Reference in New Issue