Make find_port win32_serial_find_port so it can used elsewhere

Use WIN32 PurgeComm instead of polling chars
https://github.com/Hamlib/Hamlib/issues/1123
pull/1347/head
Mike Black W9MDB 2023-07-24 12:15:37 -05:00
rodzic f5b4cd6047
commit 09143fcff9
3 zmienionych plików z 32 dodań i 19 usunięć

Wyświetl plik

@ -68,8 +68,6 @@ extern int errno;
struct termios_list *first_tl = NULL; struct termios_list *first_tl = NULL;
static struct termios_list *find_port(int);
/*---------------------------------------------------------- /*----------------------------------------------------------
serial_test serial_test
@ -740,7 +738,7 @@ int win32_serial_close(int fd)
return (0); return (0);
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -1080,7 +1078,7 @@ termios_list()
comments: comments:
----------------------------------------------------------*/ ----------------------------------------------------------*/
static struct termios_list *find_port(int fd) struct termios_list *win32_serial_find_port(int fd)
{ {
char message[80]; char message[80];
@ -1468,7 +1466,7 @@ int win32_serial_write(int fd, const char *Str, int length)
return 0; return 0;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -1567,7 +1565,7 @@ int win32_serial_read(int fd, void *vb, int size)
return 0; return 0;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -1766,7 +1764,7 @@ int win32_serial_read(int fd, void *vb, int size)
return 0; return 0;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -2388,7 +2386,7 @@ int tcgetattr(int fd, struct termios *s_termios)
return 0; return 0;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -2631,7 +2629,7 @@ int tcsetattr(int fd, int when, struct termios *s_termios)
return 0; return 0;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -2842,7 +2840,7 @@ int tcsendbreak(int fd, int duration)
ENTER("tcsendbreak"); ENTER("tcsendbreak");
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -2887,7 +2885,7 @@ int tcdrain(int fd)
int old_flag; int old_flag;
ENTER("tcdrain"); ENTER("tcdrain");
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -2964,7 +2962,7 @@ int tcflush(int fd, int queue_selector)
ENTER("tcflush"); ENTER("tcflush");
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -3145,7 +3143,7 @@ int win32_serial_ioctl(int fd, int request, ...)
return 0; return 0;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -3614,7 +3612,7 @@ int win32_serial_fcntl(int fd, int command, ...)
return 0; return 0;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -3667,7 +3665,7 @@ termios_interrupt_event_loop()
----------------------------------------------------------*/ ----------------------------------------------------------*/
static void termios_interrupt_event_loop(int fd, int flag) static void termios_interrupt_event_loop(int fd, int flag)
{ {
struct termios_list *index = find_port(fd); struct termios_list *index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -3717,7 +3715,7 @@ int win32_serial_select(int n, fd_set *readfds, fd_set *writefds,
goto fail; goto fail;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -3874,7 +3872,7 @@ int win32_serial_select(int n, fd_set *readfds, fd_set *writefds,
return 1; return 1;
} }
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -4007,7 +4005,7 @@ static int termiosGetParityErrorChar(int fd)
DCB dcb; DCB dcb;
ENTER("termiosGetParityErrorChar"); ENTER("termiosGetParityErrorChar");
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {
@ -4037,7 +4035,7 @@ static void termiosSetParityError(int fd, char value)
struct termios_list *index; struct termios_list *index;
ENTER("termiosSetParityErrorChar"); ENTER("termiosSetParityErrorChar");
index = find_port(fd); index = win32_serial_find_port(fd);
if (!index) if (!index)
{ {

Wyświetl plik

@ -149,6 +149,7 @@ int win32_serial_read(int fd, void *b, int size);
int win32_serial_write(int fd, const char *Str, int length); int win32_serial_write(int fd, const char *Str, int length);
int win32_serial_ioctl(int fd, int request, ... ); int win32_serial_ioctl(int fd, int request, ... );
int win32_serial_fcntl(int fd, int command, ...); int win32_serial_fcntl(int fd, int command, ...);
struct termios_list *win32_serial_find_port(int);
/* /*
* lcc winsock.h conflicts * lcc winsock.h conflicts
*/ */

Wyświetl plik

@ -730,6 +730,20 @@ int HAMLIB_API serial_flush(hamlib_port_t *p)
short timeout_retry_save; short timeout_retry_save;
unsigned char buf[4096]; unsigned char buf[4096];
#ifdef __WIN32__
struct termios_list *index;
index = win32_serial_find_port(fd);
if (!index)
{
rig_debug(RIG_DEBUG_ERR, "%s: No WIN32 index for port???\n", __func__);
return -1;
}
PurgeComm(index->hComm, PURGE_RXCLEAR);
return RIG_OK;
#endif
if (p->fd == uh_ptt_fd || p->fd == uh_radio_fd || p->flushx) if (p->fd == uh_ptt_fd || p->fd == uh_radio_fd || p->flushx)
{ {
/* /*