mirror of https://github.com/wb2osz/direwolf.git
Handle slow Hamlib init. This change adds a retry loop to the (#484)
rig_open call. If the rig_open continues to fail after 5 tries, exit.
This commit is contained in:
parent
2434e5f13b
commit
a87b72e040
17
src/ptt.c
17
src/ptt.c
|
@ -991,6 +991,8 @@ void ptt_init (struct audio_s *audio_config_p)
|
||||||
for (ot = 0; ot < NUM_OCTYPES; ot++) {
|
for (ot = 0; ot < NUM_OCTYPES; ot++) {
|
||||||
if (audio_config_p->achan[ch].octrl[ot].ptt_method == PTT_METHOD_HAMLIB) {
|
if (audio_config_p->achan[ch].octrl[ot].ptt_method == PTT_METHOD_HAMLIB) {
|
||||||
if (ot == OCTYPE_PTT) {
|
if (ot == OCTYPE_PTT) {
|
||||||
|
int err = -1;
|
||||||
|
int tries = 0;
|
||||||
|
|
||||||
/* For "AUTO" model, try to guess what is out there. */
|
/* 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.parity = RIG_PARITY_NONE;
|
||||||
rig[ch][ot]->state.rigport.parm.serial.handshake = RIG_HANDSHAKE_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) {
|
if (err != RIG_OK) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("Hamlib Rig open error %d: %s\n", err, rigerror(err));
|
dw_printf ("Hamlib Rig open error %d: %s\n", err, rigerror(err));
|
||||||
rig_cleanup (rig[ch][ot]);
|
rig_cleanup (rig[ch][ot]);
|
||||||
rig[ch][ot] = NULL;
|
rig[ch][ot] = NULL;
|
||||||
continue;
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Successful. Later code should check for rig[ch][ot] not NULL. */
|
/* Successful. Later code should check for rig[ch][ot] not NULL. */
|
||||||
|
|
Loading…
Reference in New Issue