Merge pull request #1169 from PianetaRadio/master

Fixing newcat for targetable_vfo options
pull/1173/head
Michael Black 2022-12-01 17:17:46 -06:00 zatwierdzone przez GitHub
commit 57f6c863c6
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
8 zmienionych plików z 79 dodań i 34 usunięć

Wyświetl plik

@ -133,7 +133,7 @@ const struct rig_caps ft2000_caps =
RIG_MODEL(RIG_MODEL_FT2000),
.model_name = "FT-2000",
.mfg_name = "Yaesu",
.version = NEWCAT_VER ".2",
.version = NEWCAT_VER ".3",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -173,7 +173,7 @@ const struct rig_caps ft2000_caps =
.max_ifshift = Hz(1000),
.vfo_ops = FT2000_VFO_OPS,
.scan_ops = RIG_SCAN_VFO,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_TONE,
.transceive = RIG_TRN_OFF, /* May enable later as the 2000 has an Auto Info command */
.bank_qty = 0,
.chan_desc_sz = 0,

Wyświetl plik

@ -62,7 +62,7 @@
RIG_LEVEL_BAND_SELECT)
#define FT2000_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\
RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\
RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NB2|RIG_FUNC_NR|RIG_FUNC_VOX|\
RIG_FUNC_FBKIN|RIG_FUNC_COMP|RIG_FUNC_ANF|RIG_FUNC_MN|\
RIG_FUNC_RIT|RIG_FUNC_XIT|\
RIG_FUNC_TUNER|RIG_FUNC_APF)

Wyświetl plik

@ -137,7 +137,7 @@ const struct rig_caps ft710_caps =
RIG_MODEL(RIG_MODEL_FT710),
.model_name = "FT-710",
.mfg_name = "Yaesu",
.version = NEWCAT_VER ".1",
.version = NEWCAT_VER ".2",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -179,7 +179,7 @@ const struct rig_caps ft710_caps =
.agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO },
.vfo_ops = FTDX10_VFO_OPS,
.scan_ops = RIG_SCAN_VFO,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_TONE | RIG_TARGETABLE_MODE,
.transceive = RIG_TRN_OFF, /* May enable later as the FTDX10 has an Auto Info command */
.bank_qty = 0,
.chan_desc_sz = 0,

Wyświetl plik

@ -91,7 +91,7 @@ const struct rig_caps ft9000_caps =
.agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO },
.vfo_ops = FT9000_VFO_OPS,
.scan_ops = RIG_SCAN_VFO,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_ANT,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_ANT | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_TONE,
.transceive = RIG_TRN_OFF, /* May enable later as the 9000 has an Auto Info command */
.bank_qty = 0,
.chan_desc_sz = 0,

Wyświetl plik

@ -137,7 +137,7 @@ const struct rig_caps ftdx10_caps =
RIG_MODEL(RIG_MODEL_FTDX10),
.model_name = "FTDX-10",
.mfg_name = "Yaesu",
.version = NEWCAT_VER ".4",
.version = NEWCAT_VER ".5",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -179,7 +179,7 @@ const struct rig_caps ftdx10_caps =
.agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO },
.vfo_ops = FTDX10_VFO_OPS,
.scan_ops = RIG_SCAN_VFO,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_TONE,
.transceive = RIG_TRN_OFF, /* May enable later as the FTDX10 has an Auto Info command */
.bank_qty = 0,
.chan_desc_sz = 0,

Wyświetl plik

@ -137,7 +137,7 @@ const struct rig_caps ftdx101d_caps =
RIG_MODEL(RIG_MODEL_FTDX101D),
.model_name = "FTDX-101D",
.mfg_name = "Yaesu",
.version = NEWCAT_VER ".16",
.version = NEWCAT_VER ".17",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -179,7 +179,7 @@ const struct rig_caps ftdx101d_caps =
.agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW, RIG_AGC_AUTO },
.vfo_ops = FTDX101_VFO_OPS,
.scan_ops = RIG_SCAN_VFO,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_ANT | RIG_TARGETABLE_ROOFING,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_ANT | RIG_TARGETABLE_ROOFING | RIG_TARGETABLE_TONE,
.transceive = RIG_TRN_OFF, /* May enable later as the FTDX101 has an Auto Info command */
.bank_qty = 0,
.chan_desc_sz = 0,

Wyświetl plik

@ -75,7 +75,7 @@ const struct rig_caps ftdx101mp_caps =
RIG_MODEL(RIG_MODEL_FTDX101MP),
.model_name = "FTDX-101MP",
.mfg_name = "Yaesu",
.version = NEWCAT_VER ".7",
.version = NEWCAT_VER ".8",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
@ -113,7 +113,7 @@ const struct rig_caps ftdx101mp_caps =
.max_ifshift = Hz(1200),
.vfo_ops = FTDX101_VFO_OPS,
.scan_ops = RIG_SCAN_VFO,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_ANT,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE | RIG_TARGETABLE_FUNC | RIG_TARGETABLE_LEVEL | RIG_TARGETABLE_COMMON | RIG_TARGETABLE_ANT | RIG_TARGETABLE_ROOFING | RIG_TARGETABLE_TONE,
.transceive = RIG_TRN_OFF, /* May enable later as the FTDX101 has an Auto Info command */
.bank_qty = 0,
.chan_desc_sz = 0,

