kopia lustrzana https://github.com/Hamlib/Hamlib
Fix cppcheck warnings
rodzic
f45aea8859
commit
a4c10c3206
|
@ -40,6 +40,11 @@
|
||||||
// to stop warnings about including winsock2.h before windows.h
|
// to stop warnings about including winsock2.h before windows.h
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#else
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// For MSVC install the NUGet pthread package
|
// For MSVC install the NUGet pthread package
|
||||||
|
@ -936,6 +941,7 @@ enum meter_level_e {
|
||||||
*/
|
*/
|
||||||
typedef union {
|
typedef union {
|
||||||
signed int i; /*!< Signed integer */
|
signed int i; /*!< Signed integer */
|
||||||
|
unsigned int u; /*!< Unsigned integer */
|
||||||
float f; /*!< Single precision float */
|
float f; /*!< Single precision float */
|
||||||
char *s; /*!< Pointer to char string */
|
char *s; /*!< Pointer to char string */
|
||||||
const char *cs; /*!< Pointer to constant char string */
|
const char *cs; /*!< Pointer to constant char string */
|
||||||
|
|
|
@ -718,7 +718,7 @@ int aor_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||||
|
|
||||||
if (rig->caps->rig_model == RIG_MODEL_AR8000)
|
if (rig->caps->rig_model == RIG_MODEL_AR8000)
|
||||||
{
|
{
|
||||||
sscanf(ackbuf + 2, "%x", &val->i);
|
sscanf(ackbuf + 2, "%x", &val->u);
|
||||||
val->i &= ~0x80; /* mask squelch status */
|
val->i &= ~0x80; /* mask squelch status */
|
||||||
}
|
}
|
||||||
else if (rig->caps->rig_model == RIG_MODEL_AR8200 ||
|
else if (rig->caps->rig_model == RIG_MODEL_AR8200 ||
|
||||||
|
@ -728,7 +728,7 @@ int aor_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sscanf(ackbuf + 3, "%x", &val->i);
|
sscanf(ackbuf + 3, "%x", &val->u);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -8,7 +8,7 @@ DISTCLEANFILES =
|
||||||
|
|
||||||
bin_PROGRAMS =
|
bin_PROGRAMS =
|
||||||
|
|
||||||
check_PROGRAMS = simelecraft simicom simkenwood simyaesu simicom9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817
|
check_PROGRAMS = simelecraft simicom simkenwood simyaesu simicom9100 simicom9700 simft991 simftdx1200 simftdx3000 simjupiter simpowersdr simid5100 simft736 simftdx5000 simtmd700 simrotorez simspid simft817
|
||||||
|
|
||||||
simelecraft_SOURCES = simelecraft.c
|
simelecraft_SOURCES = simelecraft.c
|
||||||
simicom_SOURCES = simicom.c
|
simicom_SOURCES = simicom.c
|
||||||
|
|
126
src/multicast.c
126
src/multicast.c
|
@ -44,30 +44,43 @@ static int multicast_status_changed(RIG *rig)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rmode_t mode, modesave = rig->state.cache.modeMainA;
|
rmode_t modeA, modeAsave = rig->state.cache.modeMainA;
|
||||||
pbwidth_t width, widthsave = rig->state.cache.widthMainA;
|
rmode_t modeB, modeBsave = rig->state.cache.modeMainB;
|
||||||
|
pbwidth_t widthA, widthAsave = rig->state.cache.widthMainA;
|
||||||
|
pbwidth_t widthB, widthBsave = rig->state.cache.widthMainB;
|
||||||
|
|
||||||
if (rig->state.multicast->seqnumber % 2 == 0
|
if (rig->state.multicast->seqnumber % 2 == 0
|
||||||
&& (retval = rig_get_mode(rig, RIG_VFO_A, &mode, &width)) != RIG_OK)
|
&& (retval = rig_get_mode(rig, RIG_VFO_A, &modeA, &widthA)) != RIG_OK)
|
||||||
{
|
{
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s: rig_get_freq:%s\n", __func__, rigerror(retval));
|
rig_debug(RIG_DEBUG_ERR, "%s: rig_get_modeA:%s\n", __func__, rigerror(retval));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode != modesave) { return 1; }
|
if (modeA != modeAsave) { return 1; }
|
||||||
|
|
||||||
if (width != widthsave) { return 1; }
|
if (widthA != widthAsave) { return 1; }
|
||||||
|
|
||||||
|
if (rig->state.multicast->seqnumber % 2 == 0
|
||||||
|
&& (rig->caps->targetable_vfo & RIG_TARGETABLE_MODE)
|
||||||
|
&& (retval = rig_get_mode(rig, RIG_VFO_B, &modeB, &widthB)) != RIG_OK)
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_ERR, "%s: rig_get_modeB:%s\n", __func__, rigerror(retval));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modeB != modeBsave) { return 1; }
|
||||||
|
|
||||||
|
if (widthB != widthBsave) { return 1; }
|
||||||
|
|
||||||
ptt_t ptt, pttsave = rig->state.cache.ptt;
|
ptt_t ptt, pttsave = rig->state.cache.ptt;
|
||||||
|
|
||||||
if (rig->state.multicast->seqnumber % 2 == 0
|
if (rig->state.multicast->seqnumber % 2 == 0
|
||||||
&& (retval = rig_get_ptt(rig, RIG_VFO_A, &ptt)) != RIG_OK)
|
&& (retval = rig_get_ptt(rig, RIG_VFO_CURR, &ptt)) != RIG_OK)
|
||||||
if (ptt != pttsave) { return 1; }
|
if (ptt != pttsave) { return 1; }
|
||||||
|
|
||||||
split_t split, splitsave = rig->state.cache.split;
|
split_t split, splitsave = rig->state.cache.split;
|
||||||
vfo_t txvfo;
|
vfo_t txvfo;
|
||||||
|
|
||||||
if (rig->state.multicast->seqnumber % 2 == 0
|
if (rig->state.multicast->seqnumber % 2 == 0
|
||||||
&& (retval = rig_get_split_vfo(rig, RIG_VFO_A, &split, &txvfo)) != RIG_OK)
|
&& (retval = rig_get_split_vfo(rig, RIG_VFO_CURR, &split, &txvfo)) != RIG_OK)
|
||||||
if (split != splitsave) { return 1; }
|
if (split != splitsave) { return 1; }
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -163,8 +176,31 @@ void json_add_vfoA(RIG *rig, char *msg)
|
||||||
json_add_int(msg, "Width", rig->state.cache.widthMainA);
|
json_add_int(msg, "Width", rig->state.cache.widthMainA);
|
||||||
}
|
}
|
||||||
|
|
||||||
json_add_boolean(msg, "RX", !rig->state.cache.ptt);
|
// what about full duplex? rx_vfo would be in rx all the time?
|
||||||
json_add_boolean(msg, "TX", rig->state.cache.ptt);
|
if (rig->state.rx_vfo != rig->state.tx_vfo && rig->state.cache.split)
|
||||||
|
{
|
||||||
|
if (rig->state.tx_vfo && (RIG_VFO_B | RIG_VFO_MAIN_B))
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", !rig->state.cache.ptt);
|
||||||
|
json_add_boolean(msg, "TX", 0);
|
||||||
|
}
|
||||||
|
else // we must be in reverse split
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", 0);
|
||||||
|
json_add_boolean(msg, "TX", rig->state.cache.ptt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (rig->state.current_vfo && (RIG_VFO_A | RIG_VFO_MAIN_A))
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", !rig->state.cache.ptt);
|
||||||
|
json_add_boolean(msg, "TX", rig->state.cache.ptt);
|
||||||
|
}
|
||||||
|
else // VFOB must be active so never RX or TX
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", 0);
|
||||||
|
json_add_boolean(msg, "TX", 0);
|
||||||
|
}
|
||||||
|
|
||||||
strcat(msg, "\n}\n");
|
strcat(msg, "\n}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,8 +220,30 @@ void json_add_vfoB(RIG *rig, char *msg)
|
||||||
json_add_int(msg, "Width", rig->state.cache.widthMainB);
|
json_add_int(msg, "Width", rig->state.cache.widthMainB);
|
||||||
}
|
}
|
||||||
|
|
||||||
json_add_boolean(msg, "RX", !rig->state.cache.ptt);
|
if (rig->state.rx_vfo != rig->state.tx_vfo && rig->state.cache.split)
|
||||||
json_add_boolean(msg, "TX", rig->state.cache.ptt);
|
{
|
||||||
|
if (rig->state.tx_vfo && (RIG_VFO_B | RIG_VFO_MAIN_B))
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", 0);
|
||||||
|
json_add_boolean(msg, "TX", rig->state.cache.ptt);
|
||||||
|
}
|
||||||
|
else // we must be in reverse split
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", rig->state.cache.ptt);
|
||||||
|
json_add_boolean(msg, "TX", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (rig->state.current_vfo && (RIG_VFO_A | RIG_VFO_MAIN_A))
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", !rig->state.cache.ptt);
|
||||||
|
json_add_boolean(msg, "TX", rig->state.cache.ptt);
|
||||||
|
}
|
||||||
|
else // VFOB must be active so always RX or TX
|
||||||
|
{
|
||||||
|
json_add_boolean(msg, "RX", 1);
|
||||||
|
json_add_boolean(msg, "TX", 1);
|
||||||
|
}
|
||||||
|
|
||||||
strcat(msg, "\n},\n");
|
strcat(msg, "\n},\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,19 +282,31 @@ void *multicast_thread(void *vrig)
|
||||||
while (rig->state.multicast->runflag)
|
while (rig->state.multicast->runflag)
|
||||||
{
|
{
|
||||||
hl_usleep(100 * 1000);
|
hl_usleep(100 * 1000);
|
||||||
freq_t freq, freqsave = 0;
|
freq_t freqA, freqAsave = 0;
|
||||||
|
freq_t freqB, freqBsave = 0;
|
||||||
|
|
||||||
if ((retval = rig_get_freq(rig, RIG_VFO_A, &freq)) != RIG_OK)
|
if ((retval = rig_get_freq(rig, RIG_VFO_A, &freqA)) != RIG_OK)
|
||||||
{
|
{
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s: rig_get_freq:%s\n", __func__, rigerror(retval));
|
rig_debug(RIG_DEBUG_ERR, "%s: rig_get_freqA:%s\n", __func__, rigerror(retval));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (freq != freqsave || loopcount-- == 0)
|
if ((rig->caps->targetable_vfo & RIG_TARGETABLE_FREQ)
|
||||||
|
&& (retval = rig_get_freq(rig, RIG_VFO_B, &freqB)) != RIG_OK)
|
||||||
|
{
|
||||||
|
rig_debug(RIG_DEBUG_ERR, "%s: rig_get_freqB:%s\n", __func__, rigerror(retval));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
freqB = rig->state.cache.freqMainB;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (freqA != freqAsave || freqB != freqBsave || loopcount-- == 0)
|
||||||
{
|
{
|
||||||
multicast_status_changed(rig);
|
multicast_status_changed(rig);
|
||||||
multicast_send_json(rig);
|
multicast_send_json(rig);
|
||||||
loopcount = 4;
|
loopcount = 4;
|
||||||
freqsave = freq;
|
freqAsave = freqA;
|
||||||
|
freqBsave = freqB;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -249,6 +319,25 @@ void *multicast_thread(void *vrig)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
static char *GetWinsockLastError(char *errorBuffer, DWORD errorBufferSize)
|
||||||
|
{
|
||||||
|
void GetWinsockErrorString(char *errorBuffer, DWORD errorBufferSize) {
|
||||||
|
int errorCode = WSAGetLastError();
|
||||||
|
DWORD charsWritten;
|
||||||
|
|
||||||
|
FormatMessage(
|
||||||
|
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL,
|
||||||
|
errorCode,
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
errorBuffer,
|
||||||
|
errorBufferSize,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int multicast_init(RIG *rig, char *addr, int port)
|
int multicast_init(RIG *rig, char *addr, int port)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -256,7 +345,8 @@ int multicast_init(RIG *rig, char *addr, int port)
|
||||||
|
|
||||||
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
|
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "WSAStartup failed: %d\n", WSAGetLastError());
|
char errorMessage[1024];
|
||||||
|
fprintf(stderr, "WSAStartup failed: %s\n", GetWinsockLastError(errorMessage, sizeof(errorMessage)));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue