- Tx VFO arg checking in set_split_vfo()

- get/set channel improvements (stdout flushing, ext_levels, ..)


git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2928 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.11
Stéphane Fillod, F8CFE 2010-05-28 19:47:35 +00:00
rodzic 00db7c42f0
commit a702f4a8ae
2 zmienionych plików z 77 dodań i 40 usunięć

Wyświetl plik

@ -1076,9 +1076,13 @@ declare_proto_rig(get_split_mode)
declare_proto_rig(set_split_vfo)
{
int split;
vfo_t tx_vfo;
CHKSCN1ARG(sscanf(arg1, "%d", &split));
return rig_set_split_vfo(rig, vfo, (split_t) split, rig_parse_vfo(arg2));
tx_vfo = rig_parse_vfo(arg2);
if (tx_vfo == RIG_VFO_NONE)
return -RIG_EINVAL;
return rig_set_split_vfo(rig, vfo, (split_t) split, tx_vfo);
}
/* 's' */
@ -1524,8 +1528,6 @@ declare_proto_rig(set_channel)
int status;
char s[16];
rig_debug(RIG_DEBUG_TRACE, "set_channel: arg1[0] = %d\n", arg1[0]);
memset(&chan, 0, sizeof(channel_t));
if (isdigit(arg1[0])) {
@ -1543,149 +1545,150 @@ declare_proto_rig(set_channel)
chan.channel_num = 0;
/* TODO: mem_caps for VFO! */
/* either from mem, or reverse computed from caps */
}
if (!mem_caps)
return -RIG_ECONF;
rig_debug(RIG_DEBUG_TRACE, "set_channel: mem_caps->bank_num = %d, mem_caps->freq = %d\n", mem_caps->bank_num, mem_caps->freq);
if (mem_caps->bank_num) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "Bank Num: ");
fprintf_flush(fout, "Bank Num: ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.bank_num));
}
#if 0
if (mem_caps->vfo) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "vfo (VFOA,MEM,etc...): ");
fprintf_flush(fout, "vfo (VFOA,MEM,etc...): ");
CHKSCN1ARG(scanfc(fin, "%s", s));
chan.vfo = rig_parse_vfo(s);
}
#endif
if (mem_caps->ant) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "ant: ");
fprintf_flush(fout, "ant: ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.ant));
}
if (mem_caps->freq) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "Frequency: ");
fprintf_flush(fout, "Frequency: ");
CHKSCN1ARG(scanfc(fin, "%"SCNfreq, &chan.freq));
}
if (mem_caps->mode) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "mode (FM,LSB,etc...): ");
fprintf_flush(fout, "mode (FM,LSB,etc...): ");
CHKSCN1ARG(scanfc(fin, "%s", s));
chan.mode = rig_parse_mode(s);
}
if (mem_caps->width) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "width: ");
fprintf_flush(fout, "width: ");
CHKSCN1ARG(scanfc(fin, "%ld", &chan.width));
}
if (mem_caps->tx_freq) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "tx freq (VFOA,MEM,etc...): ");
fprintf_flush(fout, "tx freq: ");
CHKSCN1ARG(scanfc(fin, "%"SCNfreq, &chan.tx_freq));
}
if (mem_caps->tx_mode) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "tx mode (FM,LSB,etc...): ");
fprintf_flush(fout, "tx mode (FM,LSB,etc...): ");
CHKSCN1ARG(scanfc(fin, "%s", s));
chan.tx_mode = rig_parse_mode(s);
}
if (mem_caps->tx_width) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "tx width: ");
fprintf_flush(fout, "tx width: ");
CHKSCN1ARG(scanfc(fin, "%ld", &chan.tx_width));
}
if (mem_caps->split) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "split (0,1): ");
fprintf_flush(fout, "split (0,1): ");
CHKSCN1ARG(scanfc(fin, "%d", &status));
chan.split = status;
}
if (mem_caps->tx_vfo) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "tx vfo (VFOA,MEM,etc...): ");
fprintf_flush(fout, "tx vfo (VFOA,MEM,etc...): ");
CHKSCN1ARG(scanfc(fin, "%s", s));
chan.tx_vfo = rig_parse_vfo(s);
}
if (mem_caps->rptr_shift) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "rptr shift (+-0): ");
fprintf_flush(fout, "rptr shift (+-0): ");
CHKSCN1ARG(scanfc(fin, "%s", s));
chan.rptr_shift = rig_parse_rptr_shift(s);
}
if (mem_caps->rptr_offs) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "rptr offset: ");
fprintf_flush(fout, "rptr offset: ");
CHKSCN1ARG(scanfc(fin, "%ld", &chan.rptr_offs));
}
if (mem_caps->tuning_step) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "tuning step: ");
fprintf_flush(fout, "tuning step: ");
CHKSCN1ARG(scanfc(fin, "%ld", &chan.tuning_step));
}
if (mem_caps->rit) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "rit (Hz,0=off): ");
fprintf_flush(fout, "rit (Hz,0=off): ");
CHKSCN1ARG(scanfc(fin, "%ld", &chan.rit));
}
if (mem_caps->xit) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "xit (Hz,0=off): ");
fprintf_flush(fout, "xit (Hz,0=off): ");
CHKSCN1ARG(scanfc(fin, "%ld", &chan.xit));
}
if (mem_caps->funcs) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "funcs: ");
fprintf_flush(fout, "funcs: ");
CHKSCN1ARG(scanfc(fin, "%lx", &chan.funcs));
}
#if 0
/* for all levels, ask */
/* for all levels (except READONLY), ask */
if (mem_caps->levels)
sscanf(arg1, "%d", &chan.levels);
#endif
if (mem_caps->ctcss_tone) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "ctcss tone freq in tenth of Hz (0=off): ");
fprintf_flush(fout, "ctcss tone freq in tenth of Hz (0=off): ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.ctcss_tone));
}
if (mem_caps->ctcss_sql) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "ctcss sql freq in tenth of Hz (0=off): ");
fprintf_flush(fout, "ctcss sql freq in tenth of Hz (0=off): ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.ctcss_sql));
}
if (mem_caps->dcs_code) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "dcs code: ");
fprintf_flush(fout, "dcs code: ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.dcs_code));
}
if (mem_caps->dcs_sql) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "dcs sql: ");
fprintf_flush(fout, "dcs sql: ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.dcs_sql));
}
if (mem_caps->scan_group) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "scan group: ");
fprintf_flush(fout, "scan group: ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.scan_group));
}
if (mem_caps->flags) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "flags: ");
fprintf_flush(fout, "flags: ");
CHKSCN1ARG(scanfc(fin, "%d", &chan.flags));
}
if (mem_caps->channel_desc) {
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
fprintf(fout, "channel desc: ");
fprintf_flush(fout, "channel desc: ");
CHKSCN1ARG(scanfc(fin, "%s", s));
strcpy(chan.channel_desc, s);
}
#if 0
/* TODO: same as levels */
/* TODO: same as levels, allocate/free the array */
if (mem_caps->ext_levels)
sscanf(arg1, "%d", &chan.ext_levels);
sscanf(arg1, "%d", &chan.ext_levels[i].val.i);
#endif
status = rig_set_channel(rig, &chan);
@ -1712,7 +1715,11 @@ declare_proto_rig(get_channel)
status = rig_get_channel(rig, &chan);
if (status != RIG_OK)
return status;
dump_chan(fout, rig, &chan);
status = dump_chan(fout, rig, &chan);
if (chan.ext_levels)
free(chan.ext_levels);
return status;
}
@ -1802,8 +1809,7 @@ declare_proto_rig(get_info)
return RIG_OK;
}
void dump_chan(FILE *fout, RIG *rig, channel_t *chan)
int dump_chan(FILE *fout, RIG *rig, channel_t *chan)
{
int idx, firstloop=1;
char freqbuf[16];
@ -1854,7 +1860,7 @@ void dump_chan(FILE *fout, RIG *rig, channel_t *chan)
(!rig_has_set_level(rig, level) && !rig_has_get_level(rig, level)))
continue;
level_s = rig_strlevel(level);
if (!level_s)
if (!level_s || level_s[0] == '\0')
continue; /* duh! */
if (firstloop)
firstloop = 0;
@ -1865,7 +1871,40 @@ void dump_chan(FILE *fout, RIG *rig, channel_t *chan)
else
fprintf(fout, " %s: %d", level_s, chan->levels[idx].i);
}
/* ext_levels */
for (idx=0; chan->ext_levels && !RIG_IS_EXT_END(chan->ext_levels[idx]); idx++) {
const struct confparams *cfp;
char lstr[32];
cfp = rig_ext_lookup_tok(rig, chan->ext_levels[idx].token);
if (!cfp)
return -RIG_EINVAL;
switch (cfp->type) {
case RIG_CONF_STRING:
strcpy(lstr, chan->ext_levels[idx].val.s);
break;
case RIG_CONF_COMBO:
sprintf(lstr, "%d", chan->ext_levels[idx].val.i);
break;
case RIG_CONF_NUMERIC:
sprintf(lstr, "%f", chan->ext_levels[idx].val.f);
break;
case RIG_CONF_CHECKBUTTON:
sprintf(lstr, "%s", chan->ext_levels[idx].val.i ? "ON" : "OFF");
break;
case RIG_CONF_BUTTON:
continue;
default:
return -RIG_EINTERNAL;
}
fprintf(fout, ",\t %s: %s", cfp->name, lstr);
}
fprintf(fout, "\n");
return RIG_OK;
}
/* '1' */

Wyświetl plik

@ -1,12 +1,10 @@
/*
* rigctl_parse.h - (C) Stephane Fillod 2000-2008
* rigctl_parse.h - (C) Stephane Fillod 2000-2010
*
* This program test/control a radio using Hamlib.
* It takes commands in interactive mode as well as
* from command line options.
*
* $Id: rigctl_parse.h,v 1.3 2008-05-23 14:26:09 fillods Exp $
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -43,7 +41,7 @@ int dumpconf (RIG *, FILE *);
void usage_rig(FILE *);
void version();
void list_models();
void dump_chan(FILE *, RIG*, channel_t*);
int dump_chan(FILE *, RIG*, channel_t*);
int print_conf_list(const struct confparams *cfp, rig_ptr_t data);
int set_conf(RIG *my_rig, char *conf_parms);