kopia lustrzana https://github.com/Hamlib/Hamlib
Add multicast thread -- the intent is that this will always run
https://github.com/Hamlib/Hamlib/issues/695pull/712/head
rodzic
cbec6cd4ba
commit
8e63ce7a36
|
@ -44,6 +44,7 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
|
@ -396,6 +397,23 @@ int network_close(hamlib_port_t *rp)
|
||||||
}
|
}
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
|
||||||
|
volatile int multicast_server_run = 1;
|
||||||
|
pthread_t multicast_server_threadId;
|
||||||
|
|
||||||
|
//! @cond Doxygen_Suppress
|
||||||
|
// our multicast server loop
|
||||||
|
static void *multicast_server(void *arg)
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_TRACE, "%s(%d): Starting multicast server\n", __FILE__, __LINE__);
|
||||||
|
do {
|
||||||
|
rig_debug(RIG_DEBUG_TRACE, "%s(%d): Multicast server poll\n", __FILE__, __LINE__);
|
||||||
|
hl_usleep(1000*1000);
|
||||||
|
} while(multicast_server_run);
|
||||||
|
rig_debug(RIG_DEBUG_TRACE, "%s(%d): Stopping multicast server\n", __FILE__, __LINE__);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Open multicast server using rig.state data
|
* \brief Open multicast server using rig.state data
|
||||||
*
|
*
|
||||||
|
@ -430,6 +448,13 @@ int network_multicast_server(RIG *rig, const char *multicast_addr, int default_p
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s(%d) unknown MULTICAST item requested=0x%x\n", __FILE__, __LINE__, items);
|
rig_debug(RIG_DEBUG_ERR, "%s(%d) unknown MULTICAST item requested=0x%x\n", __FILE__, __LINE__, items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int err = pthread_create(&multicast_server_threadId, NULL, multicast_server, NULL);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_ERR, "%s(%d) pthread_create error %s\n", __FILE__, __LINE__, strerror(errno));
|
||||||
|
return -RIG_EINTERNAL;
|
||||||
|
}
|
||||||
|
|
||||||
RETURNFUNC(RIG_OK);
|
RETURNFUNC(RIG_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
src/rig.c
13
src/rig.c
|
@ -60,6 +60,8 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
|
||||||
#include <hamlib/rig.h>
|
#include <hamlib/rig.h>
|
||||||
|
@ -1096,6 +1098,17 @@ int HAMLIB_API rig_close(RIG *rig)
|
||||||
|
|
||||||
ENTERFUNC;
|
ENTERFUNC;
|
||||||
|
|
||||||
|
// terminate the multicast server
|
||||||
|
extern int multicast_server_run;
|
||||||
|
multicast_server_run = 0;
|
||||||
|
extern pthread_t multicast_server_threadId;
|
||||||
|
int err = pthread_join(multicast_server_threadId, NULL);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_ERR, "%s(%d): pthread_join error %s\n", __FILE__, __LINE__, strerror(errno));
|
||||||
|
// just ignore it
|
||||||
|
}
|
||||||
|
|
||||||
if (!rig || !rig->caps)
|
if (!rig || !rig->caps)
|
||||||
{
|
{
|
||||||
RETURNFUNC(-RIG_EINVAL);
|
RETURNFUNC(-RIG_EINVAL);
|
||||||
|
|
Ładowanie…
Reference in New Issue