Skip to content

Commit b46cbdd

Browse files
authored
Configurable baudrate for NMEA GPS receiver.
1 parent b66c21d commit b46cbdd

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

Diff for: src/config.c

+11-1
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,7 @@ void config_init (char *fname, struct audio_s *p_audio_config,
894894
p_misc_config->kiss_serial_poll = 0;
895895

896896
strlcpy (p_misc_config->gpsnmea_port, "", sizeof(p_misc_config->gpsnmea_port));
897+
p_misc_config->gpsnmea_speed = 0;
897898
strlcpy (p_misc_config->waypoint_serial_port, "", sizeof(p_misc_config->waypoint_serial_port));
898899

899900
p_misc_config->log_daily_names = 0;
@@ -4685,7 +4686,8 @@ void config_init (char *fname, struct audio_s *p_audio_config,
46854686

46864687

46874688
/*
4688-
* GPSNMEA - Device name for reading from GPS receiver.
4689+
* GPSNMEA name [ speed ] - Device name and speed for reading from GPS receiver.
4690+
* If no speed is provided, a default of 4800 is used.
46894691
*/
46904692
else if (strcasecmp(t, "gpsnmea") == 0) {
46914693
t = split(NULL,0);
@@ -4697,6 +4699,14 @@ void config_init (char *fname, struct audio_s *p_audio_config,
46974699
else {
46984700
strlcpy (p_misc_config->gpsnmea_port, t, sizeof(p_misc_config->gpsnmea_port));
46994701
}
4702+
t = split(NULL,0);
4703+
if (t == NULL) {
4704+
p_misc_config->gpsnmea_speed = 4800;
4705+
}
4706+
else {
4707+
p_misc_config->gpsnmea_speed = atoi(t);
4708+
}
4709+
dw_printf ("Using port %s at %d bps for NMEA GPS.\n", p_misc_config->gpsnmea_port, p_misc_config->gpsnmea_speed);
47004710
}
47014711

47024712
/*

Diff for: src/config.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ struct misc_config_s {
7676

7777
char gpsnmea_port[20]; /* Serial port name for reading NMEA sentences from GPS. */
7878
/* e.g. COM22, /dev/ttyACM0 */
79-
/* Currently no option for setting non-standard speed. */
79+
int gpsnmea_speed; /* Speed in bps for the GPS serial port. */
8080

8181
char gpsd_host[20]; /* Host for gpsd server. */
8282
/* e.g. localhost, 192.168.1.2 */

Diff for: src/dwgpsnmea.c

+2-5
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,9 @@ int dwgpsnmea_init (struct misc_config_s *pconfig, int debug)
145145
/*
146146
* Open serial port connection.
147147
* 4800 baud is standard for GPS.
148-
* Should add an option to allow changing someday.
149148
*/
150149

151-
s_gpsnmea_port_fd = serial_port_open (pconfig->gpsnmea_port, 4800);
150+
s_gpsnmea_port_fd = serial_port_open (pconfig->gpsnmea_port, pconfig->gpsnmea_speed);
152151

153152
if (s_gpsnmea_port_fd != MYFDERROR) {
154153
#if __WIN32__
@@ -182,12 +181,10 @@ int dwgpsnmea_init (struct misc_config_s *pconfig, int debug)
182181

183182

184183
/* Return fd to share if waypoint wants same device. */
185-
/* Currently both are fixed speed at 4800. */
186-
/* If that ever becomes configurable, that needs to be compared too. */
187184

188185
MYFDTYPE dwgpsnmea_get_fd(char *wp_port_name, int speed)
189186
{
190-
if (strcmp(s_save_configp->gpsnmea_port, wp_port_name) == 0 && speed == 4800) {
187+
if (strcmp(s_save_configp->gpsnmea_port, wp_port_name) == 0 && s_save_configp->gpsnmea_speed == speed) {
191188
return (s_gpsnmea_port_fd);
192189
}
193190
return (MYFDERROR);

0 commit comments

Comments
 (0)