summaryrefslogtreecommitdiff
path: root/astro/gpsdrive/files/patch-src-gpsd.c
blob: 58fcd74e4ab98a464bd3f9d31553d3ded580982c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
--- src/gpsd.c~	Fri Apr 19 20:26:14 2002
+++ src/gpsd.c	Thu Jun 27 18:02:12 2002
@@ -78,27 +78,31 @@
 int debug = 0;
 int device_speed = B4800;
 int device_type;
+int nfds;  /* number of file descriptors to select() for */
 char *device_name = 0;
 char *latitude = 0;
 char *longitude = 0;
 char latd = 'N';
 char lond = 'W';
-				/* command line option defaults */
-char *default_device_name = "/dev/gps";
-char *default_latitude = "3600.000";
-char *default_longitude = "-12300.000";
-
-int nfds, dsock;
-int verbose = 1;
-int bincount;
 
-int reopen = 0;
+/* command line option defaults */
+static char *default_device_name = "/dev/gps";
+static char *default_latitude = "3600.000";
+static char *default_longitude = "-12300.000";
+
+static int dsock; /* socket to dpgs server */
+
+/* If set, close (and reopen?) the serial interface. Triggered by SIGUSR1. */
+static int reopen = 0;
+
 
 static int handle_input (int input, fd_set * afds, fd_set * nmea_fds);
-extern int handle_EMinput (int input, fd_set * afds, fd_set * nmea_fds);
 static int handle_request (int fd, fd_set * fds);
-int connectsock (char *host, char *service, char *protocol);
-void em_send_rtcm (unsigned short *rtcmbuf, int rtcmbytes);
+
+extern int handle_EMinput (int input, fd_set * afds, fd_set * nmea_fds);
+extern int connectsock (char *host, char *service, char *protocol);
+extern void em_send_rtcm (unsigned short *rtcmbuf, int rtcmbytes);
+
 
 static void
 onsig (int sig)
@@ -164,16 +168,17 @@
   char *default_service = "gpsd";
   char *default_dgpsserver = "dgps.wsrcc.com";
   char *default_dgpsport = "rtcm-sc104";
-  char *service = 0;
+  char *service = 0; /* port number to listen to */
   char *dgpsport = 0;
   char *dgpsserver = 0;
   struct sockaddr_in fsin;
-  int msock;
+  int msock; /* listening socket fd */
   fd_set rfds;
   fd_set afds;
   fd_set nmea_fds;
   int alen;
-  int fd, input;
+  int fd;
+  int input; /* GPS device fd */
   int need_gps, need_dgps = 0, need_init = 1;
   extern char *optarg;
   int option;
@@ -273,17 +278,18 @@
 	default:
 	  fputs ("usage:  gpsd [options] \n\
   options include: \n\
-  -D integer   [ set debug level ] \n\
+  -D level     [ set debug level. If >= 2, remain in foreground ] \n\
   -L longitude [ set longitude ] \n\
-  -S integer   [ set port for daemon ] \n\
-  -T e         [ earthmate flag ] \n\
-  -h           [ help message ] \n\
   -l latitude  [ set latitude ] \n\
-  -p string    [ set gps device name ] \n\
+  -S port      [ set gpsd listening port ] \n\
+  -T type      [ set DeLorme models. e = Earthmate, t = Tripmate ] \n\
+  -h           [ help message ] \n\
+  -p path      [ set gps device pathname ] \n\
   -s baud_rate [ set baud rate on gps device ] \n\
   -c           [ use dgps service for corrections ] \n\
-  -d host      [ set dgps server ] \n\
-  -r port      [ set dgps rtcm-sc104 port ] \n\
+  -d host      [ set dgps server hostname] \n\
+  -r port      [ set dgps server port ] \n\
+  -n           [ disable setting default values for longitute and latitute ] \n\
 ", stderr);
 	  exit (0);
 	}
@@ -354,8 +360,11 @@
 	  need_dgps = 0;
 	}
     }
-
-  nfds = getdtablesize ();
+#ifndef min
+#define min(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+  /* still wrong, but at least do not coredump */
+  nfds = min (getdtablesize (), FD_SETSIZE);
 
   FD_ZERO (&afds);
   FD_ZERO (&nmea_fds);
@@ -375,10 +384,9 @@
 
   while (1)
     {
-      memcpy ((char *) &rfds, (char *) &afds, sizeof (rfds));
+      memcpy (&rfds, &afds, sizeof (rfds));
 
-      if (select (nfds, &rfds, (fd_set *) 0, (fd_set *) 0,
-		  (struct timeval *) 0) < 0)
+      if (select (nfds, &rfds, NULL, NULL, NULL) < 0)
 	{
 	  if (errno == EINTR)
 	    continue;
@@ -599,6 +607,7 @@
 {
   static unsigned char buf[BUFSIZE];	/* that is more then a sentence */
   static int offset = 0;
+  static int bincount;
   int fd;
 
   while (offset < BUFSIZE)