Wyświetl plik

@ -3030,7 +3030,7 @@ int newcat_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone)
RETURNFUNC(err);
}
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_TONE)
{
main_sub_vfo = (RIG_VFO_B == vfo || RIG_VFO_SUB == vfo) ? '1' : '0';
}
@ -3097,7 +3097,7 @@ int newcat_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone)
RETURNFUNC(err);
}
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_TONE)
{
main_sub_vfo = (RIG_VFO_B == vfo || RIG_VFO_SUB == vfo) ? '1' : '0';
}
@ -3639,7 +3639,7 @@ int newcat_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option,
RETURNFUNC(err);
}
if ((rig->caps->targetable_vfo & RIG_TARGETABLE_MODE) && !is_ft2000)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_ANT)
{
main_sub_vfo = (RIG_VFO_B == vfo || RIG_VFO_SUB == vfo) ? '1' : '0';
}
@ -3810,6 +3810,9 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
if (val.f > 1.0) { RETURNFUNC(-RIG_EINVAL); }
fpf = newcat_scale_float(255, val.f);
if (is_ftdx10 || is_ft710) main_sub_vfo = 0;
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "AG%c%03d%c", main_sub_vfo, fpf,
cat_term);
break;
@ -3846,7 +3849,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(-RIG_EINVAL);
}
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -3888,6 +3891,11 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "IS%c0%+.4d%c", main_sub_vfo,
val.i, cat_term);
}
else if (is_ftdx10 || is_ft710)
{
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "IS00%+.4d%c",
val.i, cat_term);
}
else if (is_ft891)
{
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "IS0%d%+.4d%c",
@ -3900,7 +3908,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
val.i, cat_term);
}
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4083,7 +4091,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "PA00%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4107,7 +4115,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(-RIG_EINVAL);
}
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4124,7 +4132,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "RA00%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4148,7 +4156,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
RETURNFUNC(-RIG_EINVAL);
}
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4169,6 +4177,8 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
scale = 255;
}
if (is_ftdx10 || is_ft710) main_sub_vfo = 0;
fpf = newcat_scale_float(scale, val.f);
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "RG%c%03d%c", main_sub_vfo, fpf,
@ -4221,7 +4231,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "RL0%02d%c", fpf, cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4363,6 +4373,12 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
fpf = newcat_scale_float(scale, val.f);
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SQ%c%03d%c", main_sub_vfo, fpf,
cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
break;
case RIG_LEVEL_VOXDELAY:
@ -4539,7 +4555,7 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "BP%03d%c", val.i, cat_term);
}
else if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
else if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4611,6 +4627,11 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
}
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "NL00%02d%c", fpf, cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ftdx10 && !is_ft710 && !is_ftdx101mp)
{
priv->cmd_str[2] = main_sub_vfo;
}
break;
@ -4673,7 +4694,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "PA0%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4688,6 +4709,12 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "AG%c%c", main_sub_vfo,
cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
break;
case RIG_LEVEL_AGC:
@ -4698,6 +4725,12 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "GT%c%c", main_sub_vfo,
cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
break;
case RIG_LEVEL_IF:
@ -4719,7 +4752,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "IS%c%c", main_sub_vfo,
cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4804,7 +4837,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "RA0%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4838,7 +4871,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "RL0%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -4862,6 +4895,12 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "SQ%c%c", main_sub_vfo,
cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
break;
case RIG_LEVEL_VOXDELAY:
@ -4891,6 +4930,12 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
}
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "NL0%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ftdx10 && !is_ft710 && !is_ftdx101mp)
{
priv->cmd_str[2] = main_sub_vfo;
}
break;
/*
@ -5081,7 +5126,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "BP%c", cat_term);
}
else if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
else if (rig->caps->targetable_vfo & RIG_TARGETABLE_LEVEL && !is_ft2000 && !is_ftdx10 && !is_ft710)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -5696,7 +5741,7 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
RETURNFUNC(err);
}
if (rig->caps->targetable_vfo & (RIG_TARGETABLE_MODE | RIG_TARGETABLE_TONE))
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FUNC)
{
main_sub_vfo = (RIG_VFO_B == vfo || RIG_VFO_SUB == vfo) ? '1' : '0';
}
@ -5722,7 +5767,7 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "BC0%d%c", status ? 1 : 0,
cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FUNC && !is_ft2000 && !is_ftdx10)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -5759,7 +5804,7 @@ int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "BP00%03d%c", status ? 1 : 0,
cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE && !is_ft2000)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FUNC && !is_ft2000 && !is_ftdx10)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -6080,7 +6125,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
ENTERFUNC;
if (rig->caps->targetable_vfo & (RIG_TARGETABLE_MODE | RIG_TARGETABLE_TONE))
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FUNC)
{
main_sub_vfo = (RIG_VFO_B == vfo || RIG_VFO_SUB == vfo) ? '1' : '0';
}
@ -6219,7 +6264,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "NB0%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FUNC)
{
priv->cmd_str[2] = main_sub_vfo;
}
@ -6234,7 +6279,7 @@ int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "NR0%c", cat_term);
if (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
if (rig->caps->targetable_vfo & RIG_TARGETABLE_FUNC)
{
priv->cmd_str[2] = main_sub_vfo;
}