Change Barrett 4050 to channelized frequency method.

The TC command is not implemented yet in the 4050.
Barrett said eeprom is good for 1,000,000 writes
https://github.com/Hamlib/Hamlib/issues/923
pull/928/head
Mike Black W9MDB 2022-01-12 12:43:03 -06:00
rodzic acf682c498
commit b2254a5667
4 zmienionych plików z 17 dodań i 8 usunięć

Wyświetl plik

@ -47,6 +47,7 @@
#define BARRETT4050_FUNCTIONS (RIG_FUNC_TUNER) #define BARRETT4050_FUNCTIONS (RIG_FUNC_TUNER)
extern int barret950_get_freq(RIG *rig, vfo_t vfo, freq_t freq);
/* /*
* barrett4050_get_level * barrett4050_get_level
@ -85,6 +86,7 @@ static int barrett4050_open(RIG *rig)
{ {
int retval; int retval;
char *response; char *response;
struct barrett_priv_data *priv = rig->state.priv;
ENTERFUNC; ENTERFUNC;
barrett4050_get_info(rig); barrett4050_get_info(rig);
retval = barrett_transaction(rig, "IDC9999", 0, &response); retval = barrett_transaction(rig, "IDC9999", 0, &response);
@ -92,6 +94,7 @@ static int barrett4050_open(RIG *rig)
if (retval == RIG_OK) if (retval == RIG_OK)
{ {
rig_debug(RIG_DEBUG_VERBOSE, "%s: channel 9999 info=%s\n", __func__, response); rig_debug(RIG_DEBUG_VERBOSE, "%s: channel 9999 info=%s\n", __func__, response);
priv->channel_base = 9990;
} }
retval = barrett_transaction(rig, "XC9999", 0, &response); retval = barrett_transaction(rig, "XC9999", 0, &response);
@ -116,9 +119,9 @@ const struct rig_caps barrett4050_caps =
RIG_MODEL(RIG_MODEL_BARRETT_4050), RIG_MODEL(RIG_MODEL_BARRETT_4050),
.model_name = "4050", .model_name = "4050",
.mfg_name = "Barrett", .mfg_name = "Barrett",
.version = BACKEND_VER ".0c", .version = BACKEND_VER ".0d",
.copyright = "LGPL", .copyright = "LGPL",
.status = RIG_STATUS_STABLE, .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER, .rig_type = RIG_TYPE_TRANSCEIVER,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.ptt_type = RIG_PTT_RIG, .ptt_type = RIG_PTT_RIG,
@ -165,7 +168,9 @@ const struct rig_caps barrett4050_caps =
.rig_cleanup = barrett_cleanup, .rig_cleanup = barrett_cleanup,
.rig_open = barrett4050_open, .rig_open = barrett4050_open,
.set_freq = barrett_set_freq, // Barrett said eeprom is good for 1M writes so channelized should be OK for a long time
// TC command was not implemented as of 2022-01-12 which would be better
.set_freq = barrett950_set_freq,
.get_freq = barrett_get_freq, .get_freq = barrett_get_freq,
.set_mode = barrett_set_mode, .set_mode = barrett_set_mode,
.get_mode = barrett_get_mode, .get_mode = barrett_get_mode,

Wyświetl plik

@ -46,7 +46,7 @@
#define BARRETT950_LEVELS (RIG_LEVEL_NONE) #define BARRETT950_LEVELS (RIG_LEVEL_NONE)
static int barrett950_set_freq(RIG *rig, vfo_t vfo, freq_t freq); int barrett950_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
static int barrett950_get_level(RIG *rig, vfo_t vfo, setting_t level, static int barrett950_get_level(RIG *rig, vfo_t vfo, setting_t level,
value_t *val); value_t *val);
@ -158,6 +158,7 @@ int barrett950_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
freq_t freq_rx, freq_tx; freq_t freq_rx, freq_tx;
freq_t freq_MHz; freq_t freq_MHz;
char *response = NULL; char *response = NULL;
struct barrett_priv_data *priv = rig->state.priv;
//struct barrett_priv_data *priv = rig->state.priv; //struct barrett_priv_data *priv = rig->state.priv;
rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s freq=%.0f\n", __func__, rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s freq=%.0f\n", __func__,
@ -175,7 +176,8 @@ int barrett950_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{ {
if (freq_MHz >= chan_map[i].lo && freq_MHz <= chan_map[i].hi) if (freq_MHz >= chan_map[i].lo && freq_MHz <= chan_map[i].hi)
{ {
chan = CHANNEL_BASE + chan_map[i].chan_offset; int channel_base = priv->channel_base;
chan = channel_base + chan_map[i].chan_offset;
} }
} }

Wyświetl plik

@ -260,6 +260,7 @@ int barrett_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
} }
// TC command does not work on 4050 -- not implemented as of 2022-01-12
/* /*
* barrett_set_freq * barrett_set_freq
* assumes rig!=NULL, rig->state.priv!=NULL * assumes rig!=NULL, rig->state.priv!=NULL

Wyświetl plik

@ -28,7 +28,7 @@
#include <sys/time.h> #include <sys/time.h>
#endif #endif
#define BACKEND_VER "20220109" #define BACKEND_VER "20220112"
#define EOM "\x0d" #define EOM "\x0d"
#define TRUE 1 #define TRUE 1
@ -46,8 +46,9 @@ extern const struct rig_caps barrett4050_caps;
struct barrett_priv_data { struct barrett_priv_data {
char cmd_str[BARRETT_DATA_LEN]; /* command string buffer */ char cmd_str[BARRETT_DATA_LEN]; /* command string buffer */
char ret_data[BARRETT_RET_LEN]; /* returned data--max value, most are less */ char ret_data[BARRETT_RET_LEN]; /* returned data--max value, most are less */
char split; /* split on/off */ char split; /* split on/off */
int channel_base; /* base channel for 0-9 10-channel assignment if needed */
}; };
extern int barrett_transaction(RIG *rig, char *cmd, int expected, char **result); extern int barrett_transaction(RIG *rig, char *cmd, int expected, char **result);
@ -55,7 +56,7 @@ extern int barrett_transaction(RIG *rig, char *cmd, int expected, char **result)
extern int barrett_init(RIG *rig); extern int barrett_init(RIG *rig);
extern int barrett_cleanup(RIG *rig); extern int barrett_cleanup(RIG *rig);
extern int barrett_open(RIG *rig); extern int barrett_open(RIG *rig);
extern int barrett_set_freq(RIG *rig, vfo_t vfo, freq_t freq); extern int barrett950_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
extern int barrett_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); extern int barrett_get_freq(RIG *rig, vfo_t vfo, freq_t *freq);
extern int barrett_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); extern int barrett_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
extern int barrett_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, extern int barrett_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode,