Starting to implement Yaeus band change memory

BS command has a big response so have to increase some buffer sizes
https://github.com/Hamlib/Hamlib/issues/423
pull/426/head
Michael Black W9MDB 2020-10-25 08:03:45 -05:00
rodzic a70e45413a
commit cc465e7d54
2 zmienionych plików z 52 dodań i 3 usunięć

Wyświetl plik

@ -308,6 +308,33 @@ static int newcat_get_vfo_mode(RIG *rig, vfo_t *vfo_mode);
static int newcat_vfomem_toggle(RIG *rig);
static ncboolean newcat_valid_command(RIG *rig, char const *const command);
/*
* The BS command needs to know what band we're on so we can restore band info
* So this converts freq to band index
*/
static int newcat_band_index(freq_t freq)
{
// FTDX101D has band=12=MW...what is that?
int band = 11; // general
if (freq >= 1.8) { band = 0; }
else if (freq >= 3.5) { band = 1; }
else if (freq >= 5) { band = 2; }
else if (freq >= 7) { band = 3; }
else if (freq >= 10) { band = 4; }
else if (freq >= 14) { band = 5; }
else if (freq >= 18) { band = 6; }
else if (freq >= 21) { band = 7; }
else if (freq >= 24.5) { band = 8; }
else if (freq >= 28) { band = 9; }
else if (freq >= 50) { band = 10; }
// what about 11-16?
else if (freq >= 70) { band = 17; }
rig_debug(RIG_DEBUG_TRACE, "%s: band=%d\n", __func__, band);
return band;
}
/*
* ************************************
*
@ -348,6 +375,7 @@ int newcat_init(RIG *rig)
priv->rig_id = NC_RIGID_NONE;
priv->current_mem = NC_MEM_CHANNEL_NONE;
priv->fast_set_commands = FALSE;
priv->has_bs_cmd = 1; // assume true until proven otherwise..in set_freq
return RIG_OK;
}
@ -665,6 +693,26 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
return err;
}
rig_debug(RIG_DEBUG_TRACE, "%s: band changing? old=%d, new=%d\n", __func__,
newcat_band_index(freq), newcat_band_index(rig->state.current_freq));
// Restore band memory if we can
if (priv->has_bs_cmd
&& newcat_band_index(freq) != newcat_band_index(rig->state.current_freq))
{
snprintf(priv->cmd_str, sizeof(priv->cmd_str), "BS%c", cat_term);
if (RIG_OK != (err = newcat_set_cmd(rig)))
{
priv->has_bs_cmd = 0; // guess we can't do this so don't try again
rig_debug(RIG_DEBUG_TRACE, "%s: rig does not have BS command\n", __func__);
}
else
{
rig_debug(RIG_DEBUG_TRACE, "%s: need to restore band settings\n", __func__);
}
}
if (RIG_MODEL_FT450 == caps->rig_model && priv->ret_data[2] != target_vfo)
{
/* revert current VFO */
@ -4903,7 +4951,7 @@ int newcat_get_channel(RIG *rig, channel_t *chan, int read_only)
const char *newcat_get_info(RIG *rig)
{
struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv;
static char idbuf[129]; /* extra large static string array */
static char idbuf[513]; /* extra large static string array */
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);

Wyświetl plik

@ -52,8 +52,8 @@ typedef char ncboolean;
/* shared function version */
#define NEWCAT_VER "20201016"
/* Hopefully large enough for future use, 128 chars plus '\0' */
#define NEWCAT_DATA_LEN 129
/* Hopefully large enough for future use, 512 chars plus '\0' */
#define NEWCAT_DATA_LEN 513
/* arbitrary value for now. 11 bits (8N2+1) == 2.2917 mS @ 4800 bps */
#define NEWCAT_DEFAULT_READ_TIMEOUT (NEWCAT_DATA_LEN * 5)
@ -96,6 +96,7 @@ struct newcat_priv_data
struct timespec cache_start;
char last_if_response[NEWCAT_DATA_LEN];
int poweron; /* to prevent powering on more than once */
int has_bs_cmd; // used to restore band memory */
};