Limit the error retry in rigctld.c to 4 times

https://github.com/Hamlib/Hamlib/issues/551
This commit is contained in:
Michael Black W9MDB 2021-02-18 06:48:06 -06:00
parent 1e9a991a25
commit 06723c959b

View File

@ -83,7 +83,6 @@
/*
* Reminder: when adding long options,
* keep up to date SHORT_OPTIONS, usage()'s output and man page. thanks.
* NB: do NOT use -W since it's reserved by POSIX.
* TODO: add an option to read from a file
*/
#define SHORT_OPTIONS "m:r:p:d:P:D:s:c:T:t:C:W:x:z:lLuovhVZ"
@ -108,6 +107,7 @@ static struct option long_options[] =
{"help", 0, 0, 'h'},
{"version", 0, 0, 'V'},
{"twiddle_timeout", 1, 0, 'W'},
{"twiddle_rit" , 0, 0, 'Y'},
{"uplink", 1, 0, 'x'},
{"debug-time-stamps", 0, 0, 'Z'},
{0, 0, 0, 0}
@ -249,6 +249,7 @@ int main(int argc, char *argv[])
int sock_listen;
int reuseaddr = 1;
int twiddle = 0;
int twiddle_rit = 0;
int uplink = 0;
char host[NI_MAXHOST];
char serv[NI_MAXSERV];
@ -526,6 +527,10 @@ int main(int argc, char *argv[])
twiddle = atoi(optarg);
break;
case 'Y':
twiddle_rit=1;
break;
case 'x':
if (!optarg)
{
@ -586,9 +591,10 @@ int main(int argc, char *argv[])
}
my_rig->state.twiddle_timeout = twiddle;
my_rig->state.twiddle_rit = twiddle_rit;
my_rig->state.uplink = uplink;
rig_debug(RIG_DEBUG_TRACE, "%s: twiddle=%d, uplink=%d\n", __func__,
my_rig->state.twiddle_timeout, my_rig->state.uplink);
rig_debug(RIG_DEBUG_TRACE, "%s: twiddle=%d, uplink=%d, twiddle_rit=%d\n", __func__,
my_rig->state.twiddle_timeout, my_rig->state.uplink, my_rig->state.twiddle_rit);
/*
* ex: RIG_PTT_PARALLEL and /dev/parport0
@ -1097,16 +1103,20 @@ void *handle_socket(void *arg)
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));
do
// 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)
{
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);
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);
}
while (retcode != RIG_OK);
}
}
while (retcode == 0 || retcode == 2 || retcode == -RIG_ENAVAIL);
@ -1213,6 +1223,7 @@ void usage(void)
" -o, --vfo do not default to VFO_CURR, require extra vfo arg\n"
" -v, --verbose set verbose mode, cumulative (-v to -vvvvv)\n"
" -W, --twiddle_timeout timeout after detecting vfo manual change\n"
" -W, --twiddle_rit suppress VFOB getfreq so RIT can be twiddled"
" -x, --uplink set uplink get_freq ignore, 1=Sub, 2=Main\n"
" -Z, --debug-time-stamps enable time stamps for debug messages\n"
" -h, --help display this help and exit\n"