Change L METER to allow meter names in addition to numeric

Change l METER to return meter number=name instead of just number
Hopefully doesn't mess up anybody using this function via rigctl/rigctld uf they parsing the number correctly.
It's easier for users with to use/see text names for both set/get
https://github.com/Hamlib/Hamlib/issues/1369
pull/1349/head
Mike Black W9MDB 2023-08-20 16:03:25 -05:00
rodzic 1b0f0ec422
commit cca3891362
5 zmienionych plików z 54 dodań i 8 usunięć

2
NEWS
Wyświetl plik

@ -13,6 +13,8 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP * Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6 Version 4.6
* rig set level METER can now take SWR,COMP,ALC,IC/ID,DB,PO,VDD,TEMP arguments to set which meter to display
* reg get level displays meter number=name now
* Added parm BANDSELECT for Yaesu rigs * Added parm BANDSELECT for Yaesu rigs
'p BANDSELECT' returns current band of VFOA 'p BANDSELECT' returns current band of VFOA
'P BANDSELECT BAND160M' example selects the 160M band 'P BANDSELECT BAND160M' example selects the 160M band

Wyświetl plik

@ -985,6 +985,8 @@ Lookup - if level shows 0/0/0 then it's probably a lookup value
SPECTRUM_MODE 0=None, 1=Center, 2=Fixed, 3=Center Scroll, 4=Fixed Scroll SPECTRUM_MODE 0=None, 1=Center, 2=Fixed, 3=Center Scroll, 4=Fixed Scroll
SPECTRUM_AVG rig specific SPECTRUM_AVG rig specific
METER -- SWR,COMP,ALC,IC/ID,DB,PO,VDD,TEMP or can use the numbers above in Lookup l METER returns the meter number=name
Watts Watts
RFPOWER_METER_WATTS RFPOWER_METER_WATTS

Wyświetl plik

