Fix some issues with commands not supported by TS-2000 CAT emulations

Various SDR  consoles are  supported by the  TS-2000 back  end, ensure
that commands  unsupported are  not sent  to them.  Added a  flag that
shows back end is talking to an emulation like SmartSDR or PowerSDR.
pull/1/head
Bill Somerville 2017-08-02 23:31:24 +01:00 zatwierdzone przez Nate Bargmann
rodzic ffb9f21d3a
commit 3fade92c0d
2 zmienionych plików z 77 dodań i 58 usunięć

Wyświetl plik

@ -603,6 +603,7 @@ int kenwood_open(RIG *rig)
|| !strcmp ("ID907", id) /* PowerSDR Flex-6300 */ || !strcmp ("ID907", id) /* PowerSDR Flex-6300 */
) )
{ {
priv->is_emulation = 1; /* Emulations don't have SAT mode */
strcpy (id, "ID019"); /* fake it */ strcpy (id, "ID019"); /* fake it */
} }
@ -736,23 +737,23 @@ int kenwood_set_vfo(RIG *rig, vfo_t vfo)
} }
//if rig=ts2000 then check Satellite mode status //if rig=ts2000 then check Satellite mode status
if(rig->caps->rig_model == RIG_MODEL_TS2000) { if(rig->caps->rig_model == RIG_MODEL_TS2000 && !priv->is_emulation) {
char retbuf[20]; char retbuf[20];
rig_debug(RIG_DEBUG_VERBOSE, "Checking Satellite mode status\n"); rig_debug(RIG_DEBUG_VERBOSE, "Checking Satellite mode status\n");
snprintf(cmdbuf, sizeof (cmdbuf), "SA"); snprintf(cmdbuf, sizeof (cmdbuf), "SA");
retval = kenwood_transaction(rig, cmdbuf, retbuf, 20); retval = kenwood_transaction(rig, cmdbuf, retbuf, 20);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
rig_debug(RIG_DEBUG_VERBOSE, "Satellite mode status %s\n",retbuf); rig_debug(RIG_DEBUG_VERBOSE, "Satellite mode status %s\n",retbuf);
//Satellite mode ON //Satellite mode ON
if(retbuf[2]=='1') { if(retbuf[2]=='1') {
//SAT mode doesn't allow FR command (cannot select VFO) //SAT mode doesn't allow FR command (cannot select VFO)
//selecting VFO is useless in SAT MODE //selecting VFO is useless in SAT MODE
return RIG_OK; return RIG_OK;
} }
} }
snprintf(cmdbuf, sizeof (cmdbuf), "FR%c", vfo_function); snprintf(cmdbuf, sizeof (cmdbuf), "FR%c", vfo_function);
@ -1380,6 +1381,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (!rig) if (!rig)
return -RIG_EINVAL; return -RIG_EINVAL;
struct kenwood_priv_data *priv = rig->state.priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig); struct kenwood_priv_caps *caps = kenwood_caps(rig);
char buf[6]; char buf[6];
char kmode; char kmode;
@ -1411,6 +1413,14 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
} }
} }
if (priv->is_emulation)
{
/* emulations like PowerSDR and SmartSDR normally hijack the
RTTY modes for SSB-DATA AFSK modes */
if (RIG_MODE_PKTLSB == mode) mode = RIG_MODE_RTTY;
if (RIG_MODE_PKTUSB == mode) mode = RIG_MODE_RTTYR;
}
kmode = rmode2kenwood(mode, caps->mode_table); kmode = rmode2kenwood(mode, caps->mode_table);
if (kmode < 0 ) { if (kmode < 0 ) {
rig_debug(RIG_DEBUG_WARN, "%s: unsupported mode '%s'\n", rig_debug(RIG_DEBUG_WARN, "%s: unsupported mode '%s'\n",
@ -1462,16 +1472,16 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|| RIG_MODEL_TS590SG == rig->caps->rig_model) || RIG_MODEL_TS590SG == rig->caps->rig_model)
{ {
if (!(RIG_MODE_CW == mode if (!(RIG_MODE_CW == mode
|| RIG_MODE_CWR == mode || RIG_MODE_CWR == mode
|| RIG_MODE_AM == mode || RIG_MODE_AM == mode
|| RIG_MODE_RTTY == mode || RIG_MODE_RTTY == mode
|| RIG_MODE_RTTYR == mode)) || RIG_MODE_RTTYR == mode))
{ {
/* supports DATA sub modes - see above */ /* supports DATA sub modes - see above */
snprintf (buf, sizeof (buf), "DA%c", data_mode); snprintf (buf, sizeof (buf), "DA%c", data_mode);
err = kenwood_transaction (rig, buf, NULL, 0); err = kenwood_transaction (rig, buf, NULL, 0);
if (err != RIG_OK) return err; if (err != RIG_OK) return err;
} }
} }
if (RIG_PASSBAND_NOCHANGE == width) return RIG_OK; if (RIG_PASSBAND_NOCHANGE == width) return RIG_OK;
@ -1545,6 +1555,7 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
if (!rig || !mode || !width) if (!rig || !mode || !width)
return -RIG_EINVAL; return -RIG_EINVAL;
struct kenwood_priv_data *priv = rig->state.priv;
struct kenwood_priv_caps *caps = kenwood_caps(rig); struct kenwood_priv_caps *caps = kenwood_caps(rig);
char cmd[4]; char cmd[4];
char modebuf[10]; char modebuf[10];
@ -1593,6 +1604,13 @@ int kenwood_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
kmode = modebuf[offs] - 'A' + 10; kmode = modebuf[offs] - 'A' + 10;
} }
*mode = kenwood2rmode(kmode, caps->mode_table); *mode = kenwood2rmode(kmode, caps->mode_table);
if (priv->is_emulation)
{
/* emulations like PowerSDR and SmartSDR normally hijack the
RTTY modes for SSB-DATA AFSK modes */
if (RIG_MODE_RTTY == *mode) *mode = RIG_MODE_PKTLSB;
if (RIG_MODE_RTTYR == *mode) *mode = RIG_MODE_PKTUSB;
}
if (RIG_MODEL_TS590S == rig->caps->rig_model if (RIG_MODEL_TS590S == rig->caps->rig_model
|| RIG_MODEL_TS590SG == rig->caps->rig_model) || RIG_MODEL_TS590SG == rig->caps->rig_model)
@ -3321,43 +3339,43 @@ DECLARE_INITRIG_BACKEND(kenwood)
// rig_debug(RIG_DEBUG_VERBOSE, "kenwood: _init called\n"); // rig_debug(RIG_DEBUG_VERBOSE, "kenwood: _init called\n");
rig_register(&ts950sdx_caps); rig_register(&ts950sdx_caps);
rig_register(&ts50s_caps); rig_register(&ts50s_caps);
rig_register(&ts140_caps); rig_register(&ts140_caps);
rig_register(&ts450s_caps); rig_register(&ts450s_caps);
rig_register(&ts570d_caps); rig_register(&ts570d_caps);
rig_register(&ts570s_caps); rig_register(&ts570s_caps);
rig_register(&ts680s_caps); rig_register(&ts680s_caps);
rig_register(&ts690s_caps); rig_register(&ts690s_caps);
rig_register(&ts790_caps); rig_register(&ts790_caps);
rig_register(&ts850_caps); rig_register(&ts850_caps);
rig_register(&ts870s_caps); rig_register(&ts870s_caps);
rig_register(&ts930_caps); rig_register(&ts930_caps);
rig_register(&ts2000_caps); rig_register(&ts2000_caps);
rig_register(&trc80_caps); rig_register(&trc80_caps);
rig_register(&k2_caps); rig_register(&k2_caps);
rig_register(&k3_caps); rig_register(&k3_caps);
rig_register(&xg3_caps); rig_register(&xg3_caps);
rig_register(&ts440_caps); rig_register(&ts440_caps);
rig_register(&ts940_caps); rig_register(&ts940_caps);
rig_register(&ts711_caps); rig_register(&ts711_caps);
rig_register(&ts811_caps); rig_register(&ts811_caps);
rig_register(&r5000_caps); rig_register(&r5000_caps);
rig_register(&tmd700_caps); rig_register(&tmd700_caps);
rig_register(&thd7a_caps); rig_register(&thd7a_caps);
rig_register(&thd72a_caps); rig_register(&thd72a_caps);
rig_register(&thf7e_caps); rig_register(&thf7e_caps);
rig_register(&thg71_caps); rig_register(&thg71_caps);
rig_register(&tmv7_caps); rig_register(&tmv7_caps);
rig_register(&tmd710_caps); rig_register(&tmd710_caps);
rig_register(&ts590_caps); rig_register(&ts590_caps);
rig_register(&ts990s_caps); rig_register(&ts990s_caps);
rig_register(&ts590sg_caps); rig_register(&ts590sg_caps);
rig_register(&ts480_caps); rig_register(&ts480_caps);
rig_register(&thf6a_caps); rig_register(&thf6a_caps);
rig_register(&transfox_caps); rig_register(&transfox_caps);

Wyświetl plik

@ -78,6 +78,7 @@ struct kenwood_priv_data {
int trn_state; /* AI state discovered at startup */ int trn_state; /* AI state discovered at startup */
unsigned fw_rev_uint; /* firmware revison as a number 1.07 -> 107 */ unsigned fw_rev_uint; /* firmware revison as a number 1.07 -> 107 */
char verify_cmd[4]; /* command used to verify set commands */ char verify_cmd[4]; /* command used to verify set commands */
int is_emulation; /* flag for TS-2000 emulations */
void * data; /* model specific data */ void * data; /* model specific data */
}; };