pull/224/head
Michael Black 2020-04-22 12:24:41 -05:00
commit e987e49028
4 zmienionych plików z 78 dodań i 62 usunięć

Wyświetl plik

@ -591,6 +591,7 @@ static int netrigctl_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
char cmd[CMD_MAX];
char buf[BUF_MAX];
char vfostr[6] = "";
char vfotmp[16];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@ -608,6 +609,7 @@ static int netrigctl_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
}
CHKSCN1ARG(num_sscanf(buf, "%"SCNfreq, freq));
CHKSCN1ARG(num_sscanf(buf, "%s", vfotmp));
return RIG_OK;
}
@ -2152,7 +2154,7 @@ struct rig_caps netrigctl_caps =
RIG_MODEL(RIG_MODEL_NETRIGCTL),
.model_name = "NET rigctl",
.mfg_name = "Hamlib",
.version = "20200319.0",
.version = "20200422.0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_OTHER,
@ -2161,7 +2163,7 @@ struct rig_caps netrigctl_caps =
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_NETWORK,
.timeout = 2500, /* enough for a network */
.retry = 1,
.retry = 2,
/* following fields updated in rig_state at openning time */
.has_get_func = RIG_FUNC_NONE,

Wyświetl plik

@ -669,11 +669,14 @@ int HAMLIB_API read_string(hamlib_port_t *p,
if (!p || !rxbuffer)
{
rig_debug(RIG_DEBUG_ERR, "%s: error p=%p, rxbuffer=%p\n", __func__, p,
rxbuffer);
return -RIG_EINVAL;
}
if (rxmax < 1)
{
rig_debug(RIG_DEBUG_ERR, "%s: error rxmax=%ld\n", __func__, rxmax);
return 0;
}
@ -772,7 +775,7 @@ int HAMLIB_API read_string(hamlib_port_t *p,
/*
* Doesn't hurt anyway. But be aware, some binary protocols may have
* null chars within th received buffer.
* null chars within the received buffer.
*/
rxbuffer[total_count] = '\000';

Wyświetl plik

@ -240,7 +240,7 @@ declare_proto_rig(pause);
static struct test_table test_list[] =
{
{ 'F', "set_freq", ACTION(set_freq), ARG_IN, "Frequency" },
{ 'f', "get_freq", ACTION(get_freq), ARG_OUT, "Frequency" },
{ 'f', "get_freq", ACTION(get_freq), ARG_OUT, "Frequency", "VFO" },
{ 'M', "set_mode", ACTION(set_mode), ARG_IN, "Mode", "Passband" },
{ 'm', "get_mode", ACTION(get_mode), ARG_OUT, "Mode", "Passband" },
{ 'I', "set_split_freq", ACTION(set_split_freq), ARG_IN, "TX Frequency" },
@ -489,9 +489,10 @@ static int scanfc(FILE *fin, const char *format, void *p)
}
}
if (ret < 1) rig_debug(RIG_DEBUG_TRACE, "%s: ret=%d\n", __func__, ret);
if (ferror(fin)) rig_debug(RIG_DEBUG_TRACE, "%s: errno=%d, %s\n", __func__, errno, strerror(errno));
if (ret < 1) { rig_debug(RIG_DEBUG_TRACE, "%s: ret=%d\n", __func__, ret); }
if (ferror(fin)) { rig_debug(RIG_DEBUG_TRACE, "%s: errno=%d, %s\n", __func__, errno, strerror(errno)); }
return ret;
}
while (1);
@ -630,7 +631,8 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
{
if ((retcode = scanfc(fin, "%c", &cmd)) < 1)
{
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#1? retcode=%d\n", __func__, retcode);
rig_debug(RIG_DEBUG_WARN, "%s: nothing to scan#1? retcode=%d\n", __func__,
retcode);
return -1;
}
@ -1598,6 +1600,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
*resp_sep_ptr);
}
rig_debug(RIG_DEBUG_ERR, "%s: vfo_mode=%d\n", __func__, vfo_mode);
retcode = (*cmd_entry->rig_routine)(my_rig,
fout,
fin,
@ -1613,10 +1616,10 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
p2 ? p2 : "",
p3 ? p3 : "");
if (retcode == RIG_EIO)
{
rig_debug(RIG_DEBUG_ERR, "%s: RIG_EIO?\n", __func__);
if (sync_cb) { sync_cb(0); } /* unlock if necessary */
return retcode;
@ -1664,6 +1667,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc,
fflush(fout);
rig_debug(RIG_DEBUG_TRACE, "%s: retcode=%d\n", __func__, retcode);
if (sync_cb) { sync_cb(0); } /* unlock if necessary */
if (retcode == -RIG_ENAVAIL)
@ -1919,7 +1923,7 @@ declare_proto_rig(get_freq)
if ((interactive && prompt) || (interactive && !prompt && ext_resp))
{
fprintf(fout, "VFO: "); /* i.e. "Frequency" */
fprintf(fout, "%s: ", cmd->arg2); /* i.e. "Frequency" */
}
fprintf(fout, "%s%c", rig_strvfo(rig->state.current_vfo), resp_sep);

Wyświetl plik

@ -489,6 +489,7 @@ int main(int argc, char *argv[])
case 'o':
vfo_mode++;
rig_debug(RIG_DEBUG_ERR, "%s: #0 vfo_mode=%d\n", __func__, vfo_mode);
break;
case 'v':
@ -527,6 +528,8 @@ int main(int argc, char *argv[])
}
}
rig_debug(RIG_DEBUG_ERR, "%s: #1 vfo_mode=%d\n", __func__, vfo_mode);
if (!vfo_mode)
{
printf("Recommend using --vfo switch for rigctld if client supports it\n");
@ -862,6 +865,7 @@ int main(int argc, char *argv[])
{
arg->rig = my_rig;
arg->clilen = sizeof(arg->cli_addr);
rig_debug(RIG_DEBUG_ERR, "%s: #2 vfo_mode=%d\n", __func__, vfo_mode);
arg->vfo_mode = vfo_mode;
arg->sock = accept(sock_listen,
(struct sockaddr *)&arg->cli_addr,
@ -1019,107 +1023,110 @@ void *handle_socket(void *arg)
do
{
rig_debug(RIG_DEBUG_ERR, "%s: vfo_mode=%d\n", __func__,
handle_data_arg->vfo_mode);
retcode = rigctl_parse(handle_data_arg->rig, fsockin, fsockout, NULL, 0,
sync_callback,
1, 0, handle_data_arg->vfo_mode, send_cmd_term, &ext_resp, &resp_sep);
if (retcode != 0) rig_debug(RIG_DEBUG_ERR, "%s: rigctl_parse retcode=%d\n", __func__, retcode);
if (retcode == -1) {
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: rigctl_parse retcode=%d\n", __func__, retcode); }
if (retcode == -1)
{
sleep(1);
continue;
}
if (ferror(fsockin) || ferror(fsockout))
{
rig_debug(RIG_DEBUG_ERR,"%s: socket error in=%d, out=%d\n", __func__, ferror(fsockin), ferror(fsockout));
retcode = 1;
rig_debug(RIG_DEBUG_ERR, "%s: socket error in=%d, out=%d\n", __func__,
ferror(fsockin), ferror(fsockout));
if (retcode == 1)
{
retcode = rig_close(my_rig);
rig_debug(RIG_DEBUG_ERR,"%s: rig_close retcode=%d\n", __func__, retcode);
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);
}
rig_debug(RIG_DEBUG_ERR, "%s: rig_open retcode=%d\n", __func__, retcode);
}
}
while (retcode == 0 || retcode == 2 || retcode == -RIG_ENAVAIL);
}
while (retcode == 0 || retcode == 2 || retcode == -RIG_ENAVAIL);
#ifdef HAVE_PTHREAD
#if 0
sync_callback(1);
sync_callback(1);
/* Release rig if there are no clients */
if (!--client_count)
{
rig_close(my_rig);
if (verbose > RIG_DEBUG_ERR)
{
printf("Closed rig model %d, '%s - no clients, will reopen for new clients'\n",
my_rig->caps->rig_model,
my_rig->caps->model_name);
}
}
sync_callback(0);
#endif
#else
/* Release rig if there are no clients */
if (!--client_count)
{
rig_close(my_rig);
if (verbose > RIG_DEBUG_ERR)
{
printf("Closed rig model %d, '%s - will reopen for new clients'\n",
printf("Closed rig model %d, '%s - no clients, will reopen for new clients'\n",
my_rig->caps->rig_model,
my_rig->caps->model_name);
}
}
sync_callback(0);
#endif
#else
rig_close(my_rig);
if (verbose > RIG_DEBUG_ERR)
{
printf("Closed rig model %d, '%s - will reopen for new clients'\n",
my_rig->caps->rig_model,
my_rig->caps->model_name);
}
#endif
if ((retcode = getnameinfo((struct sockaddr const *)&handle_data_arg->cli_addr,
handle_data_arg->clilen,
host,
sizeof(host),
serv,
sizeof(serv),
NI_NOFQDN))
< 0)
{
if ((retcode = getnameinfo((struct sockaddr const *)&handle_data_arg->cli_addr,
handle_data_arg->clilen,
host,
sizeof(host),
serv,
sizeof(serv),
NI_NOFQDN))
< 0)
{
rig_debug(RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror(retcode));
}
rig_debug(RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror(retcode));
}
rig_debug(RIG_DEBUG_VERBOSE,
"Connection closed from %s:%s\n",
host,
serv);
rig_debug(RIG_DEBUG_VERBOSE,
"Connection closed from %s:%s\n",
host,
serv);
handle_exit:
// for MINGW we close the handle before fclose
#ifdef __MINGW32__
retcode = closesocket(handle_data_arg->sock);
retcode = closesocket(handle_data_arg->sock);
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: fclose(fsockin) %s\n", __func__, strerror(retcode)); }
if (retcode != 0) { rig_debug(RIG_DEBUG_ERR, "%s: fclose(fsockin) %s\n", __func__, strerror(retcode)); }
#endif
fclose(fsockin);
fclose(fsockout);
fclose(fsockin);
fclose(fsockout);
// for everybody else we close the handle after fclose
#ifndef __MINGW32__
retcode = close(handle_data_arg->sock);
retcode = close(handle_data_arg->sock);
if (retcode != 0 && errno != EBADF) { rig_debug(RIG_DEBUG_ERR, "%s: close(handle_data_arg->sock) %s\n", __func__, strerror(errno)); }
if (retcode != 0 && errno != EBADF) { rig_debug(RIG_DEBUG_ERR, "%s: close(handle_data_arg->sock) %s\n", __func__, strerror(errno)); }
#endif
free(arg);
free(arg);
#ifdef HAVE_PTHREAD
pthread_exit(NULL);
pthread_exit(NULL);
#endif
return NULL;
return NULL;
}