Fix segfault in icom_get_powerstat

pull/1148/head
Mike Black W9MDB 2022-11-08 15:09:09 -06:00
rodzic 1ef362a954
commit 2993ca9e62
2 zmienionych plików z 22 dodań i 6 usunięć

Wyświetl plik

@ -8073,9 +8073,9 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
{ {
freq_t freq; freq_t freq;
int retrysave = rig->caps->retry; int retrysave = rig->caps->retry;
rig->caps->retry = 0; rig->state.rigport.retry = 0;
int retval = rig_get_freq(rig, RIG_VFO_A, &freq); int retval = rig_get_freq(rig, RIG_VFO_A, &freq);
rig->caps->retry = retrysave; rig->state.rigport.retry = retrysave;
*status = retval==RIG_OK ? RIG_POWER_ON : RIG_POWER_OFF; *status = retval==RIG_OK ? RIG_POWER_ON : RIG_POWER_OFF;
return retval; return retval;
} }

Wyświetl plik

@ -13,6 +13,9 @@
#include <sys/time.h> #include <sys/time.h>
#include <hamlib/rig.h> #include <hamlib/rig.h>
#include "../src/misc.h" #include "../src/misc.h"
#include <termios.h>
#include <unistd.h>
#define BUFSIZE 256 #define BUFSIZE 256
#define X25 #define X25
@ -36,7 +39,7 @@ int ptt = 0;
int satmode = 0; int satmode = 0;
int agc_time = 1; int agc_time = 1;
int ovf_status = 0; int ovf_status = 0;
int powerstat = 0; int powerstat = 1;
void dumphex(unsigned char *buf, int n) void dumphex(unsigned char *buf, int n)
{ {
@ -85,6 +88,12 @@ void frameParse(int fd, unsigned char *frame, int len)
switch (frame[4]) switch (frame[4])
{ {
case 0xfe:
usleep(500 * 1000);
tcflush(fd, TCIFLUSH);
powerstat = 1;
break;
case 0x03: case 0x03:
//from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2); //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
@ -100,8 +109,12 @@ void frameParse(int fd, unsigned char *frame, int len)
} }
frame[10] = 0xfd; frame[10] = 0xfd;
if (powerstat) if (powerstat)
{
n = write(fd, frame, 11); n = write(fd, frame, 11);
}
break; break;
case 0x04: case 0x04:
@ -527,11 +540,14 @@ int main(int argc, char **argv)
} }
if (powerstat) if (powerstat)
{
frameParse(fd, buf, len); frameParse(fd, buf, len);
}
else else
{ {
usleep(1000 * 1000); usleep(1000 * 1000);
} }
rigStatus(); rigStatus();
} }