Change get_kenwood_level to use separate float/int parameters

pull/412/head
Michael Black W9MDB 2020-09-30 14:45:50 -05:00
rodzic 7455fa1b91
commit 38daabee8e
1 zmienionych plików z 17 dodań i 13 usunięć

Wyświetl plik

@ -2380,7 +2380,7 @@ int kenwood_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
return kenwood_transaction(rig, levelbuf, NULL, 0); return kenwood_transaction(rig, levelbuf, NULL, 0);
} }
int get_kenwood_level(RIG *rig, const char *cmd, value_t *val) int get_kenwood_level(RIG *rig, const char *cmd, float *fval, int *ival)
{ {
char lvlbuf[10]; char lvlbuf[10];
int retval; int retval;
@ -2389,7 +2389,7 @@ int get_kenwood_level(RIG *rig, const char *cmd, value_t *val)
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!val) if (!fval && !ival)
{ {
return -RIG_EINVAL; return -RIG_EINVAL;
} }
@ -2403,8 +2403,8 @@ int get_kenwood_level(RIG *rig, const char *cmd, value_t *val)
/* 000..255 */ /* 000..255 */
sscanf(lvlbuf + len, "%d", &lvl); sscanf(lvlbuf + len, "%d", &lvl);
val->i = lvl; // raw value if (ival) *ival = lvl; // raw value
val->f = lvl / 255.0; // our default scaling of 0-255 if (fval) *fval = lvl / 255.0; // our default scaling of 0-255
return RIG_OK; return RIG_OK;
}; };
@ -2572,7 +2572,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
* which is val=1.0 on most rigs, but * which is val=1.0 on most rigs, but
* get_kenwood_level maps 0...255 onto 0.0 ... 1.0 * get_kenwood_level maps 0...255 onto 0.0 ... 1.0
*/ */
ret = get_kenwood_level(rig, "PC", val); ret = get_kenwood_level(rig, "PC", &val->f, NULL);
val->f = val->f * (255.0 / 100.0); val->f = val->f * (255.0 / 100.0);
return ret; return ret;
@ -2638,15 +2638,15 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
break; break;
case 1: case 1:
return get_kenwood_level(rig, "AG", val); return get_kenwood_level(rig, "AG", &val->f, NULL);
break; break;
case 2: case 2:
return get_kenwood_level(rig, "AG0", val); return get_kenwood_level(rig, "AG0", &val->f, NULL);
break; break;
case 3: case 3:
return get_kenwood_level(rig, vfo == RIG_VFO_MAIN ? "AG0" : "AG1", val); return get_kenwood_level(rig, vfo == RIG_VFO_MAIN ? "AG0" : "AG1", &val->f, NULL);
break; break;
default: default:
@ -2656,23 +2656,27 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
} }
case RIG_LEVEL_RF: case RIG_LEVEL_RF:
retval = get_kenwood_level(rig, "RG", val); retval = get_kenwood_level(rig, "RG", NULL, &val->i);
if (retval != RIG_OK) return retval; if (retval != RIG_OK) return retval;
// KX2 and KX3 have range 190 to 250 // KX2 and KX3 have range 190 to 250
if (RIG_IS_KX2 || RIG_IS_KX3) { if (RIG_IS_KX2 || RIG_IS_KX3) {
val->f = (val->i - 190) / (250-190); val->f = (val->i - 190) / (250-190);
} }
// K3 is 0 to 250
else if (RIG_IS_K3 || RIG_IS_K3S) { else if (RIG_IS_K3 || RIG_IS_K3S) {
val->f = val->i / 250.0; val->f = val->i / 250.0;
} }
// other kenwod rigs are the default 0-255 // all others default to 0-255
else {
val->f = val->i / 255.0;
}
return retval; return retval;
case RIG_LEVEL_SQL: case RIG_LEVEL_SQL:
return get_kenwood_level(rig, "SQ", val); return get_kenwood_level(rig, "SQ", &val->f, NULL);
case RIG_LEVEL_MICGAIN: case RIG_LEVEL_MICGAIN:
ret = get_kenwood_level(rig, "MG", val); ret = get_kenwood_level(rig, "MG", &val->f, NULL);
if (ret != RIG_OK) if (ret != RIG_OK)
{ {
@ -2684,7 +2688,7 @@ int kenwood_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return RIG_OK; return RIG_OK;
case RIG_LEVEL_AGC: case RIG_LEVEL_AGC:
ret = get_kenwood_level(rig, "GT", val); ret = get_kenwood_level(rig, "GT", NULL, &val->i);
agclevel = val->i; agclevel = val->i;
if (agclevel == 0) { val->i = 0; } if (agclevel == 0) { val->i = 0; }