kopia lustrzana https://github.com/Hamlib/Hamlib
First attempt at fixing rigctl_parse return values and unnecessary rig re-open cycles
rodzic
27192d0c81
commit
90112b5769
|
@ -140,6 +140,15 @@ enum rig_errcode_e {
|
|||
RIG_EDOM /*!< 17 Argument out of domain of func */
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Determines if the given error code indicates a "soft" error
|
||||
* Soft errors are caused by invalid parameters and software/hardware features
|
||||
* and cannot be fixed by retries or by re-initializing hardware.
|
||||
*/
|
||||
#define RIG_IS_SOFT_ERRCODE(errcode) (errcode == RIG_EINVAL || errcode == RIG_ENIMPL || errcode == RIG_ERJCTED \
|
||||
|| errcode == RIG_ETRUNC || errcode == RIG_ENAVAIL || errcode == RIG_ENTARGET \
|
||||
|| errcode == RIG_EVFO || errcode == RIG_EDOM)
|
||||
|
||||
/**
|
||||
* \brief Token in the netrigctl protocol for returning error code
|
||||
*/
|
||||
|
|
|
@ -6532,20 +6532,6 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
|
|||
RETURNFUNC(retval);
|
||||
}
|
||||
|
||||
if ((ack_len >= 1 && ackbuf[0] != ACK) && (ack_len >= 2 && ackbuf[1] != NAK))
|
||||
{
|
||||
// if we don't get ACK/NAK some serial corruption occurred
|
||||
// so we'll call it a timeout for retry purposes
|
||||
RETURNFUNC(-RIG_ETIMEOUT);
|
||||
}
|
||||
|
||||
if (ack_len != 1 || (ack_len >= 1 && ackbuf[0] != ACK))
|
||||
{
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__,
|
||||
ackbuf[0], ack_len);
|
||||
RETURNFUNC(-RIG_ERJCTED);
|
||||
}
|
||||
|
||||
*status = ackbuf[1] == S_PWR_ON ? RIG_POWER_ON : RIG_POWER_OFF;
|
||||
}
|
||||
|
||||
|
@ -7385,13 +7371,6 @@ int icom_get_raw_buf(RIG *rig, int cmd, int subcmd, int subcmdbuflen,
|
|||
cmdhead += (subcmd == -1) ? 1 : 2;
|
||||
ack_len -= cmdhead;
|
||||
|
||||
if ((ack_len >= 1 && ackbuf[0] != ACK) && (ack_len >= 2 && ackbuf[1] != NAK))
|
||||
{
|
||||
// if we don't get ACK/NAK some serial corruption occurred
|
||||
// so we'll call it a timeout for retry purposes
|
||||
RETURNFUNC(-RIG_ETIMEOUT);
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: %d\n", __func__, ack_len);
|
||||
|
||||
if (*reslen < ack_len || res == NULL)
|
||||
|
|
|
@ -611,14 +611,9 @@ int main(int argc, char *argv[])
|
|||
interactive, prompt, &vfo_opt, send_cmd_term,
|
||||
&ext_resp, &resp_sep);
|
||||
|
||||
if (retcode == 2)
|
||||
{
|
||||
exitcode = 2;
|
||||
}
|
||||
|
||||
// if we get a hard error we try to reopen the rig again
|
||||
// this should cover short dropouts that can occur
|
||||
if (retcode == -RIG_EIO || retcode == 2)
|
||||
if (retcode < 0 && !RIG_IS_SOFT_ERRCODE(-retcode))
|
||||
{
|
||||
int retry = 3;
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: i/o error\n", __func__)
|
||||
|
@ -632,10 +627,9 @@ int main(int argc, char *argv[])
|
|||
rig_debug(RIG_DEBUG_ERR, "%s: rig_open retcode=%d\n", __func__, retcode);
|
||||
}
|
||||
while (retry-- > 0 && retcode != RIG_OK);
|
||||
|
||||
}
|
||||
}
|
||||
while (retcode == 0 || retcode == 2 || retcode == -RIG_ENAVAIL);
|
||||
while (retcode == RIG_OK || RIG_IS_SOFT_ERRCODE(-retcode));
|
||||
|
||||
if (interactive && prompt)
|
||||
{
|
||||
|
|
|
@ -65,7 +65,6 @@ extern int read_history();
|
|||
#include <hamlib/rig.h>
|
||||
#include "misc.h"
|
||||
#include "iofunc.h"
|
||||
#include "serial.h"
|
||||
#include "sprintflst.h"
|
||||
|
||||
#include "rigctl_parse.h"
|
||||
|
@ -662,7 +661,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#1? retcode=%d\n", __func__,
|
||||
retcode);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
if (cmd != 0xa)
|
||||
|
@ -681,12 +680,12 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%c", &cmd) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#2?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
}
|
||||
else if (cmd == '+' && prompt)
|
||||
{
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
if (cmd != '\\'
|
||||
|
@ -704,7 +703,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%c", &cmd) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#3?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
}
|
||||
else if (cmd != '\\'
|
||||
|
@ -717,7 +716,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
&& prompt)
|
||||
{
|
||||
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
/* command by name */
|
||||
|
@ -728,7 +727,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%c", pcmd) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#4?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
retcode = fscanf(fin, "%s", ++pcmd);
|
||||
|
@ -755,7 +754,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
fprintf_flush(fout, "\nRig command: ");
|
||||
}
|
||||
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
last_was_ret = 1;
|
||||
|
@ -773,11 +772,11 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%c", &cmd) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#6?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
my_rig->state.vfo_opt = *vfo_opt;
|
||||
|
@ -790,14 +789,14 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (interactive && !prompt) { fprintf(fout, "%s0\n", NETRIGCTL_RET); }
|
||||
|
||||
fflush(fout);
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
|
||||
if (cmd == '?')
|
||||
{
|
||||
usage_rig(fout);
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -807,11 +806,11 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
|
||||
if (EOF == retcode)
|
||||
{
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
else if (retcode < 0)
|
||||
{
|
||||
RETURNFUNC(retcode);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
else if ('\0' == command[1])
|
||||
{
|
||||
|
@ -832,7 +831,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
fprintf(stderr, "Command '%c' not found!\n", cmd);
|
||||
}
|
||||
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
if (!(cmd_entry->flags & ARG_NOVFO) && *vfo_opt)
|
||||
|
@ -850,7 +849,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%s", arg1) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#7?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
vfo = rig_parse_vfo(arg1);
|
||||
|
@ -866,7 +865,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
}
|
||||
else if (retcode < 0)
|
||||
{
|
||||
RETURNFUNC(retcode);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
vfo = rig_parse_vfo(arg1);
|
||||
|
@ -889,7 +888,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
|
||||
if (fgets(arg1, MAXARGSZ, fin) == NULL)
|
||||
{
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
if (arg1[0] == 0xa)
|
||||
|
@ -903,7 +902,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
|
||||
if (fgets(arg1, MAXARGSZ, fin) == NULL)
|
||||
{
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -931,11 +930,11 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(stderr, "Invalid arg for command '%s'\n",
|
||||
cmd_entry->name);
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
else if (retcode < 0)
|
||||
{
|
||||
RETURNFUNC(retcode);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
p1 = arg1;
|
||||
|
@ -959,7 +958,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%s", arg1) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#8?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
p1 = arg1;
|
||||
|
@ -976,7 +975,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
}
|
||||
else if (retcode < 0)
|
||||
{
|
||||
RETURNFUNC(retcode);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
p1 = arg1;
|
||||
|
@ -1005,7 +1004,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%s", arg2) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#9?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
p2 = arg2;
|
||||
|
@ -1019,11 +1018,11 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(stderr, "Invalid arg for command '%s'\n",
|
||||
cmd_entry->name);
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
else if (retcode < 0)
|
||||
{
|
||||
RETURNFUNC(retcode);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
p2 = arg2;
|
||||
|
@ -1052,7 +1051,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (scanfc(fin, "%s", arg3) < 1)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#10?\n", __func__);
|
||||
RETURNFUNC(-1);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
p3 = arg3;
|
||||
|
@ -1067,11 +1066,11 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
fprintf(stderr,
|
||||
"Invalid arg for command '%s'\n",
|
||||
cmd_entry->name);
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
else if (retcode < 0)
|
||||
{
|
||||
RETURNFUNC(retcode);
|
||||
RETURNFUNC(RIGCTL_PARSE_ERROR);
|
||||
}
|
||||
|
||||
p3 = arg3;
|
||||
|
@ -1098,13 +1097,13 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (!input_line)
|
||||
{
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
|
||||
/* Q or q to quit */
|
||||
if (!(strncasecmp(input_line, "q", 1)))
|
||||
{
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
|
||||
/* '?' for help */
|
||||
|
@ -1112,13 +1111,13 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
usage_rig(fout);
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
/* '#' for comment */
|
||||
if (!(strncmp(input_line, "#", 1)))
|
||||
{
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
/* Blank line entered */
|
||||
|
@ -1126,7 +1125,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(fout, "? for help, q to quit.\n");
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: input_line: %s\n", __func__, input_line);
|
||||
|
@ -1149,7 +1148,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
/* Oops! Invoke GDB!! */
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
|
||||
/* At this point parsed_input contains the typed text of the command
|
||||
|
@ -1208,7 +1207,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(stderr,
|
||||
"Valid multiple character command names contain alphanumeric characters plus '_'\n");
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1217,13 +1216,13 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
/* Single '\' entered, prompt again */
|
||||
else if ((*parsed_input[0] == '\\') && (strlen(parsed_input[0]) == 1))
|
||||
{
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
/* Multiple characters but no leading '\' */
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "Precede multiple character command names with '\\'\n");
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
cmd_entry = find_cmd_entry(cmd);
|
||||
|
@ -1239,7 +1238,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
fprintf(stderr, "Command '%c' not found!\n", cmd);
|
||||
}
|
||||
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
/* If vfo_opt is enabled (-o|--vfo) check if already given
|
||||
|
@ -1264,7 +1263,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
if (!input_line)
|
||||
{
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
|
||||
/* Blank line entered */
|
||||
|
@ -1272,7 +1271,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(fout, "? for help, q to quit.\n");
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
/* Get the first token of input, the rest, if any, will be
|
||||
|
@ -1287,7 +1286,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
else
|
||||
{
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1366,7 +1365,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(fout, "? for help, q to quit.\n");
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
if (input_line)
|
||||
|
@ -1376,7 +1375,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
else
|
||||
{
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1428,7 +1427,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(fout, "? for help, q to quit.\n");
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
result = strtok(input_line, " ");
|
||||
|
@ -1440,7 +1439,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
else
|
||||
{
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1494,7 +1493,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(fout, "? for help, q to quit.\n");
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
result = strtok(input_line, " ");
|
||||
|
@ -1506,7 +1505,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
else
|
||||
{
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1560,7 +1559,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
{
|
||||
fprintf(fout, "? for help, q to quit.\n");
|
||||
fflush(fout);
|
||||
RETURNFUNC(0);
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
result = strtok(input_line, " ");
|
||||
|
@ -1572,7 +1571,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
else
|
||||
{
|
||||
fprintf_flush(fout, "\n");
|
||||
RETURNFUNC(1);
|
||||
RETURNFUNC(RIGCTL_PARSE_END);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1669,7 +1668,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: vfo_opt=%d\n", __func__, *vfo_opt);
|
||||
|
||||
if (retcode == RIG_EIO)
|
||||
if (retcode == -RIG_EIO)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: RIG_EIO?\n", __func__);
|
||||
|
||||
|
@ -1727,12 +1726,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
|
|||
|
||||
if (sync_cb) { sync_cb(0); } /* unlock if necessary */
|
||||
|
||||
if (retcode == -RIG_ENAVAIL)
|
||||
{
|
||||
RETURNFUNC(retcode);
|
||||
}
|
||||
|
||||
RETURNFUNC(retcode != RIG_OK ? 2 : 0);
|
||||
RETURNFUNC(retcode);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -28,6 +28,9 @@
|
|||
#include <stdio.h>
|
||||
#include <hamlib/rig.h>
|
||||
|
||||
#define RIGCTL_PARSE_END 1
|
||||
#define RIGCTL_PARSE_ERROR 2
|
||||
|
||||
/*
|
||||
* external prototype
|
||||
*/
|
||||
|
|
|
@ -1075,21 +1075,9 @@ void *handle_socket(void *arg)
|
|||
|
||||
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: rigctl_parse retcode=%d\n", __func__, retcode); }
|
||||
|
||||
|
||||
#if 0 // disabled -- don't think we need this
|
||||
|
||||
// see https://github.com/Hamlib/Hamlib/issues/516
|
||||
if (retcode == -1)
|
||||
{
|
||||
//sleep(1); // probably don't need this delay
|
||||
//continue;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// if we get a hard error we try to reopen the rig again
|
||||
// this should cover short dropouts that can occur
|
||||
if (retcode == -RIG_EIO || retcode == 2)
|
||||
if (retcode < 0 && !RIG_IS_SOFT_ERRCODE(-retcode))
|
||||
{
|
||||
int retry = 3;
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: i/o error\n", __func__)
|
||||
|
@ -1103,39 +1091,9 @@ void *handle_socket(void *arg)
|
|||
rig_debug(RIG_DEBUG_ERR, "%s: rig_open retcode=%d\n", __func__, retcode);
|
||||
}
|
||||
while (retry-- > 0 && retcode != RIG_OK);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
if (ferror(fsockin) || ferror(fsockout) || retcode == 2)
|
||||
{
|
||||
if (ferror(fsockout)) { fsockout = get_fsockout(handle_data_arg); }
|
||||
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: socket error in=%d, out=%d\n", __func__,
|
||||
ferror(fsockin), ferror(fsockout));
|
||||
// if we get an error from the rig we'll try to repoen
|
||||
// that may fix things when COM ports drop and such
|
||||
int retry = 4;
|
||||
|
||||
if (retcode == 2)
|
||||
{
|
||||
do
|
||||
{
|
||||
retcode = rig_close(my_rig);
|
||||
hl_usleep(1000 * 1000);
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: rig_close retcode=%d\n", __func__, retcode);
|
||||
retcode = rig_open(my_rig);
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: rig_open retcode=%d\n", __func__, retcode);
|
||||
}
|
||||
while (retry-- > 0 && retcode != RIG_OK);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
while (retcode == 0 || retcode == 2 || retcode == -RIG_ENAVAIL);
|
||||
while (retcode == RIG_OK || RIG_IS_SOFT_ERRCODE(-retcode));
|
||||
|
||||
#ifdef HAVE_PTHREAD
|
||||
#if 0
|
||||
|
|
Ładowanie…
Reference in New Issue