@ -198,19 +198,17 @@ void frameParse(int fd, unsigned char *frame, int len)
break; break;
case 0x0f: case 0x0f:
if (frame[5] == 0) { split = 0; }
else if (frame[5] == 1) { split = 1; }
else { frame[6] = split; }
if (frame[5] == 0xfd) if (frame[5] == 0xfd)
{ {
printf("get split %d\n", split); printf("get split %d\n", split);
frame[7] = 0xfd; frame[5] = split;
n = write(fd, frame, 8); frame[6] = 0xfd;
n = write(fd, frame, 7);
} }
else else
{ {
printf("set split %d\n", 1); printf("set split %d\n", 1);
split = frame[5];
frame[4] = 0xfb; frame[4] = 0xfb;
frame[5] = 0xfd; frame[5] = 0xfd;
n = write(fd, frame, 6); n = write(fd, frame, 6);

Wyświetl plik

@ -14,7 +14,7 @@ endif
DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum DISTCLEANFILES = rigctl.log rigctl.sum testbcd.log testbcd.sum
bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rigctltcp rigctlsync ampctl ampctld rigtestmcast rigtestmcastrx $(TESTLIBUSB) bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rigctltcp rigctlsync ampctl ampctld rigtestmcast rigtestmcastrx $(TESTLIBUSB) rigfreqwalk
#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 testsecurity
check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels testmW2power check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels testmW2power

Wyświetl plik

@ -3272,6 +3272,13 @@ declare_proto_rig(set_level)
level = rig_parse_level(arg1); level = rig_parse_level(arg1);
if ((!strcmp(arg2, "?") || arg2[0]==0) && level == RIG_LEVEL_METER)
{
fprintf(fout, "COMP ALC SWR ID/IC VDD DB PO TEMP%c", resp_sep);
RETURNFUNC2(RIG_OK);
}
// some Java apps send comma in international setups so substitute period // some Java apps send comma in international setups so substitute period
char *p = strchr(arg2, ','); char *p = strchr(arg2, ',');
@ -3288,6 +3295,7 @@ declare_proto_rig(set_level)
RETURNFUNC2(-RIG_ENAVAIL); /* no such parameter */ RETURNFUNC2(-RIG_ENAVAIL); /* no such parameter */
} }
switch (cfp->type) switch (cfp->type)
{ {
case RIG_CONF_BUTTON: case RIG_CONF_BUTTON:
@ -3315,6 +3323,23 @@ declare_proto_rig(set_level)
RETURNFUNC2(rig_set_ext_level(rig, vfo, cfp->token, val)); RETURNFUNC2(rig_set_ext_level(rig, vfo, cfp->token, val));
} }
int dummy;
if (level == RIG_LEVEL_METER && sscanf(arg2,"%d",&dummy)==0)
{
if (strcmp(arg2,"COMP")==0) arg2 = "2";
else if (strcmp(arg2,"ALC")==0) arg2 = "4";
else if (strcmp(arg2,"SWR")==0) arg2 = "1";
else if (strcmp(arg2,"ID")==0 || strcmp(arg2,"IC")==0) arg2 = "8";
else if (strcmp(arg2,"VDD")==0) arg2 = "64";
else if (strcmp(arg2, "DB")==0) arg2 = "16";
else if (strcmp(arg2, "PO")==0) arg2 = "32";
else if (strcmp(arg2, "TEMP")==0) arg2 = "128";
else
{
rig_debug(RIG_DEBUG_ERR, "%s: unknown meter=%s, only know COMP,ALC,SWR,ID/IC,VDD,DB,PO,TEMP\n", __func__, arg2);
RETURNFUNC2(-RIG_EINVAL);
}
}
if (RIG_LEVEL_IS_FLOAT(level)) if (RIG_LEVEL_IS_FLOAT(level))
{ {
CHKSCN1ARG(sscanf(arg2, "%f", &val.f)); CHKSCN1ARG(sscanf(arg2, "%f", &val.f));
@ -3352,7 +3377,6 @@ declare_proto_rig(get_level)
//fputc('\n', fout); //fputc('\n', fout);
RETURNFUNC2(RIG_OK); RETURNFUNC2(RIG_OK);
} }
level = rig_parse_level(arg1); level = rig_parse_level(arg1);
if (!rig_has_get_level(rig, level)) if (!rig_has_get_level(rig, level))
@ -3416,6 +3440,26 @@ declare_proto_rig(get_level)
{ {
fprintf(fout, "%s: ", cmd->arg2); fprintf(fout, "%s: ", cmd->arg2);
} }
if (level == RIG_LEVEL_METER && interactive && prompt)
{
// we will show text answers as they make morse sense for rigtl
switch(val.i)
{
case RIG_METER_COMP: fprintf(fout, "%d=%s%c", val.i, "COMP", resp_sep);break;
case RIG_METER_ALC: fprintf(fout, "%d=%s%c", val.i, "ALC", resp_sep);break;
case RIG_METER_SWR: fprintf(fout, "%d=%s%c", val.i, "SWR", resp_sep);break;
case RIG_METER_IC: fprintf(fout, "%d=%s%c", val.i, "IC", resp_sep);break;
case RIG_METER_VDD: fprintf(fout, "%d=%s%c", val.i, "VDD", resp_sep);break;
case RIG_METER_DB: fprintf(fout, "%d=%s%c", val.i, "DB", resp_sep);break;
case RIG_METER_PO: fprintf(fout, "%d=%s%c", val.i, "PO", resp_sep);break;
case RIG_METER_TEMP: fprintf(fout, "%d=%s%c", val.i, "TEMP", resp_sep);break;
default:
rig_debug(RIG_DEBUG_ERR, "%s: unknown meter=%d, only know COMP,ALC,SWR,ID/IC,VDD,DB,PO,TEMP\n", __func__, val.i);
RETURNFUNC2(-RIG_EINVAL);
}
RETURNFUNC(RIG_OK);
}
if (RIG_LEVEL_IS_FLOAT(level)) if (RIG_LEVEL_IS_FLOAT(level))
{ {