diff --git a/src/ptt.c b/src/ptt.c index d5e28160..5187f1df 100644 --- a/src/ptt.c +++ b/src/ptt.c @@ -991,6 +991,8 @@ void ptt_init (struct audio_s *audio_config_p) for (ot = 0; ot < NUM_OCTYPES; ot++) { if (audio_config_p->achan[ch].octrl[ot].ptt_method == PTT_METHOD_HAMLIB) { if (ot == OCTYPE_PTT) { + int err = -1; + int tries = 0; /* For "AUTO" model, try to guess what is out there. */ @@ -1055,13 +1057,24 @@ void ptt_init (struct audio_s *audio_config_p) rig[ch][ot]->state.rigport.parm.serial.parity = RIG_PARITY_NONE; rig[ch][ot]->state.rigport.parm.serial.handshake = RIG_HANDSHAKE_NONE; } - int err = rig_open(rig[ch][ot]); + tries = 0; + do { + // Try up to 5 times, Hamlib can take a moment to finish init + err = rig_open(rig[ch][ot]); + if (++tries > 5) { + break; + } else if (err != RIG_OK) { + text_color_set(DW_COLOR_INFO); + dw_printf ("Retrying Hamlib Rig open...\n"); + sleep (5); + } + } while (err != RIG_OK); if (err != RIG_OK) { text_color_set(DW_COLOR_ERROR); dw_printf ("Hamlib Rig open error %d: %s\n", err, rigerror(err)); rig_cleanup (rig[ch][ot]); rig[ch][ot] = NULL; - continue; + exit (1); } /* Successful. Later code should check for rig[ch][ot] not NULL. */