From 0be978abcd77471442c1ce3c8d8f9df70fcdd835 Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Sat, 21 Aug 2021 22:31:15 -0500 Subject: [PATCH] Add more retries to PTT serial port open https://github.com/Hamlib/Hamlib/issues/768 --- src/serial.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/serial.c b/src/serial.c index 57d6eff7b..1d8520513 100644 --- a/src/serial.c +++ b/src/serial.c @@ -224,25 +224,16 @@ int HAMLIB_API serial_open(hamlib_port_t *rp) /* * Open in Non-blocking mode. Watch for EAGAIN errors! */ - fd = OPEN(rp->pathname, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) // some serial ports fail to open 1st time for some unknown reason - { - rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#1\n", __func__, __LINE__); - hl_usleep(500*1000); + int i=1; + do { // some serial ports fail to open 1st time for some unknown reason fd = OPEN(rp->pathname, O_RDWR | O_NOCTTY | O_NDELAY); - } - if (fd == -1) - { - rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#2\n", __func__, __LINE__); - hl_usleep(500*1000); - fd = OPEN(rp->pathname, O_RDWR | O_NOCTTY | O_NDELAY); - } - if (fd == -1) - { - rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#3\n", __func__, __LINE__); - hl_usleep(500*1000); - fd = OPEN(rp->pathname, O_RDWR | O_NOCTTY | O_NDELAY); - } + if (fd == -1) // some serial ports fail to open 1st time for some unknown reason + { + rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#%d\n", __func__, __LINE__, i); + hl_usleep(500*1000); + fd = OPEN(rp->pathname, O_RDWR | O_NOCTTY | O_NDELAY); + } + } while(++i <= 4 && fd == -1); if (fd == -1) { @@ -719,13 +710,17 @@ int ser_open(hamlib_port_t *p) /* * pathname is not uh_rig or uh_ptt: simply open() */ - ret = OPEN(p->pathname, O_RDWR | O_NOCTTY | O_NDELAY); - if (ret == -1) // some serial ports fail to open 1st time + int i=1; + do // some serial ports fail to open 1st time { - rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#1\n", __func__, __LINE__); - hl_usleep(500*1000); ret = OPEN(p->pathname, O_RDWR | O_NOCTTY | O_NDELAY); - } + if (ret == -1) // some serial ports fail to open 1st time + { + rig_debug(RIG_DEBUG_WARN, "%s(%d): open failed#%d\n", __func__, __LINE__, i); + hl_usleep(500*1000); + ret = OPEN(p->pathname, O_RDWR | O_NOCTTY | O_NDELAY); + } + } while(++i <= 4 && ret == -1); } }