mirror of https://github.com/wb2osz/direwolf.git
Issue 290 - Add capability to set serial port speed for hamlib.
This commit is contained in:
parent
f0bd085a13
commit
7d4a49aecb
|
@ -278,6 +278,8 @@ struct audio_s {
|
||||||
#ifdef USE_HAMLIB
|
#ifdef USE_HAMLIB
|
||||||
|
|
||||||
int ptt_model; /* HAMLIB model. -1 for AUTO. 2 for rigctld. Others are radio model. */
|
int ptt_model; /* HAMLIB model. -1 for AUTO. 2 for rigctld. Others are radio model. */
|
||||||
|
int ptt_rate; /* Serial port speed when using hamlib CAT control for PTT. */
|
||||||
|
/* If zero, hamlib will come up with a default for pariticular rig. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} octrl[NUM_OCTYPES];
|
} octrl[NUM_OCTYPES];
|
||||||
|
|
17
src/config.c
17
src/config.c
|
@ -1682,8 +1682,8 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
* xxx serial-port [-]rts-or-dtr [ [-]rts-or-dtr ]
|
* xxx serial-port [-]rts-or-dtr [ [-]rts-or-dtr ]
|
||||||
* xxx GPIO [-]gpio-num
|
* xxx GPIO [-]gpio-num
|
||||||
* xxx LPT [-]bit-num
|
* xxx LPT [-]bit-num
|
||||||
* PTT RIG model port
|
* PTT RIG model port [ rate ]
|
||||||
* PTT RIG AUTO port
|
* PTT RIG AUTO port [ rate ]
|
||||||
* PTT CM108 [ [-]bit-num ] [ hid-device ]
|
* PTT CM108 [ [-]bit-num ] [ hid-device ]
|
||||||
*
|
*
|
||||||
* When model is 2, port would host:port like 127.0.0.1:4532
|
* When model is 2, port would host:port like 127.0.0.1:4532
|
||||||
|
@ -1808,6 +1808,19 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
}
|
}
|
||||||
strlcpy (p_audio_config->achan[channel].octrl[ot].ptt_device, t, sizeof(p_audio_config->achan[channel].octrl[ot].ptt_device));
|
strlcpy (p_audio_config->achan[channel].octrl[ot].ptt_device, t, sizeof(p_audio_config->achan[channel].octrl[ot].ptt_device));
|
||||||
|
|
||||||
|
// Optional serial port rate for CAT controll PTT.
|
||||||
|
|
||||||
|
t = split(NULL,0);
|
||||||
|
if (t != NULL) {
|
||||||
|
if ( ! alldigits(t)) {
|
||||||
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
dw_printf ("Config file line %d: An optional number is required here for CAT serial port speed: %s\n", line, t);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int n = atoi(t);
|
||||||
|
p_audio_config->achan[channel].octrl[ot].ptt_rate = n;
|
||||||
|
}
|
||||||
|
|
||||||
t = split(NULL,0);
|
t = split(NULL,0);
|
||||||
if (t != NULL) {
|
if (t != NULL) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
|
35
src/ptt.c
35
src/ptt.c
|
@ -984,10 +984,20 @@ void ptt_init (struct audio_s *audio_config_p)
|
||||||
/* For "AUTO" model, try to guess what is out there. */
|
/* For "AUTO" model, try to guess what is out there. */
|
||||||
|
|
||||||
if (audio_config_p->achan[ch].octrl[ot].ptt_model == -1) {
|
if (audio_config_p->achan[ch].octrl[ot].ptt_model == -1) {
|
||||||
hamlib_port_t hport;
|
hamlib_port_t hport; // http://hamlib.sourceforge.net/manuals/1.2.15/structhamlib__port__t.html
|
||||||
|
|
||||||
memset (&hport, 0, sizeof(hport));
|
memset (&hport, 0, sizeof(hport));
|
||||||
strlcpy (hport.pathname, audio_config_p->achan[ch].octrl[ot].ptt_device, sizeof(hport.pathname));
|
strlcpy (hport.pathname, audio_config_p->achan[ch].octrl[ot].ptt_device, sizeof(hport.pathname));
|
||||||
|
|
||||||
|
if (audio_config_p->achan[ch].octrl[ot].ptt_rate > 0) {
|
||||||
|
// Override the default serial port data rate.
|
||||||
|
hport.parm.serial.rate = audio_config_p->achan[ch].octrl[ot].ptt_rate;
|
||||||
|
hport.parm.serial.data_bits = 8;
|
||||||
|
hport.parm.serial.stop_bits = 1;
|
||||||
|
hport.parm.serial.parity = RIG_PARITY_NONE;
|
||||||
|
hport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
rig_load_all_backends();
|
rig_load_all_backends();
|
||||||
audio_config_p->achan[ch].octrl[ot].ptt_model = rig_probe(&hport);
|
audio_config_p->achan[ch].octrl[ot].ptt_model = rig_probe(&hport);
|
||||||
|
|
||||||
|
@ -1011,6 +1021,29 @@ void ptt_init (struct audio_s *audio_config_p)
|
||||||
}
|
}
|
||||||
|
|
||||||
strlcpy (rig[ch][ot]->state.rigport.pathname, audio_config_p->achan[ch].octrl[ot].ptt_device, sizeof(rig[ch][ot]->state.rigport.pathname));
|
strlcpy (rig[ch][ot]->state.rigport.pathname, audio_config_p->achan[ch].octrl[ot].ptt_device, sizeof(rig[ch][ot]->state.rigport.pathname));
|
||||||
|
|
||||||
|
// Issue 290.
|
||||||
|
// We had a case where hamlib defaulted to 9600 baud for a particular
|
||||||
|
// radio model but 38400 was needed. Add an option for the configuration
|
||||||
|
// file to override the hamlib default speed.
|
||||||
|
|
||||||
|
text_color_set(DW_COLOR_INFO);
|
||||||
|
if (audio_config_p->achan[ch].octrl[ot].ptt_model != 2) { // 2 is network, not serial port.
|
||||||
|
dw_printf ("Hamlib determined CAT control serial port rate of %d.\n", rig[ch][ot]->state.rigport.parm.serial.rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Config file can optionally override the rate that hamlib came up with.
|
||||||
|
|
||||||
|
if (audio_config_p->achan[ch].octrl[ot].ptt_rate > 0) {
|
||||||
|
dw_printf ("User configuration overriding hamlib CAT control speed to %d.\n", audio_config_p->achan[ch].octrl[ot].ptt_rate);
|
||||||
|
rig[ch][ot]->state.rigport.parm.serial.rate = audio_config_p->achan[ch].octrl[ot].ptt_rate;
|
||||||
|
|
||||||
|
// Do we want to explicitly set all of these or let it default?
|
||||||
|
rig[ch][ot]->state.rigport.parm.serial.data_bits = 8;
|
||||||
|
rig[ch][ot]->state.rigport.parm.serial.stop_bits = 1;
|
||||||
|
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]);
|
int err = rig_open(rig[ch][ot]);
|
||||||
if (err != RIG_OK) {
|
if (err != RIG_OK) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
|
Loading…
Reference in New Issue