kopia lustrzana https://github.com/Hamlib/Hamlib
rigctld can now see RIG_LEVEL values correctly
https://github.com/Hamlib/Hamlib/issues/1305pull/1330/head
rodzic
412221d346
commit
a6de41e206
|
@ -2630,6 +2630,55 @@ struct rig_state {
|
|||
freq_t offset_vfoa; /*!< Offset to apply to VFOA/Main set_freq */
|
||||
freq_t offset_vfob; /*!< Offset to apply to VFOB/Sub set_freq */
|
||||
struct multicast_s *multicast; /*!< Pointer to multicast server data */
|
||||
// Adding a number of items so netrigctl can see the real rig information
|
||||
// Eventually may want to add these so that rigctld can see more of the backend
|
||||
// But that will come later if requested -- for now they just fill out dumpstate.c
|
||||
rig_model_t rig_model; /*!< Rig model. */
|
||||
const char *model_name; /*!< Model name. */
|
||||
const char *mfg_name; /*!< Manufacturer. */
|
||||
const char *version; /*!< Driver version. */
|
||||
const char *copyright; /*!< Copyright info. */
|
||||
enum rig_status_e status; /*!< Driver status. */
|
||||
int rig_type; /*!< Rig type. */
|
||||
ptt_type_t ptt_type; /*!< Type of the PTT port. */
|
||||
dcd_type_t dcd_type; /*!< Type of the DCD port. */
|
||||
rig_port_t port_type; /*!< Type of communication port. */
|
||||
int serial_rate_min; /*!< Minimum serial speed. */
|
||||
int serial_rate_max; /*!< Maximum serial speed. */
|
||||
int serial_data_bits; /*!< Number of data bits. */
|
||||
int serial_stop_bits; /*!< Number of stop bits. */
|
||||
enum serial_parity_e serial_parity; /*!< Parity. */
|
||||
enum serial_handshake_e serial_handshake; /*!< Handshake. */
|
||||
int write_delay; /*!< Delay between each byte sent out, in mS */
|
||||
int post_write_delay; /*!< Delay between each commands send out, in mS */
|
||||
int timeout; /*!< Timeout, in mS */
|
||||
int retry; /*!< Maximum number of retries if command fails, 0 to disable */
|
||||
int targetable_vfo; /*!< Bit field list of direct VFO access commands */
|
||||
int async_data_supported; /*!< Indicates that rig is capable of outputting asynchronous data updates, such as transceive state updates or spectrum data. 1 if true, 0 otherwise. */
|
||||
int agc_level_count; /*!< Number of supported AGC levels. Zero indicates all modes should be available (for backwards-compatibility). */
|
||||
enum agc_level_e agc_levels[HAMLIB_MAX_AGC_LEVELS]; /*!< Supported AGC levels */
|
||||
tone_t *ctcss_list; /*!< CTCSS tones list, zero ended */
|
||||
tone_t *dcs_list; /*!< DCS code list, zero ended */
|
||||
vfo_op_t vfo_ops; /*!< VFO op bit field list */
|
||||
scan_t scan_ops; /*!< Scan bit field list */
|
||||
int transceive; /*!< \deprecated Use async_data_supported instead */
|
||||
int bank_qty; /*!< Number of banks */
|
||||
int chan_desc_sz; /*!< Max length of memory channel name */
|
||||
freq_range_t rx_range_list1[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #1 */
|
||||
freq_range_t tx_range_list1[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #1 */
|
||||
freq_range_t rx_range_list2[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #2 */
|
||||
freq_range_t tx_range_list2[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #2 */
|
||||
freq_range_t rx_range_list3[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #3 */
|
||||
freq_range_t tx_range_list3[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #3 */
|
||||
freq_range_t rx_range_list4[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #4 */
|
||||
freq_range_t tx_range_list4[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #4 */
|
||||
freq_range_t rx_range_list5[HAMLIB_FRQRANGESIZ]; /*!< Receive frequency range list #5 */
|
||||
freq_range_t tx_range_list5[HAMLIB_FRQRANGESIZ]; /*!< Transmit frequency range list #5 */
|
||||
struct rig_spectrum_scope spectrum_scopes[HAMLIB_MAX_SPECTRUM_SCOPES]; /*!< Supported spectrum scopes. The array index must match the scope ID. Last entry must have NULL name. */
|
||||
enum rig_spectrum_mode_e spectrum_modes[HAMLIB_MAX_SPECTRUM_MODES]; /*!< Supported spectrum scope modes. Last entry must be RIG_SPECTRUM_MODE_NONE. */
|
||||
freq_t spectrum_spans[HAMLIB_MAX_SPECTRUM_SPANS]; /*!< Supported spectrum scope frequency spans in Hz in center mode. Last entry must be 0. */
|
||||
struct rig_spectrum_avg_mode spectrum_avg_modes[HAMLIB_MAX_SPECTRUM_AVG_MODES]; /*!< Supported spectrum scope averaging modes. Last entry must have NULL name. */
|
||||
int spectrum_attenuator[HAMLIB_MAXDBLSTSIZ]; /*!< Spectrum attenuator list in dB, 0 terminated */
|
||||
};
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
|
|
|
@ -263,7 +263,7 @@ static int netrigctl_open(RIG *rig)
|
|||
SNPRINTF(cmd, sizeof(cmd), "\\chk_vfo\n");
|
||||
ret = netrigctl_transaction(rig, cmd, strlen(cmd), buf);
|
||||
|
||||
if (sscanf(buf, "CHKVFO %d", &priv->rigctld_vfo_mode) == 1)
|
||||
if (sscanf(buf, "%d", &priv->rigctld_vfo_mode) == 1)
|
||||
{
|
||||
rig->state.vfo_opt = priv->rigctld_vfo_mode;
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: chkvfo=%d\n", __func__, priv->rigctld_vfo_mode);
|
||||
|
@ -619,11 +619,6 @@ static int netrigctl_open(RIG *rig)
|
|||
|
||||
rig->caps->has_set_parm = rs->has_set_parm = strtoll(buf, NULL, 0);
|
||||
|
||||
#if 0
|
||||
gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */
|
||||
gran_t parm_gran[RIG_SETTING_MAX]; /*!< parm granularity */
|
||||
#endif
|
||||
|
||||
for (i = 0; i < HAMLIB_FRQRANGESIZ
|
||||
&& !RIG_IS_FRNG_END(rs->rx_range_list[i]); i++)
|
||||
{
|
||||
|
@ -835,6 +830,64 @@ static int netrigctl_open(RIG *rig)
|
|||
p = strtok(NULL, " ");
|
||||
}
|
||||
}
|
||||
else if (strcmp(setting, "level_gran") == 0)
|
||||
{
|
||||
char *p = strtok(value, ";");
|
||||
|
||||
for (i = 0; p != NULL && i < RIG_SETTING_MAX; ++i)
|
||||
{
|
||||
int level;
|
||||
sscanf(p, "%d", &level);
|
||||
|
||||
if (RIG_LEVEL_IS_FLOAT(level))
|
||||
{
|
||||
double min, max, step;
|
||||
sscanf(p, "%*d=%lf,%lf,%lf", &min, &max, &step);
|
||||
rs->level_gran[i].min.f = min;
|
||||
rs->level_gran[i].max.f = max;
|
||||
rs->level_gran[i].step.f = step;
|
||||
}
|
||||
else
|
||||
{
|
||||
int min, max, step;
|
||||
sscanf(p, "%*d=%d,%d,%d", &min, &max, &step);
|
||||
rs->level_gran[i].min.i = min;
|
||||
rs->level_gran[i].max.i = max;
|
||||
rs->level_gran[i].step.i = step;
|
||||
|
||||
}
|
||||
|
||||
p = strtok(NULL, ";");
|
||||
}
|
||||
}
|
||||
else if (strcmp(setting, "parm_gran") == 0)
|
||||
{
|
||||
char *p = strtok(value, ";");
|
||||
for (i = 0; p != NULL && i < RIG_SETTING_MAX; ++i)
|
||||
{
|
||||
int level;
|
||||
sscanf(p, "%d", &level);
|
||||
|
||||
if (RIG_LEVEL_IS_FLOAT(level))
|
||||
{
|
||||
double min, max, step;
|
||||
sscanf(p, "%*d=%lf,%lf,%lf", &min, &max, &step);
|
||||
rs->parm_gran[i].min.f = min;
|
||||
rs->parm_gran[i].max.f = max;
|
||||
rs->parm_gran[i].step.f = step;
|
||||
}
|
||||
else
|
||||
{
|
||||
int min, max, step;
|
||||
sscanf(p, "%*d=%d,%d,%d", &min, &max, &step);
|
||||
rs->parm_gran[i].min.i = min;
|
||||
rs->parm_gran[i].max.i = max;
|
||||
rs->parm_gran[i].step.i = step;
|
||||
}
|
||||
p = strtok(NULL, ";");
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// not an error -- just a warning for backward compatibility
|
||||
|
@ -2746,7 +2799,7 @@ struct rig_caps netrigctl_caps =
|
|||
RIG_MODEL(RIG_MODEL_NETRIGCTL),
|
||||
.model_name = "NET rigctl",
|
||||
.mfg_name = "Hamlib",
|
||||
.version = "20230503.0",
|
||||
.version = "20230602.0",
|
||||
.copyright = "LGPL",
|
||||
.status = RIG_STATUS_STABLE,
|
||||
.rig_type = RIG_TYPE_OTHER,
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
[LVL_SWR] = { .min = { .f = 0 }, .max = { .f = 5.0 }, .step = { .f = 1.0f/255.0f } },
|
||||
[LVL_BAND_SELECT] = { .min = { .i = 0 }, .max = { .i = 16 }, .step = { .i = 1 } },
|
||||
// most recent rigs seem to have 15 as the maximum -- other values can be set in the backend
|
||||
[LVL_NR] = { .min = { .i = 1 }, .max = { .i = 15 }, .step = { .i = 1 } },
|
||||
[LVL_NR] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/15.0f } },
|
||||
/* levels with 0-1 values -- increment based on rig's range */
|
||||
[LVL_AF] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
|
||||
[LVL_RF] = { .min = { .f = 0 }, .max = { .f = 1 }, .step = { .f = 1.0f/255.0f } },
|
||||
|
|
|
@ -669,6 +669,11 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model)
|
|||
//return(NULL); // this is not fatal
|
||||
}
|
||||
|
||||
if (rs->level_gran)
|
||||
{
|
||||
memcpy(rs->level_gran, rig->caps->level_gran, sizeof(rs->level_gran));
|
||||
}
|
||||
|
||||
#if 0 // this is no longer applicable -- replace it with something?
|
||||
|
||||
// we need to be able to figure out what model radio we have
|
||||
|
|
|
@ -19,7 +19,7 @@ bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rig
|
|||
#check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid testsecurity
|
||||
check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels
|
||||
|
||||
RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c uthash.h
|
||||
RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h
|
||||
ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h
|
||||
AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c uthash.h
|
||||
|
||||
|
|
Plik diff jest za duży
Load Diff
|
@ -553,6 +553,9 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
rig_close(my_rig);
|
||||
dumpstate(my_rig, stdout);
|
||||
rig_close(my_rig);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
dumpcaps(my_rig, stdout);
|
||||
|
|
|
@ -4354,7 +4354,18 @@ declare_proto_rig(dump_caps)
|
|||
{
|
||||
ENTERFUNC2;
|
||||
|
||||
dumpcaps(rig, fout);
|
||||
#if 1
|
||||
if (rig->caps->rig_model == RIG_MODEL_NETRIGCTL)
|
||||
{
|
||||
char cmd[32];
|
||||
SNPRINTF(cmd, sizeof(cmd), "\\dump_caps\n");
|
||||
dumpstate(rig, fout);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
dumpcaps(rig, fout);
|
||||
}
|
||||
|
||||
RETURNFUNC2(RIG_OK);
|
||||
}
|
||||
|
@ -4467,6 +4478,7 @@ declare_proto_rig(dump_state)
|
|||
// protocol 1 allows fields can be listed/processed in any order
|
||||
// protocol 1 fields can be multi-line -- just write the thing to allow for it
|
||||
// backward compatible as new values will just generate warnings
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: chk_vfo_executed=%d\n", __func__, chk_vfo_executed);
|
||||
if (chk_vfo_executed) // for 3.3 compatiblility
|
||||
{
|
||||
fprintf(fout, "vfo_ops=0x%x\n", rig->caps->vfo_ops);
|
||||
|
@ -4523,14 +4535,43 @@ declare_proto_rig(dump_state)
|
|||
fprintf(fout, "\n");
|
||||
}
|
||||
|
||||
|
||||
fprintf(fout, "level_gran=");
|
||||
|
||||
for (i = 0; i < RIG_SETTING_MAX; ++i)
|
||||
{
|
||||
if (RIG_LEVEL_IS_FLOAT(i))
|
||||
{
|
||||
fprintf(fout, "%d=%g,%g,%g;", i, rig->state.level_gran[i].min.f,
|
||||
rig->state.level_gran[i].max.f, rig->state.level_gran[i].step.f);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(fout, "%d=%d,%d,%d;", i, rig->state.level_gran[i].min.i,
|
||||
rig->state.level_gran[i].max.i, rig->state.level_gran[i].step.i);
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(fout, "\nparm_gran=");
|
||||
|
||||
for (i = 0; i < RIG_SETTING_MAX; ++i)
|
||||
{
|
||||
if (RIG_LEVEL_IS_FLOAT(i))
|
||||
{
|
||||
fprintf(fout, "%d=%g,%g,%g;", i, rig->state.parm_gran[i].min.f,
|
||||
rig->state.parm_gran[i].max.f, rig->state.parm_gran[i].step.f);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(fout, "%d=%d,%d,%d;", i, rig->state.level_gran[i].min.i,
|
||||
rig->state.level_gran[i].max.i, rig->state.level_gran[i].step.i);
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(fout, "\n");
|
||||
fprintf(fout, "done\n");
|
||||
}
|
||||
|
||||
#if 0 // why isn't this implemented? Does anybody care?
|
||||
gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */
|
||||
gran_t parm_gran[RIG_SETTING_MAX]; /*!< parm granularity */
|
||||
#endif
|
||||
|
||||
RETURNFUNC2(RIG_OK);
|
||||
}
|
||||
|
||||
|
@ -5054,6 +5095,7 @@ declare_proto_rig(chk_vfo)
|
|||
{
|
||||
ENTERFUNC2;
|
||||
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: **********************************\n", __func__);
|
||||
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
|
||||
{
|
||||
fprintf(fout, "%s: ", cmd->arg1); /* i.e. "Frequency" */
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
*/
|
||||
|
||||
int dumpcaps(RIG *, FILE *);
|
||||
int dumpstate(RIG *, FILE *);
|
||||
int dumpconf(RIG *, FILE *);
|
||||
|
||||
/*
|
||||
|
|
Ładowanie…
Reference in New Issue