From 2e9922b824761ca39e05ab449f0a3bfa3390d8f9 Mon Sep 17 00:00:00 2001 From: Mikael Nousiainen Date: Wed, 2 Dec 2020 22:35:38 +0200 Subject: [PATCH] Add rotator funcs/levels/parms to rotator caps dump (cherry picked from commit a661bee28394a9b19d3c4ab87aec36b8fe21a0ea) --- rigs/dummy/rot_dummy.c | 5 +++-- src/idx_builtin.h | 5 +++++ tests/dumpcaps.c | 40 ++++----------------------------- tests/dumpcaps_rot.c | 51 ++++++++++++++++++++++++++++++++++++++++++ tests/sprintflst.c | 35 +++++++++++++++++++++++++++++ tests/sprintflst.h | 1 + 6 files changed, 99 insertions(+), 38 deletions(-) diff --git a/rigs/dummy/rot_dummy.c b/rigs/dummy/rot_dummy.c index 8fd9c370e..5cd317830 100644 --- a/rigs/dummy/rot_dummy.c +++ b/rigs/dummy/rot_dummy.c @@ -31,6 +31,7 @@ #include "hamlib/rotator.h" #include "dummy_common.h" #include "register.h" +#include "idx_builtin.h" #include "rot_dummy.h" @@ -847,7 +848,7 @@ const struct rot_caps dummy_rot_caps = ROT_MODEL(ROT_MODEL_DUMMY), .model_name = "Dummy", .mfg_name = "Hamlib", - .version = "20200310.0", + .version = "20201202.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rot_type = ROT_TYPE_AZEL, @@ -867,7 +868,7 @@ const struct rot_caps dummy_rot_caps = .has_get_parm = DUMMY_ROT_PARM, .has_set_parm = ROT_PARM_SET(DUMMY_ROT_PARM), - .level_gran = { [ROT_LEVEL_SPEED] = { .min = { .i = 1 }, .max = { .i = 4 }, .step = { .i = 1 } } }, + .level_gran = { [ROT_LVL_SPEED] = { .min = { .i = 1 }, .max = { .i = 4 }, .step = { .i = 1 } } }, .extlevels = dummy_ext_levels, .extfuncs = dummy_ext_funcs, diff --git a/src/idx_builtin.h b/src/idx_builtin.h index d52b27798..220246faf 100644 --- a/src/idx_builtin.h +++ b/src/idx_builtin.h @@ -23,6 +23,7 @@ #define _IDX_BUILTIN_H 1 #include +#include /* * only for Hamlib internal use (backend caps) @@ -185,5 +186,9 @@ #define PARM_BAT setting2idx_builtin(RIG_PARM_BAT) #define PARM_KEYLIGHT setting2idx_builtin(RIG_PARM_KEYLIGHT) +/* Rotator levels */ + +#define ROT_LVL_SPEED setting2idx_builtin(ROT_LEVEL_SPEED) + #endif /* _IDX_BUILTIN_H */ diff --git a/tests/dumpcaps.c b/tests/dumpcaps.c index 5617f8c1f..2a27f5d0c 100644 --- a/tests/dumpcaps.c +++ b/tests/dumpcaps.c @@ -33,12 +33,15 @@ #include "sprintflst.h" #include "rigctl_parse.h" -static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr); void range_print(FILE *fout, const struct freq_range_list range_list[], int rx); int range_sanity_check(const struct freq_range_list range_list[], int rx); int ts_sanity_check(const struct tuning_step_list tuning_step[]); static void dump_chan_caps(const channel_cap_t *chan, FILE *fout); +static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr) +{ + return print_ext_param(cfp, ptr); +} /* * the rig may be in rig_init state, but not opened @@ -832,41 +835,6 @@ int dumpcaps(RIG *rig, FILE *fout) return backend_warnings; } -static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr) -{ - int i; - fprintf((FILE *)ptr, "\t%s\n", cfp->name); - fprintf((FILE *)ptr, "\t\tType: %s\n", get_rig_conf_type(cfp->type)); - fprintf((FILE *)ptr, "\t\tDefault: %s\n", cfp->dflt != NULL ? cfp->dflt : ""); - fprintf((FILE *)ptr, "\t\tLabel: %s\n", cfp->label != NULL ? cfp->label : ""); - fprintf((FILE *)ptr, "\t\tTooltip: %s\n", - cfp->tooltip != NULL ? cfp->tooltip : ""); - - switch (cfp->type) - { - case RIG_CONF_NUMERIC: - fprintf((FILE *)ptr, "\t\tRange: %g..%g/%g\n", cfp->u.n.min, cfp->u.n.max, - cfp->u.n.step); - break; - - case RIG_CONF_COMBO: - fprintf((FILE *)ptr, "\t\tValues:"); - - for (i = 0; i < RIG_COMBO_MAX && cfp->u.c.combostr[i] != NULL; i++) - { - fprintf((FILE *)ptr, " %d=\"%s\"", i, cfp->u.c.combostr[i]); - } - - fprintf((FILE *)ptr, "\n"); - break; - - default: - break; - } - - return 1; /* process them all */ -} - void range_print(FILE *fout, const struct freq_range_list range_list[], int rx) { int i; diff --git a/tests/dumpcaps_rot.c b/tests/dumpcaps_rot.c index bc0b98b94..0f8def4f9 100644 --- a/tests/dumpcaps_rot.c +++ b/tests/dumpcaps_rot.c @@ -34,6 +34,11 @@ #include "rotctl_parse.h" +static int print_ext(ROT *rot, const struct confparams *cfp, rig_ptr_t ptr) +{ + return print_ext_param(cfp, ptr); +} + /* * the rot may be in rot_init state, but not opened */ @@ -41,6 +46,7 @@ int dumpcaps_rot(ROT *rot, FILE *fout) { const struct rot_caps *caps; int backend_warnings = 0; + static char prntbuf[1024]; if (!rot || !rot->caps) { @@ -140,6 +146,51 @@ int dumpcaps_rot(ROT *rot, FILE *fout) "Post Write delay:\t%dmS\n", caps->post_write_delay); + rot_sprintf_func(prntbuf, caps->has_get_func); + fprintf(fout, "Get functions: %s\n", prntbuf); + + rot_sprintf_func(prntbuf, caps->has_set_func); + fprintf(fout, "Set functions: %s\n", prntbuf); + + fprintf(fout, "Extra functions:\n"); + rot_ext_func_foreach(rot, print_ext, fout); + + rot_sprintf_level_gran(prntbuf, caps->has_get_level, caps->level_gran); + fprintf(fout, "Get level: %s\n", prntbuf); + + if ((caps->has_get_level & RIG_LEVEL_SQLSTAT)) + { + fprintf(fout, "Warning--backend uses deprecated SQLSTAT level!\n"); + backend_warnings++; + } + + rot_sprintf_level_gran(prntbuf, caps->has_set_level, caps->level_gran); + fprintf(fout, "Set level: %s\n", prntbuf); + + if (caps->has_set_level & ROT_LEVEL_READONLY_LIST) + { + fprintf(fout, "Warning--backend can set readonly levels!\n"); + backend_warnings++; + } + + fprintf(fout, "Extra levels:\n"); + rot_ext_level_foreach(rot, print_ext, fout); + + rot_sprintf_parm_gran(prntbuf, caps->has_get_parm, caps->parm_gran); + fprintf(fout, "Get parameters: %s\n", prntbuf); + + rot_sprintf_parm_gran(prntbuf, caps->has_set_parm, caps->parm_gran); + fprintf(fout, "Set parameters: %s\n", prntbuf); + + if (caps->has_set_parm & ROT_PARM_READONLY_LIST) + { + fprintf(fout, "Warning--backend can set readonly parms!\n"); + backend_warnings++; + } + + fprintf(fout, "Extra parameters:\n"); + rot_ext_parm_foreach(rot, print_ext, fout); + fprintf(fout, "Min Azimuth:\t\t%.2f\n", caps->min_az); fprintf(fout, "Max Azimuth:\t\t%.2f\n", caps->max_az); diff --git a/tests/sprintflst.c b/tests/sprintflst.c index 181d769f7..3782aee93 100644 --- a/tests/sprintflst.c +++ b/tests/sprintflst.c @@ -690,3 +690,38 @@ char *get_rig_conf_type(enum rig_conf_e type) return "UNKNOWN"; } + +int print_ext_param(const struct confparams *cfp, rig_ptr_t ptr) +{ + int i; + fprintf((FILE *)ptr, "\t%s\n", cfp->name); + fprintf((FILE *)ptr, "\t\tType: %s\n", get_rig_conf_type(cfp->type)); + fprintf((FILE *)ptr, "\t\tDefault: %s\n", cfp->dflt != NULL ? cfp->dflt : ""); + fprintf((FILE *)ptr, "\t\tLabel: %s\n", cfp->label != NULL ? cfp->label : ""); + fprintf((FILE *)ptr, "\t\tTooltip: %s\n", + cfp->tooltip != NULL ? cfp->tooltip : ""); + + switch (cfp->type) + { + case RIG_CONF_NUMERIC: + fprintf((FILE *)ptr, "\t\tRange: %g..%g/%g\n", cfp->u.n.min, cfp->u.n.max, + cfp->u.n.step); + break; + + case RIG_CONF_COMBO: + fprintf((FILE *)ptr, "\t\tValues:"); + + for (i = 0; i < RIG_COMBO_MAX && cfp->u.c.combostr[i] != NULL; i++) + { + fprintf((FILE *)ptr, " %d=\"%s\"", i, cfp->u.c.combostr[i]); + } + + fprintf((FILE *)ptr, "\n"); + break; + + default: + break; + } + + return 1; /* process them all */ +} diff --git a/tests/sprintflst.h b/tests/sprintflst.h index a1f142172..5fa2c624a 100644 --- a/tests/sprintflst.h +++ b/tests/sprintflst.h @@ -46,6 +46,7 @@ extern int rot_sprintf_parm_gran(char *str, setting_t parm, const gran_t *gran); extern int rig_sprintf_vfop(char *str, vfo_op_t op); extern int rig_sprintf_scan(char *str, scan_t rscan); extern char *get_rig_conf_type(enum rig_conf_e type); +int print_ext_param(const struct confparams *cfp, rig_ptr_t ptr); __END_DECLS